2010-05-29 20 views
0

Je voudrais envoyer mon vecteur de vue à une variable ID3D10Effect afin de calculer l'éclairage spéculaire. Comment envoyer un vecteur ou même simplement des valeurs scalaires au HLSL à partir du programme DirectX en cours d'exécution? Je veux faire quelque chose commeComment envoyer des informations à un effet HLSL dans DirectX 10?

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

Répondre

1

Dans votre effet, vous devriez avoir quelque chose comme:

cbuffer { 
    float4x4 viewMatrix; 
} 

Ensuite, dans votre rendu fonction, avant de se lier l'effet:

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

Comme avec la plupart effet attribut poignées, je suggère ' mettre en cache 'le pointeur vers la variable. Le stockage de la variable de la matrice dans un autre pointeur à l'extérieur de votre boucle de rendu, comme:

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

Et puis en définissant la variable se transforme en:

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

Utilisez GetVariableByName pour obtenir une interface à la variable nommée dans le HLSL. Appelez AsVector (Notez que la documentation à ce stade est erronée. Elle renvoie un pointeur!) Sur l'interface retournée pour obtenir une interface de variable vectorielle, puis appelez SetFloatVector.