osg for android 学习之七:绘制基本的对象

本文介绍了如何在Android上使用OpenGL ES绘制基本的几何对象,包括使用纹理的点,绘制坐标轴的直线,以及创建面。示例代码详细展示了创建顶点、颜色、法线和设置渲染模式的过程。
摘要由CSDN通过智能技术生成

1. 点

用一个球代替


osg::ShapeDrawable* sd = new osg::ShapeDrawable(new osg::Sphere( root->getBound().center(), 2));
osg::Geode* lightNode = new osg::Geode;
lightNode->addDrawable(sd);
lightNode->getOrCreateStateSet()->setTextureAttributeAndModes(0, new osg::Texture2D(osgDB::readImageFile("Images/land_shallow_topo_2048.jpg")));
root->addChild(lightNode);

纹理的使用如下:

我们使用StateSet类来控制几何基元的渲染状态。下面的代码演示了从文件中读取纹理,创建StateSet类并设置纹理,以及关联StateSet到场景节点的方法。代码的前一部分与上一章教程相同。首先我们初始化视窗并创建只有单一金字塔的场景。

int main()
{

   // 声明场景的根节点
   osg::Group* root = new osg::Group();
   osg::Geode* pyramidGeode = createPyramid();
   root->addChild(pyramidGeode);

现在我们添加纹理。我们定义一个纹理实例并设置其数据变更类型为“DYNAMIC”(否则的话,OSG的优化过程中可能会自动去除这个纹理)。纹理类封装了OpenGL纹理模式(GL_TEXTURE_WRAP,GL_TEXTURE_FILTER等),以及一个osg::Image对象。下面的代码将演示如何从文件读入osg::Image实例并将其关联到纹理。

   osg::Texture2D* KLN89FaceTexture = new osg::Texture2D;

   //避免在优化过程中出错
   KLN89FaceTexture->setDataVariance(osg::Object::DYNAMIC); 

   // 从文件读取图片
   osg::Image* klnFace = osgDB::readImageFile("KLN89FaceB.tga");
   if (!klnFace)
   {
      std::cout << " couldn't find texture, quiting." << std::endl;
      return -1;
   }

   //  将图片关联到纹理
   KLN89FaceTexture->setImage(klnFace);

Texture类可以关联到渲染状态StateSet类。下一步我们将创建一个StateSet,将纹理关联到这个渲染状态实例并允许使用纹理,最后将StateSet关联到几何体节点上。

   // 创建StateSet
   osg::StateSet* stateOne = new osg::StateSet();

   // 将纹理关联给StateSet的纹理单元0
   stateOne->setTextureAttributeAndModes
      (0,KLN89FaceTexture,osg::StateAttribute::ON);
   //  将渲染状态关联给金字塔节点
   pyramidGeode->setStateSet(stateOne);

 

   osgViewer::Viewer viewer;

   //最后我们
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值