2010-05-29 47 views
0

我想將視圖向量發送到ID3D10Effect變量以計算鏡面光照。如何從運行的DirectX程序向HLSL發送向量或甚至標量值?我想要做類似如何將信息發送到DirectX 10中的HLSL效果?

render() { 
    //do transformations 
    D3DXMatrix view = camera->getViewMatrix(); 
    basicEffect.setVariable(viewVector, view); 
    //render stuff 
} 

回答

1

在你的影響,你應該有這樣的:

cbuffer { 
    float4x4 viewMatrix; 
} 

然後在你的渲染功能,結合的效果之前:

D3DXMatrix view = camera->getViewMatrix(); 
basicEffect->GetVariableByName("viewMatrix")->AsMatrix()->SetMatrix((float*) &view); 

與大多數效果屬性的把手,我會建議「緩存「指向變量的指針。在渲染循環之外另一個指針存儲矩陣變量,如:

ID3D10EffectMatrixVariable* vmViewMatrix = basicEffect->GetVariableByName("viewMatrix")->AsMatrix(); 

,然後設置變量變成:

vmViewMatrix->SetMatrix((float*) &view); 
2

使用GetVariableByName獲取HLSL中指定變量的接口。在返回的接口上調用AsVector(注意此處的文檔是錯誤的,它返回一個指針!)以獲取矢量變量接口,然​​後調用SetFloatVector