顶点法向量的计算[opengl]我做的是一个模拟波浪的小程序,需要光照,波动公式是利用perlin公式产生的,顶点(mesh[a][b][0],mesh[a][b][1],mesh[a][b][2]),通过每次glutPostRedisplay()改变y坐标来实现波动:i=0.0
来源:学生作业帮助网 编辑:作业帮 时间:2024/05/13 12:02:15
顶点法向量的计算[opengl]我做的是一个模拟波浪的小程序,需要光照,波动公式是利用perlin公式产生的,顶点(mesh[a][b][0],mesh[a][b][1],mesh[a][b][2]),通过每次glutPostRedisplay()改变y坐标来实现波动:i=0.0
顶点法向量的计算[opengl]
我做的是一个模拟波浪的小程序,需要光照,波动公式是利用perlin公式产生的,顶点(mesh[a][b][0],mesh[a][b][1],mesh[a][b][2]),通过每次glutPostRedisplay()改变y坐标来实现波动:
i=0.0f;
i+=0.002f;
for(a = 0; a < size; a++)
{
for (b = 0; b < size; b++)
{
mesh[a][b][0] = (float) (size / 2) -a;
mesh[a][b][2] = (float) (size / 2) -b;
mesh[a][b][1]=PerlinNoise_2D(mesh[a][b][0]/3.0+i,mesh[a][b][2]/3.0+i)*1.5f;
}
}
怎么计算顶点法向量?
loonie你好,你给的函数算的是三角面片的法向量吗?然后是不是将面的法向量归一到顶点,这个过程怎么计算呢?还有,你说的自己假定是什么意思?
顶点法向量的计算[opengl]我做的是一个模拟波浪的小程序,需要光照,波动公式是利用perlin公式产生的,顶点(mesh[a][b][0],mesh[a][b][1],mesh[a][b][2]),通过每次glutPostRedisplay()改变y坐标来实现波动:i=0.0
(1) 可以自己假定.
(2) 可以用叉乘积计算,注意方向--右手螺旋.
空间平面的法线向量,可以用平面上的任两条直线的叉乘积计算.对于一个mesh角点,用两条过角点的mesh边线算出,如果这个角点有好几个mesh们,可以用它们的平均,或自己假定法线向量.
(3) loonie自己的已知三点,计算法线子程序:
/* -------------------------------
* v1[],v2[],v3[] {x,y,z}
* -------------------------------*/
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;
}