日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

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

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

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

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

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

#define NUM_LIGHTS 2

?

????? 現在,LightShaderClass中材質光源結構變成了:

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

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

???? 程序執行后的效果如下,我們可以看到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)的全部內容,希望文章能夠幫你解決所遇到的問題。

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