|
本帖最后由 becky 于 2014-6-6 15:38 编辑
在看osgdistortion例子时,对渲染到纹理这种方法很困惑。希望各位大神能帮我解决我的困惑,感激不尽!
例子中的一段程序如下:
for(i=0;i<noSteps;++i)
{
osg::Vec3 cursor = bottom+dy*(float)i;
osg::Vec2 texcoord = bottom_texcoord+dy_texcoord*(float)i;
for(j=0;j<noSteps;++j)
{
vertices->push_back(cursor);
texcoords->push_back(osg::Vec2((sin(texcoord.x()*osg:: PI-osg:: PI*0.5)+1.0f)*0.5f,(sin(texcoord.y()*osg:: PI-osg:: PI*0.5)+1.0f)*0.5f));
colors->push_back(osg::Vec4(1.0f,1.0f,1.0f,1.0f));
cursor += dx;
texcoord += dx_texcoord;
}
}
polyGeom->setVertexArray(vertices);
polyGeom->setColorArray(colors);
polyGeom->setTexCoordArray(0,texcoords);
我的理解是:这种方法可以把图像渲染到纹理上,而不是屏幕上,通过使纹理形变来达到distortion的目的。最后屏幕上显示的即是纹理的图像。我的理解对吗? 是不是vertices中保存的是原始的点,texcoords中保存的是形变后的点呢? |
|