yag Site Admin
註冊時間: 2007-05-02 文章: 689
2704.11 果凍幣
|
發表於: 2010-3-9, AM 8:13 星期二 文章主題: 3D遊戲程式設計入門第18章心得[未解之疑問篇] |
|
|
前言:此乃補丁文。只講解心得,不提供完整教學,有興趣的人請自行購買此書。
代碼: | 書名:3D遊戲程式設計入門-使用DirectX 9.0實作
作者:Frank D. Luna
譯者:黃聖峰
出版社:博碩文化 |
在範例碼中我們可以看到
當頂點格式需要三個uv座標時
FVF只需要「 | D3DFVF_TEX3 」即可
而不需要同時「 | D3DFVF_TEX1 | D3DFVF_TEX2 | D3DFVF_TEX3 」
我以前一直以為是要三個都「|」…
主要也是因為以前沒有使用到一個以上的經驗
關於此範例中的D3DXCompileShaderFromFile函式:
代碼: | hr = D3DXCompileShaderFromFile(
"ps_multitex.txt",
0,
0,
"Main", // entry point function name
"ps_1_1",
D3DXSHADER_DEBUG,
&shader,
&errorBuffer,
&MultiTexCT); |
預設是用ps_1_1版本去編譯pixel shader
我分別用了兩台電腦做過測試
其中一台很正常的編譯過去了
另一台在執行時會出現含有以下錯誤資訊的dialog:
代碼: | error X3539: ps_1_x is no longer supported; use /Gec in fxc to automatically upgrade to ps_2_0
error X3539: Alternately, fxc's /LD option allows use of the old compiler DLL |
我的解決辦法是把ps_1_1改成ps_2_0就可以成功編譯pixel shader
從錯誤資訊中看來似乎是可以藉由改變編譯設定參數來使用舊版的ps_1_1 shader compiler
不過我找不到修正的地方,還請有經驗的大大能指點一下該怎麼設定
話說書上所附的spotlight.bmp這個聚光燈光照圖的中間是黑的…
但是偏偏run出來的光照狀況很正常
這真是太神奇了
我試著用小畫家去修改它
發現只要做了任何一丁點的修改,然後把它儲存過一次
接著run出來的光照狀況就會發現中間是黑的
實在不太明白這張圖是被做過什麼手腳
在Setup函式的最後面我們做了
代碼: | MultiTexCT->SetDefaults(Device); |
因為我很好奇這一行是否一定要放在最後面
所以試著把它移到了
代碼: | hr = Device->CreatePixelShader(
(DWORD*)shader->GetBufferPointer(),
&MultiTexPS); |
這個區塊之前,也就是在MultiTexCT剛確定建好我就呼叫了SetDefaults
實驗結果證明這個呼叫不一定要放在最後面
只要建立好就可以呼叫了
因為run起來都是正常的 |
|