OpenGL 计算三角形法线 C++
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenGL 计算三角形法线 C++相关的知识,希望对你有一定的参考价值。
三角形的三个顶点是任意的,现在需要为三角形计算法线向量,以便得到合格的光照效果。
最好是这样的:
写一个函数:
JiSuanFaXian(```)给9个数值给它,9个分别是3个顶点的X Y Z 坐标
然后函数计算好 glNormal3f 所需要的三个浮点数值。
顺便把原理也贴出来!十分感谢!
#include <math.h> //sqrt
#define M2(x) ((x)*(x))
inline void normalize(float v[3])
register GLfloat d = sqrt(M2(v[0])+M2(v[1])+M2(v[2]));
if(d==0.0)return;
v[0]/=d;
v[1]/=d;
v[2]/=d;
inline void normcrossprod(float v1[3],float v2[3],register float out[3])
out[0]=v1[1]*v2[2]-v1[2]*v2[1];
out[1]=v1[2]*v2[0]-v1[0]*v2[2];
out[2]=v1[0]*v2[1]-v1[1]*v2[0];
normalize(out);
void normal(float v1[3],float v2[3],float v3[3],float norm[3])
float d1[3],d2[3];
for(register int i=0;i<3;i++)
d1[i]=v1[i]-v2[i];
d2[i]=v2[i]-v3[i];
normcrossprod(d1,d2,norm);
参考技术A ^ Vn (Normal)
|
|
|
|
v1 *------------------* v2 (Vu)
/ /
/ /
/ /
/ /
v3 *------------------
(Vv)
Vector4 u, v;
u = v2 - v1;
v = v3 - v1;
normal = CrossProduct(u, v); // 向量叉积
以上是关于OpenGL 计算三角形法线 C++的主要内容,如果未能解决你的问题,请参考以下文章