osgfbo (seven) テクスチャ座標の別の表現方法

ここでは、まず osgfbo (5) のテクスチャ座標の表現方法を変更します。osgfbo (5) の方法が間違っているとは言えませんが、テクスチャ座標配列を (0, 1) に明示的に割り当てることをお勧めします。つまり
1、テクスチャ座標を設定
osg::ref_ptrosg::Vec2Array texCoord = new osg::Vec2Array;
texCoord->push_back(osg::Vec2(0.0, 0.0));
texCoord->push_back(osg::Vec2(1.0, 0.0 ));
texCoord->push_back(osg::Vec2(1.0, 1.0));
texCoord->push_back(osg::Vec2(0.0, 1.0));
2. テクスチャ座標をシェーダーに渡します (シリアル番号に注意してください) 0 にすることはできません。ここでは 1 に設定されています)

geom->setVertexAttribArray(1, texCoord, osg::Array::BIND_PER_VERTEX);
//geom->setTexCoordArray(0, texCoord);

3. シェーダの前にテクスチャ座標変数を渡します (ここでも 1 に設定)

		program1->addBindAttribLocation("texCoord", 1);

4. シェーダーでは、頂点シェーダーが次のように変更されます。

static const char * vertexShader =
{ "in vec2 texCoord;\n" "varying vec2 outTexCoord;" "void main(void)\n" "{\n" "outTexCoord = texCoord;\n" " gl_Position = ftransform();\n" "}\n" };







5,传递给片元着色器

static const char *psShader =
{ 「変化する vec2 outTexCoord;」「均一 sampler2D tex0;」「void main(void)\n」「{\n」「gl_FragColor = texture2D(tex0,outTexCoord);」




"}"

"}\n"

};

Supongo que te gusta

Origin blog.csdn.net/directx3d_beginner/article/details/129892474
Recomendado
Clasificación