日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Directx教程(27) 简单的光照模型(6)

發(fā)布時間:2025/6/17 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Directx教程(27) 简单的光照模型(6) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Directx教程(27) 簡單的光照模型(6) 原文:Directx教程(27) 簡單的光照模型(6)

???? 從myTutorialD3D11_15到myTutorialD3D11_19的工程中,我們都只有一個光源,光源的位置在LightClass中我設置為m_position = D3DXVECTOR4(5.0, 5.0, -3.0,1.0),所以我們渲染的cube,在前面,右側,上面都沒有問題,但是,我們通過A鍵移動攝像機后,會發(fā)現(xiàn)右側的面沒有光照效果。這是因為右側面的法向是-x方向,漫反射光和高光都為0,所以效果很差。

現(xiàn)在我們將在場景中增加第二個光源,位置放在SetLightPosition(-8.0, -4.0, 5.0,1.0);,代碼的主要改動如下:

???? 1、除了攝像機位置外,材質光源等其它屬性設置,都放在LightShaderClass類中,我們可以看到Render和SetShaderParameters兩個函數(shù)的參數(shù)變少了很多。

bool Render(ID3D11DeviceContext* , int , D3DXMATRIX , D3DXMATRIX , D3DXMATRIX , D3DXVECTOR4);
bool SetShaderParameters(ID3D11DeviceContext* , D3DXMATRIX , D3DXMATRIX , D3DXMATRIX, D3DXVECTOR4);
????

??? 2、在common.h中定義一個宏表示光源的數(shù)量。

#define NUM_LIGHTS 2

?

????? 現(xiàn)在,LightShaderClass中材質光源結構變成了:

struct? LightMaterialBufferType
??? {
??? D3DXVECTOR4 lightPosition[NUM_LIGHTS]; //光源位置
??? D3DXVECTOR4 lightColor[NUM_LIGHTS];?? //光源顏色
??? D3DXVECTOR4 globalAmbient[NUM_LIGHTS]; //光源的環(huán)境光反射系數(shù)
??? D3DXVECTOR4 cameraPosition; //攝像機的位置
??? D3DXVECTOR4 Ke[NUM_LIGHTS];? //材質的自發(fā)光
??? D3DXVECTOR4 Ka[NUM_LIGHTS];? //材質的環(huán)境光系數(shù)
??? D3DXVECTOR4 Kd[NUM_LIGHTS];? //材質的漫反射系數(shù)
??? D3DXVECTOR4 Ks[NUM_LIGHTS];? //材質的高光系數(shù)
??? D3DXVECTOR3 lightDirection[NUM_LIGHTS]; //平行光方向
??? float shininess[NUM_LIGHTS]; //高光指數(shù)
???? };

???? 3、同樣,light.ps中的材質光源常量緩沖也要做相應的改變,然后在生成光照顏色時,我們通過一個for循環(huán)來累加每個光源的貢獻。

???? 程序執(zhí)行后的效果如下,我們可以看到cube的右側面也有了不錯的光照效果。

完整的代碼請參考:

工程文件myTutorialD3D11_20

代碼下載:

http://files.cnblogs.com/mikewolf2002/myTutorialD3D11.zip

posted on 2019-05-06 08:30 NET未來之路 閱讀(...) 評論(...) 編輯 收藏

轉載于:https://www.cnblogs.com/lonelyxmas/p/10817604.html

總結

以上是生活随笔為你收集整理的Directx教程(27) 简单的光照模型(6)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。