2010-05-29 2 views
0

Я бы хотел отправить свой вектор просмотра в переменную ID3D10Effect, чтобы рассчитать зеркальное освещение. Как отправить векторные или даже скалярные значения в HLSL из запущенной программы DirectX? Я хочу сделать что-то вродеКак отправить информацию в эффект HLSL в DirectX 10?

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.

Смежные вопросы