游戏开发论坛

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: openmaya

如何获得三角形内部任意一点的uv纹理坐标? 已经知

[复制链接]

34

主题

657

帖子

672

积分

高级会员

Rank: 4

积分
672
发表于 2009-6-9 21:44:00 | 显示全部楼层

Re:如何获得三角形内部任意一点的uv纹理坐标? 已经

看《3D游戏编程大师技巧》

0

主题

2

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2009-6-10 14:08:00 | 显示全部楼层

Re:如何获得三角形内部任意一点的uv纹理坐标? 已经

很简单,理解什么是三角形的重心坐标系,这个是关键,不但可以插值算出三角形内任意一点的纹理坐标值,而且可以算出颜色值,法线值等。

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2009-6-10 16:15:00 | 显示全部楼层

Re:如何获得三角形内部任意一点的uv纹理坐标? 已经

过去做的笔记

重心坐标的概念
pU和pV用到了重心坐标的概念,下面稍作描述
/一个三角形有三个顶点,在迪卡尔坐标系中假设表示为V1(x1,y1,z1),
//V2(x2,y2,z2),V3(x3,y3,z3),则三角形内任意一点的坐标可以表示为 pV = V1 + U(V2-V1) + V(V3-V1),
//所以已知三个顶点坐标的情况下,任意一点可用坐标(U,V)来表示,其中 参数U控制V2在结果中占多大的权值,
//参数V控制V3占多大权值,最终1-U-V控制V1占多大权值,这种坐标定义方式就叫重心坐标。

0

主题

15

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2009-6-10 17:47:00 | 显示全部楼层

Re:如何获得三角形内部任意一点的uv纹理坐标? 已经

过这个三角形的任意一点(假设为P0)和这个三角形内部的点(p)作一条直线.
求出这条直线与三角形(p1p2边)的交点(Px).

在线段(p1p2)上利用插值求出这个交点(Px)的(u,v)坐标.
很显然:
==> Px=nP1+(1-n)P2  (1)

然后在线段(P0Px)上利用插值求出那个内部点(p)的(u,v)坐标即可
很显然:
==> P=mP0+(1-m)Px   (2)
(1)代入(2)得:
==> P=mP0+(1-m)(nP1+(1-n)P2)
==> P=mP0+nP1+P2-nP2-mnP1-mP2+mnP2
==> P=mP0+(n-mn)P1+(1-n-m+mn)P2

很显然:
m+(n-mn)+(1-n-m+mn)=1;
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-4-25 12:53

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表