陰影映射(Shadow Map)的研究(三),shadowmap

來源:互聯網
上載者:User

陰影映射(Shadow Map)的研究(三),shadowmap
陰影映射(Shadow Map)的研究(三)

       最近為了自己製作的項目可是吃了不少苦頭,這其中關鍵的一點就是想要實現陰影映射(Shadow Map)。為了實現目標,我參考了網路上很多相關的資料,也看了一些案例,最終花了我一個月的時間將這個效果實現了。

       陰影映射這樣的效果,其實在即將發布的Qt 3D中已經有相關的介紹,KDAB中有一篇文章《Shadow Mappingin Qt3D 2.0》就在Qt 3D的架構上實現了陰影映射。不過當時這個效果是假定目標機器支援OpenGL 3.0規範的,目前大部分裝置,至少是現在,還只能支援OpenGL ES2.0,因此文章無法很好的參考,於是我轉到了其它相關的教程,看看的能不能在OpenGL ES 2.0下實現陰影映射的效果。好在網路上是有這樣寶貴的資料的,在code project網站上,有一篇很好的文章,雖然是基於Android的,使用Java語言編寫,但是能夠很好地顯示陰影映射的效果,最重要的是,由於Android基本上是支援OpenGL ES 2.0的,因此它這個是基於OpenGL ES 2.0來寫的,給我們帶來了很好的參考。原文是:《Shadow Mappingwith Android OpenGL ES 2》。此外,文章引用了其它的連結,其中《Tutorial 16 :Shadow mapping》這篇文章從問題開始入手,研究陰影映射的本質,參考的價值高。

       要實現基於OpenGL ES 2.0的陰影映射,要攻克這三個技術痛點:

1、 熟練操作FBO。幀緩衝FBO是需要熟練操控的,因為FBO可以很快地將深度圖寫入一塊顯存中,然後作為紋理渲染到真實的情境中。

2、 掌握著色器的使用。由於OpenGL ES 2.0隻允許使用著色器來對其進行渲染,因此對著色器的書寫熟練程度要求較高。

3、 掌握將float深度資料分拆成vec4再將vec4合并成float的操作。這個已經成為業內熟練掌握的技能之一了,網路上搜尋“how to pack float into RGBA”,能夠得到很多有用的回答。

我在熟讀《Shadow Mappingwith Android OpenGL ES 2》文章以及源碼數遍之後,使用Qt將測試的情境移植了過來。下面是:


源碼:這裡

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.