OpenGL 计算三角形法线 C++三角形的三个顶点是任意的,现在需要为三角形计算法线向量,以便得到合格的光照效果.最好是这样的:写一个函数:JiSuanFaXian(```)给9个数值给它,9个分别是3个顶点的X
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/28 12:51:43
![OpenGL 计算三角形法线 C++三角形的三个顶点是任意的,现在需要为三角形计算法线向量,以便得到合格的光照效果.最好是这样的:写一个函数:JiSuanFaXian(```)给9个数值给它,9个分别是3个顶点的X](/uploads/image/z/6292906-34-6.jpg?t=OpenGL+%E8%AE%A1%E7%AE%97%E4%B8%89%E8%A7%92%E5%BD%A2%E6%B3%95%E7%BA%BF+C%2B%2B%E4%B8%89%E8%A7%92%E5%BD%A2%E7%9A%84%E4%B8%89%E4%B8%AA%E9%A1%B6%E7%82%B9%E6%98%AF%E4%BB%BB%E6%84%8F%E7%9A%84%2C%E7%8E%B0%E5%9C%A8%E9%9C%80%E8%A6%81%E4%B8%BA%E4%B8%89%E8%A7%92%E5%BD%A2%E8%AE%A1%E7%AE%97%E6%B3%95%E7%BA%BF%E5%90%91%E9%87%8F%2C%E4%BB%A5%E4%BE%BF%E5%BE%97%E5%88%B0%E5%90%88%E6%A0%BC%E7%9A%84%E5%85%89%E7%85%A7%E6%95%88%E6%9E%9C.%E6%9C%80%E5%A5%BD%E6%98%AF%E8%BF%99%E6%A0%B7%E7%9A%84%EF%BC%9A%E5%86%99%E4%B8%80%E4%B8%AA%E5%87%BD%E6%95%B0%EF%BC%9AJiSuanFaXian%28%60%60%60%29%E7%BB%999%E4%B8%AA%E6%95%B0%E5%80%BC%E7%BB%99%E5%AE%83%2C9%E4%B8%AA%E5%88%86%E5%88%AB%E6%98%AF3%E4%B8%AA%E9%A1%B6%E7%82%B9%E7%9A%84X)
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