新手有关纹理贴图的疑惑
一个六面体geode,希望在其中的前后左右四个面,都贴上一副相同的图片,其中图片的上下左右不能颠倒,需要一致。那么用什么函数可以单独设置它某几面的纹理坐标呢?
geode->setTexCoordArray()该函数设置的是整个六面体。
难道要吧geode分解成六个geometry,然后分别设置geom->setTexCoordArray()????
如此一来,
osg::ref_ptr<osg::Geometry> geom1 = new osg::Geometry();
//顶点数组
osg::ref_ptr<osg::Vec3Array> v1 =new osg::Vec3Array();
v1->push_back(.....);
........................
v1->push_back(.....);
geom1->setVertexArray(v1.get());
geom1->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::QUADS,0,4));
//设置纹理坐标数组
//再绑定
geom->setTexCoordArray()
geode->addDrawable(geom1.get());
这个过程岂不是要重复六遍???换做复杂的几何体,有更多的顶点和面,就要定义更多的geometry和顶点数组了。。应该有别的方法吧。纠结我一天了 ,都没知道怎么做。
我可以把六个面以如下的形式,加入到一个geometry中,如此就可以只定义一个几何体,只定义一个定点数组
osg::ref_ptr<osg::DrawElementsUInt> right=new osg::DrawElementsUInt(osg::PrimitiveSet::QUADS,0);
right->push_back(1);
right->push_back(2);
right->push_back(6);
right->push_back(5);
geom2->addPrimitiveSet(right.get());
所以我最终的问题是,怎么来贴图啊。。。。。只告诉我设置纹理坐标,那我还是不懂啊。。。。
应该是个简单的问题。前辈们,求赐教!~~~感激不尽!~~ :L 只扩充顶点数组和纹理坐标数组就可以了,它们永远是一对一的关系。根据需求扩充更多的primitiveset也是可以的。不知道您纠结在什么地方 array 发表于 2013-3-11 09:28 static/image/common/back.gif
只扩充顶点数组和纹理坐标数组就可以了,它们永远是一对一的关系。根据需求扩充更多的primitiveset也是可 ...
多谢前辈指点!~
前辈说扩充顶点数组和纹理坐标数组,
问题
geometry是不是也要扩充? 因为geom->setVertexArray(),每个几何体对应了一个顶点数组。
谢谢~~ 您的数据为什么不能放在一个顶点数组里 本帖最后由 pd54007 于 2013-3-15 16:47 编辑
array 发表于 2013-3-14 09:59 static/image/common/back.gif
您的数据为什么不能放在一个顶点数组里
首先 感谢您百忙之中解答我的问题~
放在同一个数组,我处理不了纹理。。。
比如立方体,顶点数组(0.....7)8个点
纹理的话就是在前后左右四个面,分别放上一个MM照片(所以有上下之分,不可颠倒,否则就鼻孔朝天了)
设置纹理数组,我是这样思考的:
前面顶点0 1 5 4纹理坐标 (0.0,0.0),(1.0,0.0),(1.0,1.0),(0.0,1.0)就跟设置四边形一样的方法
然后右边的顶点是1 2 6 5 纹理坐标 1 和 5 已经在之前确定了,所以分别是 (1.0,0.0),(.....),(....),(1.0,1.0)
(我理解的是顶点数组与纹理数组的值一一对应,所以1,2的纹理坐标定了就不能改变了。。。)
如此一来,MM岂不是左右颠倒了?
如果要再立方体的上表面也贴图,那4 5 6 7 四个点的纹理坐标已经固定了,不是(0.0,1.0 ) 就是(1.0,1.0)
贴不上图了。。
这样理解对吗?
所以我只好多弄几个顶点数组,,,分开来贴图了。
谢谢指点~ 顶点可以是重合的,所以您担心的问题本来就不存在,保存一个由24个顶点组成的顶点数组来表达这种立方体就可以了 array 发表于 2013-3-18 16:17
顶点可以是重合的,所以您担心的问题本来就不存在,保存一个由24个顶点组成的顶点数组来表达这种立方体就可 ...
array,六面体四周贴图必须24个点?例如圆柱 上下底和四周分别贴图,怎末减少顶点?必须重复顶点?
页:
[1]