游戏开发论坛

 找回密码
 立即注册
搜索
查看: 10423|回复: 25

顶点法线方向计算

[复制链接]

30

主题

146

帖子

152

积分

注册会员

Rank: 2

积分
152
发表于 2009-4-22 19:40:00 | 显示全部楼层 |阅读模式
如何计算顶点的法线方向呢?
我能想出来的方法是:计算共享该顶点所有面的法线,排除共面的面,将剩下的所有面法线相加后归一化。
但这样的计算量会比较大,尤其是要排除共面的面。
有没有别的方法啊?

2

主题

429

帖子

435

积分

中级会员

Rank: 3Rank: 3

积分
435
发表于 2009-4-22 20:14:00 | 显示全部楼层

Re:顶点法线方向计算

要排除共面的面?

不用排除。
直接求平均法向量。

30

主题

146

帖子

152

积分

注册会员

Rank: 2

积分
152
 楼主| 发表于 2009-4-22 20:27:00 | 显示全部楼层

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

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

要排除共面的面?

不用排除。
直接求平均法向量。


我也以为是啊,可是今天试了下立方体,立方体的每个点是5个三角形共用的,因此面法线叠加后变成诸如这样的法线
(1.0, 2.0, 2.0)
这肯定是不对的啊。

19

主题

638

帖子

638

积分

高级会员

Rank: 4

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

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

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



我也以为是啊,可是今天试了下立方体,立方体的每个点是5个三角形共用的,因此面法线叠加后变成诸如这样的法线
(1.0, 2.0, 2.0)
这肯定是不对的啊。


不是做平均,而是normalize

30

主题

146

帖子

152

积分

注册会员

Rank: 2

积分
152
 楼主| 发表于 2009-4-22 21:33:00 | 显示全部楼层

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

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



不是做平均,而是normalize


平均和normalize都是除以一个常数,改变不了法线方向啊。所以错的法线做了normalize后还是错的...

0

主题

8

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2009-4-22 21:59:00 | 显示全部楼层

Re:顶点法线方向计算

不知道你听说 没有个算法叫 高程场  快速计算 模型法线的一个算法  好像是游戏编程精粹3 里面有篇文章 介绍了

30

主题

146

帖子

152

积分

注册会员

Rank: 2

积分
152
 楼主| 发表于 2009-4-22 22:08:00 | 显示全部楼层

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

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

不知道你听说 没有个算法叫 高程场  快速计算 模型法线的一个算法  好像是游戏编程精粹3 里面有篇文章 介绍了

谢谢,明天去看看。

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

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

Re:顶点法线方向计算

something like this, but i'm not very sure
denote triange vertex as a,b,c, we have:
v1 = normalize(a-b);
v2 = normalize(a-c);
normalWeight = acos(dot(v1,v2));

normal = 0,0,0
totalWeight = 0
foreach triangle connect to vertex a
  normal += trangleNormal * normalWeight;
  totalWeight += normalWeight;

finalNormal = normal/totalWeight;

30

主题

146

帖子

152

积分

注册会员

Rank: 2

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

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

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

something like this, but i'm not very sure
denote triange vertex as a,b,c, we have:
v1 = normal...


谢谢你的算法。
我想法线计算的问题是,本来多个共面应该只有一个权重,但叠加将多个共面的权重不断提升,最后造成法线的不正确。

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

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

Re:顶点法线方向计算

上面的算法就是用来实现与镶嵌无关的mesh法线的
crytek的法线工具中用的和6楼说的方法都是这个
只是细节我记的不太清楚了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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