我这样定义纹理坐标问题出在哪里?

xiaohuahema8 2004-08-11 04:53:32
我绘制了一个四面体,并且想在四面体的每个面上贴上纹理,我的做法是:给四面体的四个顶点分别赋予纹理坐标。然后按照每个纹理坐标绘制三角面片。代码如下。p0,p1,p2,p3分别代表顶点坐标,他们的纹理坐标分别是(0,0),(1,0),(0.96,1),(0.38,0.266);但我出来的效果图确出现了问题,四面体的某些面出现了相同的图形。并且有一个面的纹理图像出现了模糊不清(可能是扭曲)。请各位大侠指点。谢谢
glColor3f(1.0,1.0,0.0);
glBegin(GL_TRIANGLES);
glTexCoord2f(0.0,0.0);
glVertex3f(p0.x,p0.y,p0.z);
glTexCoord2f(0.96,1.0);
glVertex3f(p2.x,p2.y,p2.z);
glTexCoord2f(1.0,0.0);
glVertex3f(p1.x,p1.y,p1.z);
glEnd();
//second p0,p1,p3
glColor3f(1.0,0.0,0.0);
glBegin(GL_TRIANGLES);
glTexCoord2f(0.0,0.0);
glVertex3f(p0.x,p0.y,p0.z);
glTexCoord2f(1.0,0.0);
glVertex3f(p1.x,p1.y,p1.z);
glTexCoord2f(0.38,0.266);
glVertex3f(p3.x,p3.y,p3.z);
glEnd();
//third p3,p2,p0
glColor3f(0.0,1.0,0.0);
glBegin(GL_TRIANGLES);
glTexCoord2f(0.38,0.266);
glVertex3f(p3.x,p3.y,p3.z);
glTexCoord2f(0.96,1.0);
glVertex3f(p2.x,p2.y,p2.z);

glTexCoord2f(0.0,0.0);
glVertex3f(p0.x,p0.y,p0.z);


glEnd();
//forth
glColor3f(0.0,1.0,1.0);
glBegin(GL_TRIANGLES);
glTexCoord2f(0.96,1.0);
glVertex3f(p2.x,p2.y,p2.z);
glTexCoord2f(0.38,0.266);
glVertex3f(p3.x,p3.y,p3.z);
glTexCoord2f(1.0,0.0);
glVertex3f(p1.x,p1.y,p1.z);
glEnd();
...全文
247 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
寻开心 2004-08-12
  • 打赏
  • 举报
回复
关于三角形面积的说法不严格
应该说,三角形三个顶点围成了一个空间的三角形,三个顶点的纹理坐标在纹理图上也形成了一个三角形,绘制纹理的时候,就是把纹理三角形内部的图片拉身到空间三角形上去的。
所以两个三角形的形状,大小越一致,表达的效果就越好。反之差距越大,拉伸就越严重了。

对于你的情况
四面体当中四个面的顶点坐标好多时候虽然是一样的,但是纹理坐标可以不同的啊,没有任何人规定一个顶点在不同面上也只能使用相同的纹理坐标,在不同面上你可以换成不同的纹理坐标。
比如,不管顶点坐标是什么,相应的纹理坐标依次都是0,0 1,0 1,1 你就可以得到相同纹理表现的四个面了。
具体效果,随你的意了。
xiaohuahema8 2004-08-12
  • 打赏
  • 举报
回复
还有你说的三角形面积指的是三个纹理坐标所围成的面积对吗?
xiaohuahema8 2004-08-12
  • 打赏
  • 举报
回复
happy__888,十分感谢你的回复,那怎么把这种拉伸扭曲纠正过来呢,是不是要把p0,p1,p2,p3的纹理坐标合理的分配一下就可以纠正扭曲。
xiaohuahema8 2004-08-12
  • 打赏
  • 举报
回复
明白了
expert
xiaohuahema8 2004-08-12
  • 打赏
  • 举报
回复
好的,十分感谢
寻开心 2004-08-12
  • 打赏
  • 举报
回复
你可以让它相同,也可以让它不同啊
不是说了吗,每个面上的纹理坐标是你自己指定的
我可以告诉你一个组合方法,但是未必是你要的:
四个顶点p0 p1 p2 p3
p0 p1 p2 三角形 三个顶点纹理坐标是: 0.0 0.0, 1.0 0.0, 0.5 1.0
p1 p2 p3 三角形 三个顶点纹理坐标是: 1.0 0.0, 0.5 1.0, 1.0 0.5
p2 p3 p0 三角形 三个顶点纹理坐标是: 0.5 1.0, 1.0, 0.5, 0.0 1.0
p3 p0 p1 三角形 三个顶点纹理坐标是: 1.0 0.5, 0.0 1.0, 1.0 1.0
对照设置一下
展开的效果就是一个完整的纹理图了

做法就是自己画一个四面体,按照棱边裁开形成一个三脚带,四个顶点对应纹理四个角,
对应的关系形状类似:

(0,0) (0.5,1) (0, 1)
p0-----p2-----p0
\ / \ / \
p1-----p3------p1
(1,0) (1,0.5) (1,1)

最根本的问题是,你知道三角形纹理坐标和顶点坐标之间不必是一一对应的就可以解决了
其他的是自己动脑筋的
xiaohuahema8 2004-08-12
  • 打赏
  • 举报
回复
我要的效果不是四个面的纹理效果都相同,而是整个四面体的四个面的纹理拼合起来刚好是一张纹理图像(bmp位图),
寻开心 2004-08-11
  • 打赏
  • 举报
回复
就是那个效果
你画一个矩形,范围(0,0)—— (1,1)
在上面标出你的四个纹理坐标点
你可以看到 p0 p2 p3所对应三点组成的三角形很细长
这个三角形内的纹理,被拉身到四面体的一个三角形面上的时候,纹理就是因为拉身比例太大而扭曲的 p0 p1 p3和p1 p2 p3稍好点。(因为对应的纹理三角形形状好点,面积也大点)
最好效果的就是p0 p1 p2所在的面,因为这个(纹理)三角形最大

8,303

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧