在此,先修改下osgfbo(五)中纹理坐标的表示方法,不是说osgfbo(五)中的做法不对,而是我更愿意明确的把纹理坐标数组赋值到(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,将纹理坐标按照以前传递shader数组的方式,传递到shader(注意,序号不能为0,这里设置为1)
geom->setVertexAttribArray(1, texCoord, osg::Array::BIND_PER_VERTEX);
//geom->setTexCoordArray(0, texCoord);
3,在shader之前传递纹理坐标变量(这里也设置为1)
program1->addBindAttribLocation("texCoord", 1);
4,在shader中,顶点shader改为
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 =
{
“varying vec2 outTexCoord;”
“uniform sampler2D tex0;”
“void main(void)\n”
“{\n”
“gl_FragColor = texture2D(tex0,outTexCoord);”文章来源:https://www.toymoban.com/news/detail-405223.html
"}"
"}\n"
};文章来源地址https://www.toymoban.com/news/detail-405223.html
到了这里,关于osgfbo(七)纹理坐标的另一种表示方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!