游戏开发论坛

 找回密码
 立即注册
搜索
楼主: rikpan

顶点法线方向计算

[复制链接]

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2009-4-22 23:37:00 | 显示全部楼层

Re:顶点法线方向计算

以角度作为权重,无论“共面的面”如何细分,整个面上三角形的权重和是不会变的

30

主题

146

帖子

152

积分

注册会员

Rank: 2

积分
152
 楼主| 发表于 2009-4-23 09:38:00 | 显示全部楼层

Re: Re:顶点法线方向计算

clayman: Re:顶点法线方向计算

以角度作为权重,无论“共面的面”如何细分,整个面上三角形的权重和是不会变的

非常感谢clayman!
今天早上一试果然成功,共面权重和的确是不变的。
要是你在csdn上回我,分就都给你了。万分感谢!

19

主题

638

帖子

638

积分

高级会员

Rank: 4

积分
638
发表于 2009-4-23 11:34:00 | 显示全部楼层

Re:顶点法线方向计算

最快的算法,前提是对于一个smooth group,非常old的算法:
float3 n;
foreach triangleNormal around the vertex
  n += triangleNormal;
n = normalize(n);

30

主题

146

帖子

152

积分

注册会员

Rank: 2

积分
152
 楼主| 发表于 2009-4-23 12:51:00 | 显示全部楼层

Re: Re:顶点法线方向计算

qrli: Re:顶点法线方向计算

最快的算法,前提是对于一个smooth group,非常old的算法:
float3 n;
foreach triangleNormal around th...

我之前就是用的这个算法,但是只要有共面的就不行了。

19

主题

638

帖子

638

积分

高级会员

Rank: 4

积分
638
发表于 2009-4-23 14:02:00 | 显示全部楼层

Re: Re: Re:顶点法线方向计算

rikpan: Re: Re:顶点法线方向计算


我之前就是用的这个算法,但是只要有共面的就不行了。


为什么不行

30

主题

146

帖子

152

积分

注册会员

Rank: 2

积分
152
 楼主| 发表于 2009-4-23 16:02:00 | 显示全部楼层

Re: Re: Re: Re:顶点法线方向计算

qrli: Re: Re: Re:顶点法线方向计算



为什么不行


比如立方体,立方体的顶点是由5个三角形共享的,5个三角形的面法线叠加的话就会变成诸如
(1.0, 2.0, 2.0), (2.0, 1.0, 2.0), (2.0, 2.0, 1.0)
正负可能不是,但大致就是这样的,xyz三个分量不相等,肯定是错的啊。
错误的原因就是,直接相加会导致共面的面将法线的权重提高。

19

主题

638

帖子

638

积分

高级会员

Rank: 4

积分
638
发表于 2009-4-23 16:44:00 | 显示全部楼层

Re: Re: Re: Re: Re:顶点法线方向计算

rikpan: Re: Re: Re: Re:顶点法线方向计算



比如立方体,立方体的顶点是由5个三角形共享的,5个三角形的面法线叠加的话就会变成诸如
(1.0, 2.0, 2...


要说在任何情况下都绝对正确的情况的话,只考虑角度而不考虑三角形长短大小也不够,那得用建模软件的算法,拟合成参数曲面然后求法向,任何基于三角面法向的简化算法都是错的。如果是做工具,法向自然算得越精确越好;如果是引擎,让模型自带法向数据最好。

30

主题

146

帖子

152

积分

注册会员

Rank: 2

积分
152
 楼主| 发表于 2009-4-23 16:59:00 | 显示全部楼层

Re:顶点法线方向计算

求面法线什么要考虑三角形长短大小?

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2009-4-23 17:27:00 | 显示全部楼层

Re: Re: Re: Re:顶点法线方向计算

qrli: Re: Re: Re:顶点法线方向计算
为什么不行


以立方体为例,一个顶点最少可能被三个三角面共享,最多则可能被无数个三角面共享(把立方体的一个面细分为无数子三角形)。假设立方体的“上”面和“右”面只有普通的2个三角形,而“前”面细分为了n个三角形,显然
foreach triangleNormal around the vertex
  n += triangleNormal;
n = normalize(n);
的方法得到的法线将会非常接近“前”面的法线,也就是依赖于立方体的镶嵌方式。
而我们通常都希望某个点的法线是固定的,不管立方体的每个面如何细分,法线方向都不应该改变

19

主题

638

帖子

638

积分

高级会员

Rank: 4

积分
638
发表于 2009-4-23 17:41:00 | 显示全部楼层

Re: Re:顶点法线方向计算

rikpan: Re:顶点法线方向计算

求面法线什么要考虑三角形长短大小?


大小不同时拟合出的曲面是不一样的,法向自然也就不一样,也就是说我们这么算的法向和3dsmax等软件算的结果不一样。
不过除非你特意去看一些特例情况,一般误差都可以接受。不过还是交给建模软件算最好,否则要处理很多特例情况,比如模型上有的地方就是要保留棱角。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-20 11:06

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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