OSG geometry 手动设置纹理
来源:互联网 发布:李白的艺术成就 知乎 编辑:程序博客网 时间:2024/05/01 15:59
OSG geometry 手动设置纹理
一、原理
下面展示一张512*512的地形纹理图,现在要将纹理图,贴到地形表面上,这就需要计算每个顶点对应的纹理坐标了,通过纹理坐标与对应的顶点相关联,这样纹理就可以映射到地形表面了。那么,现在分为2个步骤,首先计算纹理坐标,接着使用OSG环境将纹理坐标与几何顶点相关联,并显示出来。
二、计算纹理坐标
纹理坐标如下图,左下角为(0,0 )右上角为(1,1),也就是每一个轴向在0-1范围内变化,数据类型为浮点型。我们将纹理图映射到地形所覆盖的大小即可(现在我们只考虑完全覆盖的情况)。
现在,我们开始计算纹理坐标了。假设我们的地形大小为128*128(即128*128个顶点),我们这样计算每个顶点的纹理坐标:
osg::ref_ptr<osg::Vec2Array> texcoords= new osg::Vec2Array;geometry->setTexCoordArray(0,texcoords);int iY;int iX;for( iY=0; iY<m_iSize-1; iY++ ){for( iX=0; iX<m_iSize; iX++ ){//纹理坐标float texLeft = (float)iX/(m_iSize-1);float texbottom = (float)iY/(m_iSize-1);float texTop = (float)(iY+1)/(m_iSize-1);texcoords->push_back(osg::Vec2(texLeft,texbottom));points->push_back(osg::Vec3((float)iX, (float)iY, GetScaledHeightAtPoint(iX,iY)));texcoords->push_back(osg::Vec2(texLeft,texTop));points->push_back(osg::Vec3((float)iX, (float)iY+1, GetScaledHeightAtPoint(iX,iY+1)));}geometry->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::Mode::TRIANGLE_FAN,iY*m_iSize*2,m_iSize*2));}osg::StateSet* stateset = geometry->getOrCreateStateSet();stateset->setTextureAttributeAndModes(0,texture0,osg::StateAttribute::ON);
0 0
- OSG geometry 手动设置纹理
- osg纹理材质设置
- OSG设置纹理和渲染属性
- OSG::geometry绘图类
- 6、osg::Geode,osg::Drawable,osg::Shape,osg::Geometry,
- osg::Geode,osg::Drawable,osg::Shape,osg::Geometry
- osg纹理动画效果
- OSG:4.纹理贴图
- OpenGL、OSG纹理
- osg 1 添加纹理
- osg 纹理初步探究
- osg 添加纹理
- osg纹理映射
- osg获取纹理节点纹理方法
- osg RTT 渲染到纹理
- OSG RTT 渲染到纹理
- OSG学习:多重纹理映射
- OSG学习:计算纹理坐标
- 启动报错:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
- httpclient4.3简单封装,模拟登录
- 社説 20150626 米中戦略対話 「責任ある競争相手」に程遠い
- 控制器之间传值,逆传
- Appium实践(一)
- OSG geometry 手动设置纹理
- 高斯-约当(Gauss-Jordan)消元法
- 用HTML5构建一个流程图绘制工具
- Cocos2d-js05-添加身体和移动身体
- js数组传到后台
- 北京时间6月27日早7点30分,中国女足对阵强敌美国女足
- 社説 20150626 米大統領交渉権 TPPの早期妥結につなげよ
- [XCode] XCode 中设置 UI 部件的 z-order
- Gradle简单教程(2)——Gradle环境搭建