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
}
È stato utile?

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top