pd54007 发表于 2013-3-9 16:07:38

新手有关纹理贴图的疑惑

一个六面体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());

所以我最终的问题是,怎么来贴图啊。。。。。只告诉我设置纹理坐标,那我还是不懂啊。。。。


应该是个简单的问题。前辈们,求赐教!~~~感激不尽!~~

array 发表于 2013-3-11 09:28:50

:L 只扩充顶点数组和纹理坐标数组就可以了,它们永远是一对一的关系。根据需求扩充更多的primitiveset也是可以的。不知道您纠结在什么地方

pd54007 发表于 2013-3-12 14:37:25

array 发表于 2013-3-11 09:28 static/image/common/back.gif
只扩充顶点数组和纹理坐标数组就可以了,它们永远是一对一的关系。根据需求扩充更多的primitiveset也是可 ...

多谢前辈指点!~

前辈说扩充顶点数组和纹理坐标数组,

问题
geometry是不是也要扩充? 因为geom->setVertexArray(),每个几何体对应了一个顶点数组。

谢谢~~

array 发表于 2013-3-14 09:59:31

您的数据为什么不能放在一个顶点数组里

pd54007 发表于 2013-3-15 16:40:40

本帖最后由 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)

贴不上图了。。

这样理解对吗?

所以我只好多弄几个顶点数组,,,分开来贴图了。

谢谢指点~

array 发表于 2013-3-18 16:17:39

顶点可以是重合的,所以您担心的问题本来就不存在,保存一个由24个顶点组成的顶点数组来表达这种立方体就可以了

wuvalue 发表于 2020-11-17 08:39:53

array 发表于 2013-3-18 16:17
顶点可以是重合的,所以您担心的问题本来就不存在,保存一个由24个顶点组成的顶点数组来表达这种立方体就可 ...

array,六面体四周贴图必须24个点?例如圆柱 上下底和四周分别贴图,怎末减少顶点?必须重复顶点?
页: [1]
查看完整版本: 新手有关纹理贴图的疑惑