1. 程式人生 > >Ogre材質指令碼中定義引數變數

Ogre材質指令碼中定義引數變數


1、頂點著色程式中傳遞引數:

GpuProgramParametersSharedPtr params = entity->getSubEntity(0)->getMaterial()->
getTechnique(0)->getPass(0)->getVertexProgram().createParameters();
params->setNamedConstant(“ambient”,  ColourValue(0.5, 0.5 0.5 1.0));

2、片段著色程式中傳遞引數:

      指令碼中:

param_named_auto worldMatrix3x4Array[0] world_matrix_array_3x4
param_named_auto viewProjectionMatrix viewproj_matrix
param_named_auto ambient custom 12

    後面額外的引數(“12)是用來傳遞給Ogre程式來辨認到底是繫結到哪個引數上面。被繫結到GPU程式中的變數型別只能是4-vector(四元向量)型別(換句話說,就是Ogre中的Vector類),但是從CPUGPU傳遞資料具體的含義可以任你確定,比如在我們現在的例子中,我們認為這個定製的引數的意義是RGBA各式的顏色值。

      程式中:

Vector4 myColor;
entity->getSubEntity(0)->setCustomParameter(12, myColor);

   現在,當GPU程式開始執行渲染到這個通路的時候,Ogre會自動的提供當前的

myColor變數的值作為引數。而我們在指令碼中使用的索引(“12)的唯一目的就是為了查詢繫結引數,需要注意的是,這個索引值不可以為0