求OpenGL计算顶点法线的详细注释
答案:1 悬赏:50 手机版
解决时间 2021-03-29 13:11
- 提问者网友:动次大次蹦擦擦
- 2021-03-29 01:14
求OpenGL计算顶点法线的详细注释
最佳答案
- 五星知识达人网友:胯下狙击手
- 2021-03-29 01:58
图1
void CalcNormals(const unsigned int* pIndices, unsigned int IndexCount, Vertex* pVertices, unsigned int VertexCount)
{
for (unsigned int i = 0 ; i < IndexCount ; i += 3) {
//三顶点组合成一个三角面
unsigned int Index0 = pIndices[i];
unsigned int Index1 = pIndices[i + 1];
unsigned int Index2 = pIndices[i + 2];
//下面的v1,v2是计算出2个向量用于叉乘计算法线
//v1如上图相当于 pIndices[i+1] - pIndices[i]
//v2如上图相当于 pIndices[i+2] - pIndices[i]
Vector3f v1 = pVertices[Index1].m_pos - pVertices[Index0].m_pos;
Vector3f v2 = pVertices[Index2].m_pos - pVertices[Index0].m_pos;
图2
//图2 v1 = u; v2 = v
// v1.Croos(v2) 相当余 U X V (红色线是左手坐标系中,右手坐标系的话则相反)
Vector3f Normal = v1.Cross(v2);
Normal.Normalize(); //向量规范化 具体怎么计算如果你需要可以百度,也可以问我
pVertices[Index0].m_normal += Normal; //向量加法计算出两个向量的中间向量
pVertices[Index1].m_normal += Normal; //就好像三角形中间分的线一样
pVertices[Index2].m_normal += Normal; //因为一个顶点可能被多个面所共享
}
for (unsigned int i = 0 ; i < VertexCount ; i++) {
pVertices[i].m_normal.Normalize(); //最后的规范化
}
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯