加入了背面剔除
//背面剔除
void RemoveBackfaceTriangle()
{
for (int i = 0; i < objectListCount; i++)
{
for (int j = 0; j < objecetList[i]->triangleCount; j++)
{
Vector3D v1 = objecetList[i]->triangleList[j].newPos[1] - objecetList[i]->triangleList[j].newPos[0];
Vector3D v2 = objecetList[i]->triangleList[j].newPos[2] - objecetList[i]->triangleList[j].newPos[1];
//法线
Vector3D normal;
VectorCross(normal, v1, v2);
Vector3D direction = objecetList[i]->triangleList[j].newPos[0] - camera->GetPosition();
float dot = VectorDot(direction, normal);
if (dot <= 0.0f)
{
objecetList[i]->triangleList[j].State = TRIANGLE_BACKFACE;
}
}
}
}
效果图
项目Github地址