OSG教程学习加实践(2)
《OSG教程学习加实践(2)》由会员分享,可在线阅读,更多相关《OSG教程学习加实践(2)(3页珍藏版)》请在装配图网上搜索。
1、在编程开始前要认识一下*.tga后缀的文件: TGA格式(Tagged Graphics)是由美国Truevision公司为其显示卡开发的一种图像文件格式,文件后 缀为“• tga”,已被国际上的图形、图像工业所接受。 TGA的结构比较简单,属于一种图形、图像数据的通用格式,在多媒体领域有很大影响,是计 算机生成图像向电视转换的一种首选格式。 TGA图像格式最大的特点是可以做出不规则形状的图形、图像文件,一般图形、图像文件都为 四方形,若需要有圆形、菱形甚至是缕空的图像文件时,TGA可就派上用场了! TGA格式支持压缩,使用不失真的压缩算法。 在工业设计领域,使用三维软件制作出来
2、的图像可以利用TGA格式的优势,在图像内部生成一
个Alpha (通道),这个功能方便了在平面软件中的工作。
#include
3、 namespace std; osg::Geode* createPyramid() { osg::Geode* pyramidGeode = new osg::Geode(); osg::Geometry* pyramidGeometry = new osg::Geometry(); pyramidGeode->addDrawable(pyramidGeometry); // 指定顶点 osg::Vec3Array* pyramidVertices = new osg::Vec3Array; pyramidVertices->push_back( osg::Vec3(0,
4、0, 0) ); // 左前 pyramidVertices->push_back( osg::Vec3(2, 0, 0) ); // 右前 pyramidVertices->push_back( osg::Vec3(2, 2, 0) ); // 右后 pyramidVertices->push_back( osg::Vec3( 0,2, 0) ); // 左后 pyramidVertices->push_back( osg::Vec3( 1, 1,2) ); // 塔尖 // 将顶点数组关联给几何体 pyramidGeometry->setVertexArray( pyramid
5、Vertices ); //根据底面的四个顶点创建底面四边形(QUAD) osg::DrawElementsUlnt* pyramidBase = new osg::DrawElementsUInt(osg::PrimitiveSet::QUADS, 0); pyramidBase->push_back(3); pyramidBase->push_back(2); pyramidBase->push_back(1); pyramidBase->push_back(0); // 创建其他面的代码从略 osg::Vec4Array* colors = new osg::Vec4Ar
6、ray;
colors->push_back(osg::Vec4(1.0f, 0.0f, 0.0f, 1.0f) ); //索引 0 红色
colors->push_back(osg::Vec4(0.0f, 1.0f, 0.0f, 1.0f) ); //索引 1 绿色
colors->push_back(osg::Vec4(0.0f, 0.0f, 1.0f, 1.0f) ); //索引 2 蓝色
colors->push_back(osg::Vec4(1.0f, 1.0f, 1.0f, 1.0f) ); //索引 3 白色
osg::TemplateIndexArray
7、gned int, osg::Array::UIntArrayType,4,4> *colorIndexArray;
colorIndexArray =
new osg::TemplateIndexArray 8、orIndexArray->push_back(3); // 顶点 3 对应颜色元素 3 colorIndexArray->push_back(0); // 顶点 4 对应颜色元素 0
pyramidGeometry->setColorArray(colors);
pyramidGeometry->setColorIndices(colorIndexArray);
pyramidGeometry->setColorBinding(osg::Geometry::BIND_PER_VERTEX);
osg::Vec2Array* texcoords = new osg::Vec2Array 9、(5);
(*texcoords)[0].set(0.00f,0.0f); // 顶点 0 的纹理坐标
(*texcoords)[1].set(0.25f,0.0f); // 顶点 1 的纹理坐标
(*texcoords)[2].set(0.50f,0.0f); // 顶点 2 的纹理坐标
(*texcoords)[3].set(0.75f,0.0f); // 顶点 3 的纹理坐标
(*texcoords)[4].set(0.50f,1.0f); // 顶点 4 的纹理坐标
pyramidGeometry->setTexCoordArray(0,texcoords);
retur 10、n pyramidGeode;
}
int main()
{
// 声明场景的根节点
osg::Group* root = new osg::Group();
osg::Geode* pyramidGeode = createPyramid();
root->addChild(pyramidGeode);
osg::Texture2D* KLN89FaceTexture = new osg::Texture2D;
//避免在优化过程中出错
KLN89FaceTexture->setDataVariance(osg::Object::DYNAMIC);
// 从文件读取图片 11、
osg::Image* klnFace = osgDB::readImageFile("KLN89FaceB.tga");
if (!klnFace)
{
printf(" couldn't find texture, quiting.");//输出错误
system("pause");
return -1;
}
// 将图片关联到纹理
KLN89FaceTexture->setImage(klnFace);
// 创建 StateSet
osg::StateSet* stateOne = new osg::StateSet();
//将纹理关联给StateSet的纹理单元0
stateOne->setTextureAttributeAndModes
(0,KLN89FaceTexture,osg::StateAttribute::ON);
// 将渲染状态关联给金字塔节点
pyramidGeode->setStateSet(stateOne);
osgViewer::Viewer viewer;
//最后我们进入仿真循环:
viewer.setSceneData( root );
return viewer.run();
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。