查看: 2104|回复: 6

新手有关纹理贴图的疑惑

[复制链接]

该用户从未签到

发表于 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:rawArrays(osg:rimitiveSet:UADS,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());

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


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

该用户从未签到

发表于 2013-3-11 09:28:50 | 显示全部楼层
只扩充顶点数组和纹理坐标数组就可以了,它们永远是一对一的关系。根据需求扩充更多的primitiveset也是可以的。不知道您纠结在什么地方

该用户从未签到

 楼主| 发表于 2013-3-12 14:37:25 | 显示全部楼层
array 发表于 2013-3-11 09:28
只扩充顶点数组和纹理坐标数组就可以了,它们永远是一对一的关系。根据需求扩充更多的primitiveset也是可 ...

多谢前辈指点!~

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

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

谢谢~~

该用户从未签到

发表于 2013-3-14 09:59:31 | 显示全部楼层
您的数据为什么不能放在一个顶点数组里

该用户从未签到

 楼主| 发表于 2013-3-15 16:40:40 | 显示全部楼层
本帖最后由 pd54007 于 2013-3-15 16:47 编辑
array 发表于 2013-3-14 09:59
您的数据为什么不能放在一个顶点数组里


首先 感谢您百忙之中解答我的问题~

放在同一个数组,我处理不了纹理。。。

比如立方体,顶点数组(0.....7)8个点

shili1.jpg

纹理的话就是在前后左右四个面,分别放上一个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)

贴不上图了。。

这样理解对吗?

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

谢谢指点~

该用户从未签到

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

该用户从未签到

发表于 2020-11-17 08:39:53 | 显示全部楼层
array 发表于 2013-3-18 16:17
顶点可以是重合的,所以您担心的问题本来就不存在,保存一个由24个顶点组成的顶点数组来表达这种立方体就可 ...

array,六面体四周贴图必须24个点?例如圆柱 上下底和四周分别贴图,怎末减少顶点?必须重复顶点?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表