OSG之二维纹理坐标

您所在的位置:网站首页 opengl多纹理渲染 OSG之二维纹理坐标

OSG之二维纹理坐标

2023-04-24 09:07| 来源: 网络整理| 查看: 265

在所有的纹理映射中,二维纹理映射的过程最简单,也非常容易理解。在用户应用程序中创建二维纹理的步骤如下:

(1)指定用户几何体的纹理坐标;

(2)创建纹理属性对象并保存纹理图形数据;

(3)为StateSet设置合适的纹理属性和模式。

在前面几何体的绘制时已经提到用一个二维的向量数据来保存纹理坐标。设置纹理坐标比较简单,纹理坐标是与顶点一一对应的,很像数学中的映射,如下图所示。

2.png

下面的代码段创建了一个osg::Vec2Array数组,用于保存纹理坐标,同时将其关联到Geometry实例的纹理单元0。如果要对单一的 Geometry 设置多个纹理,只需要将多个纹理坐标数组关联到Geometry,并针对不同的数组指定不同的纹理单元即可。

//创建一个Geometry 几何体对象 osg:ref_ptrgeom=new osg::GGcometry; //创建一个Vec2Array对象以保存纹理单元0的纹理坐标,并将其关联到geom osg:ref_ptr tc=new osg::Vec2Array; geom->setTexCoordArray(0,tc.get0); tc->push_back(osg::Vec2(0.f,0.f)); tc->push_back(osg::Vec2(1.f,0.f)); tc->push_back(osg::Vec2(1.f,1.f)); tc->push_back(osg::Vec2(0.f,1.f)); 复制代码

osg::Geometry::setTexCoordArray()的第一个参数是纹理单元号,第二个参数是纹理坐标数组。

用户不需要使用类同osg::Geometry::setTexCoordBinding()的函数输入点来绑定纹理数据。纹理坐标总是绑定到每个顶点的。

在这里有一点要注意,OpenGL 的早期版本并不支持多重纹理,而加入多重纹理的特性之后,OpenGL 仍然支持非多重纹理的函数接口,以实现向下兼容。

从本质上说,此时OpenGL将非多重纹理接口解释为使用纹理单元0对应所有纹理数据。与OpenGL不同,OSG并不支持非多重纹理接口。因此,用户程序必须指定一个纹理单元,以对应纹理坐标数据和纹理状态。如果要使用单一纹理,只需要指定到纹理单元0即可。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3