OpenGL 计算三角形法线 C++三角形的三个顶点是任意的,现在需要为三角形计算法线向量,以便得到合格的光照效果.最好是这样的:写一个函数:JiSuanFaXian(```)给9个数值给它,9个分别是3个顶点的X
来源:学生作业帮助网 编辑:作业帮 时间:2024/08/31 17:03:16
OpenGL 计算三角形法线 C++三角形的三个顶点是任意的,现在需要为三角形计算法线向量,以便得到合格的光照效果.最好是这样的:写一个函数:JiSuanFaXian(```)给9个数值给它,9个分别是3个顶点的X
OpenGL 计算三角形法线 C++
三角形的三个顶点是任意的,现在需要为三角形计算法线向量,以便得到合格的光照效果.
最好是这样的:
写一个函数:
JiSuanFaXian(```)给9个数值给它,9个分别是3个顶点的X Y Z 坐标
然后函数计算好 glNormal3f 所需要的三个浮点数值.
顺便把原理也贴出来!
OpenGL 计算三角形法线 C++三角形的三个顶点是任意的,现在需要为三角形计算法线向量,以便得到合格的光照效果.最好是这样的:写一个函数:JiSuanFaXian(```)给9个数值给它,9个分别是3个顶点的X
用normal,传入4个float[3],前3个点,后1个返回法线,然后用glNormal3fv 就行
#include //sqrt
#define M2(x) ((x)*(x))
inline void normalize(float v[3])
{
\x09register GLfloat d = sqrt(M2(v[0])+M2(v[1])+M2(v[2]));
\x09if(d==0.0)return;
\x09v[0]/=d;
\x09v[1]/=d;
\x09v[2]/=d;
}
inline void normcrossprod(float v1[3],float v2[3],register float out[3])
{
\x09out[0]=v1[1]*v2[2]-v1[2]*v2[1];
\x09out[1]=v1[2]*v2[0]-v1[0]*v2[2];
\x09out[2]=v1[0]*v2[1]-v1[1]*v2[0];
\x09normalize(out);
}
void normal(float v1[3],float v2[3],float v3[3],float norm[3])
{
\x09float d1[3],d2[3];
\x09for(register int i=0;i