Come posso inviare le informazioni a un effetto HLSL in DirectX 10?
-
05-10-2019 - |
Domanda
Mi piacerebbe inviare il mio vettore vista ad una variabile ID3D10Effect al fine di calcolare l'illuminazione speculare. Come posso inviare un vettore o di valori anche solo scalari al HLSL dal programma di DirectX in esecuzione? Voglio fare qualcosa di simile
render() {
//do transformations
D3DXMatrix view = camera->getViewMatrix();
basicEffect.setVariable(viewVector, view);
//render stuff
}
Soluzione
Nel vostro effetto, si dovrebbe avere qualcosa di simile a:
cbuffer {
float4x4 viewMatrix;
}
Poi nella funzione di rendering, prima vincolante l'effetto:
D3DXMatrix view = camera->getViewMatrix();
basicEffect->GetVariableByName("viewMatrix")->AsMatrix()->SetMatrix((float*) &view);
Come la maggior parte degli attributi maniglie effetto, vorrei suggerire 'cache' il puntatore alla variabile. Memorizzazione la variabile di matrice in un altro puntatore al di fuori del vostro ciclo di rendering, come:
ID3D10EffectMatrixVariable* vmViewMatrix = basicEffect->GetVariableByName("viewMatrix")->AsMatrix();
E quindi impostando i giri variabile in:
vmViewMatrix->SetMatrix((float*) &view);
Altri suggerimenti
GetVariableByName per ottenere un'interfaccia alla variabile denominata in HLSL. Chiama AsVector (Si noti la documentazione all'indirizzo questo punto è sbagliato. Esso restituisce un puntatore!) sull'interfaccia restituita per ottenere un'interfaccia variabile vettoriale e quindi chiamare SetFloatVector .