GEMINIGHT 警告:您的浏览器不支持JavaScript将无法正常浏览!
Warning: Your browser does not support JavaScript!
注册(Register) | 登录(Login)
看随机帖

主站(Home) »  论坛(Forum)  » 程序编写(Program)
hwbnet
注册于:2007年1月22日
等级:注册会员
帖子数:30
积分:178
阅读权限:20
请问:怎样求法线及光照计算? 1樓
Tags引力关联贴
假设有这样一组顶点:
 d=-1;
 ff[d=d+1]=0.0f,ff[d=d+1]=0.0f,ff[d=d+1]=0.0f;
 for(i=0;i<9;i++)
 {
  f[0]=(2*D3DX_PI*i)/8;
  ff[d=d+1]=cosf(f[0])*3.0f,ff[d=d+1]=sinf(f[0])*3.0f,ff[d=d+1]=-10.0f;
 }
三角形索引为:
 d=-1;
 sy[d=d+1]=0,sy[d=d+1]=1,sy[d=d+1]=2;
 sy[d=d+1]=0,sy[d=d+1]=2,sy[d=d+1]=3;
 sy[d=d+1]=0,sy[d=d+1]=3,sy[d=d+1]=4;
 sy[d=d+1]=0,sy[d=d+1]=4,sy[d=d+1]=5;
 sy[d=d+1]=0,sy[d=d+1]=5,sy[d=d+1]=6;
 sy[d=d+1]=0,sy[d=d+1]=6,sy[d=d+1]=7;
 sy[d=d+1]=0,sy[d=d+1]=7,sy[d=d+1]=8;
 sy[d=d+1]=0,sy[d=d+1]=8,sy[d=d+1]=9;
请问:如何求这10个顶点的法线?
SIGNATURE
胡文斌
发表于:2007-10-8 21:51(约16年前)  访问量:1084
Jeminai

自称:雙子騎士
注册于:2005年5月26日
等级:站长
帖子数:6414
积分:41794
阅读权限:200
2樓

你这代码可读性不怎么样啊,请把顶点用一个结构来表示(如下),最好画出草图(就10个点应该不麻烦,否则看的人烦,要是在GameRes都懒得回答你)。

struct FVF
{
 D3DXVECTOR3 pos;
 D3DXVECTOR3 nor;
};

你把你的每个三角形代入下面的公式就是了:

三角形法线计算公式:
  D3DXVECTOR3 v1 = Vertex[a].pos;
  D3DXVECTOR3 v2 = Vertex[b].pos;
  D3DXVECTOR3 v3 = Vertex[c].pos;
  D3DXVECTOR3 n;
  D3DXVec3Cross( &n,&(v2-v1), &(v3-v2));
  n=NorVec(n);//然后规格化一下

另外打听一下,我还不知道你是做什么游戏的?[em41]


SIGNATURE
我的Blog网址:blog.geminight.com
发表于:2007-10-9 08:48(约16年前)
hwbnet
注册于:2007年1月22日
等级:注册会员
帖子数:30
积分:178
阅读权限:20
3樓

这10个点是原点和一个圆构成一个圆锥体。

由于相临的三角形面有公共的顶点,这时法线如何计算?法线算出来后在光照中怎样计算?

主体类型是大富翁类型,内含俄罗斯方块,飞机等游戏。

SIGNATURE
胡文斌
发表于:2007-10-9 10:04(约16年前)
Jeminai

自称:雙子騎士
注册于:2005年5月26日
等级:站长
帖子数:6414
积分:41794
阅读权限:200
4樓

把公共顶点的法线相加后在规格化一下。

至于光照计算记得GameRes上有我没有,你去找找看,主要是一些写Shade的人用的。

SIGNATURE
我的Blog网址:blog.geminight.com
发表于:2007-10-9 11:46(约16年前)
hwbnet
注册于:2007年1月22日
等级:注册会员
帖子数:30
积分:178
阅读权限:20
5樓
什么标题?
SIGNATURE
胡文斌
发表于:2007-10-9 15:28(约16年前)
Jeminai

自称:雙子騎士
注册于:2005年5月26日
等级:站长
帖子数:6414
积分:41794
阅读权限:200
6樓

忘了

还有DX9SDK里也有,那个LightingVS例子。

SIGNATURE
我的Blog网址:blog.geminight.com
发表于:2007-10-9 19:34(约16年前)

标题(Title):
关键字标签(Tags):
路人:回贴可以不必登录