我目前正在开发我的第一个基于 OpenGL 的游戏引擎。我需要法线贴图作为一项功能,但它无法正常工作。
伪影受到光线与表面法线之间的角度的影响。相机移动不会以任何方式影响它。我也(至少现在)采用效率较低的方法,将从法线贴图中提取的法线转换为视图空间,而不是将所有内容转换为切线空间。
以下是我的代码的相关部分:
生成切线和双切线
for(int k=0;k<(int)mb->getIndexCount();k+=3)
{
unsigned int i1 = mb->getIndex(k);
unsigned int i2 = mb->getIndex(k+1);
unsigned int i3 = mb->getIndex(k+2);
JGE_v3f v0 = mb->getVertexPosition(i1);
JGE_v3f v1 = mb->getVertexPosition(i2);
JGE_v3f v2 = mb->getVertexPosition(i3);
JGE_v2f uv0 = mb->getVertexUV(i1);
JGE_v2f uv1 = mb->getVertexUV(i2);
JGE_v2f uv2 = mb->getVertexUV(i3);
JGE_v3f deltaPos1 = v1-v0;
JGE_v3f deltaPos2 = v2-v0;
JGE_v2f deltaUV1 = uv1-uv0;
JGE_v2f deltaUV2 = uv2-uv0;
float ur = deltaUV1.x * deltaUV2.y - deltaUV1.y * deltaUV2.x;
if(ur != 0)
{
float …Run Code Online (Sandbox Code Playgroud)