您的位置:首页 > 其它

美国海军研究生学校(NPS)OSG教程学习笔记——第二课

2010-01-06 22:31 591 查看
NPS教程的第二课是《使用StateSet 创建带有纹理的几何体》,在第一课的基础上,本课给金字塔披上漂亮的纹理图像,使金字塔看起来更逼真。

相对于OpenGL中设置纹理的繁琐步骤,OSG确实为我们简化了大量的工作。我们仅仅需要做以下三件事:

1.正确设置纹理坐标。

osg::Vec2Array* tex_coords = new osg::Vec2Array;

tex_coords.push_back(osg::Vec2f(0.00, 0.0)); // 顶点0的纹理坐标

tex_coords.push_back(osg::Vec2f(0.25, 0.0)); // 顶点1的纹理坐标

tex_coords.push_back(osg::Vec2f(05.0, 0.0)); // 顶点2的纹理坐标

tex_coords.push_back(osg::Vec2f(0.75, 0.0)); // 顶点3的纹理坐标

tex_coords.push_back(osg::Vec2f(0.50, 1.0)); // 顶点4的纹理坐标

pyramid_geom->setTexCoordArray(0, tex_coords);

2.定义纹理,并将图像关联到纹理

osg::Texture2D* KLN89Face_texture = new osg::Texture2D; // 定义一个二维纹理对象

KLN89Face_texture->setDataVariance(osg::Object::DYNAMIC); // 避免OSG在优化过程中自动去除纹理,没有开启优化功能就没必要设置了

osg::Image* image = osgDB::readImageFile("KLN89FaceB.tga"); // 读入一张图像,OpenGL中读取图像真是一项伤脑筋的事,OSG使我们解脱了

KLN89Face_texture->setImage(image); // 将图像关联到纹理上

3.通过渲染状态StateSet类,将纹理和几何体关联起来

osg::StateSet* state = new osg::StateSet();

state->setTextureAttributeAndModes(0, KLN89Face_texture, osg::StateAttribute::ON); // 将纹理关联到StateSet的纹理单元0,每个StateSet可以设置多个纹理单元

pyramid_geode->setStateSet(state); // 将渲染状态关联到金字塔节点

OK,大功告成!是不是相当简单呢?当然如果你想作出更炫的效果,可得下功夫研究研究纹理,其中的无限精彩等待我们去发掘。欢迎来信交流,邮箱地址是batonyh@163.com

本教程来自于网友的无私奉献,感谢你们辛勤劳动!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐