中易网

opengl法向量

答案:2  悬赏:0  
解决时间 2021-02-19 00:19
用斯坦福兔子做网格简化的实验
给每个面片都算了法向量,然后用opengl显示出来
但是面片数量多了之后,生成的图片就乱了,面片数量低的时候就是正常的
比如35000个面的时候(很多面怎么直接就黑了呢)

3500个面的时候(这样基本就是正常的了)

350个面的时候(这个非常正常)

不知道这中情况是什么原因啊,是因为我法向量算错了嘛?
我计算法向量的代码如下
Vec3f p0 , p1 , p2 , e1 , e2 , e;
Array face;
for(int i=0; im_nTriangles; i++)
{
face = input->m_pTriangleList[i];
p0 = input->m_pVertexList[face[0]];
p1 = input->m_pVertexList[face[1]];
p2 = input->m_pVertexList[face[2]];
e1 = p0 - p1;
e2 = p1 - p2;
e = e1.cross(e2);
e.Normalize();
norm[i] = e;
}









最佳答案
为啥还要用OpenGL去绘制这么复杂的模型呢,可以用别的建模软件啊,生成的文件,放到OpenGL中运行就是了
全部回答
(1) 可以自己假定。 (2) 可以用叉乘积计算,注意方向--右手螺旋。 空间平面的法线向量,可以用平面上的任两条直线的叉乘积计算。对于一个mesh角点,用两条过角点的mesh边线算出,如果这个角点有好几个mesh们,可以用它们的平均,或自己假定法线向量。 (3) loonie自己的已知三点,计算法线子程序: void norm(glfloat v1[3], glfloat v2[3], glfloat v3[3], glfloat *nor ) { glfloat vc1[3],vc2[3]; glfloat a,b,c; gldouble r; vc1[0]= v2[0] - v1[0]; vc1[1]= v2[1] - v1[1]; vc1[2]= v2[2] - v1[2]; vc2[0]= v3[0] - v1[0]; vc2[1]= v3[1] - v1[1]; vc2[2]= v3[2] - v1[2]; a = vc1[1] * vc2[2] - vc2[1] * vc1[2]; b = vc2[0] * vc1[2] - vc1[0] * vc2[2]; c = vc1[0] * vc2[1] - vc2[0] * vc1[1]; r = sqrt( a * a + b* b + c * c); nor[0] = a / r; nor[1] = b / r; nor[2] = c / r; }
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
察言观色指什么意思?
继女儿要结婚了,继父需要出钱吗?
《相爱穿梭千年》第一集郑爽剧里唱的那首英文
今年新的准驾证通用吗??
县立德粉厂在哪里啊,我有事要去这个地方
鹅湖山下稻梁肥,豚栅鸡栖半掩扉意思??
惠阳和惠州问题?
金家峪在什么地方啊,我要过去处理事情
正装掉色怎么处理
刀中贵是哪部电视剧里的人物
来往湘味坊在哪里啊,我有事要去这个地方
我很郁闷,他找不到工作,天天窝在家里,不理
男朋友老是发吐舌头的表情??
东风风光370加油到2加不上什么原因
打开Excel表提示”找不到工程或库“
推荐资讯
崩坏3第二章隐藏关卡怎么打
我是一名共青团员,但觉得共青团太不务实了,
国外旅游哪里最便宜?
金家林商店我想知道这个在什么地方
面部表情基本不变的叫什么
广 州丰元信息科技公司的成长?
跟月份有关的诗词
FX8300配什么板子好要非常强大
爸爸妈妈忙的时候我们不要去打扰他们,我们要
理光4002显示sc541-oo
90°炭烧咖啡小站二中店地址有知道的么?有点
初めて利用します 登録している方はパスワー
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?