Thanks for the reply!
But Thats the same thing that I have, here is my class:
//*---obj.h---*//
class obj { //Mesh file exported from Lightwave
public:
int m_tid; //Texture ID
int m_numVertices;
int m_numTriangles;
cVertex *m_vertices;
cTriangle *m_triangles;
void computeFaceNormals( void ) {
cVector3 v1, v2, faceNormal;
for(int i = 0; i < m_numTriangles; i++) {
v1 = m_vertices[m_triangles[i].indices[0]].point - m_vertices[m_triangles[i].indices[2]].point;
v2 = m_vertices[m_triangles[i].indices[2]].point - m_vertices[m_triangles[i].indices[1]].point;
faceNormal = cross(v1, v2);
m_triangles[i].normal = normalize(faceNormal);
}
}
void loadObj(char* filename) {
char tga[25];
char blank[10];
console.newCMsg("Loading mesh: %s...", filename);
ifstream ifs(filename);
ifs >> tga;
m_tid = texCount;
loadTexture(tga, false, 0);
ifs >> blank;
ifs >> m_numVertices;
ifs >> blank;
ifs >> m_numTriangles;
m_vertices = new cVertex[m_numVertices];
m_triangles = new cTriangle[m_numTriangles];
for(int i = 0; i < m_numVertices; i++) { //Read Vertices
ifs >> blank;
ifs >> m_vertices[i].point.x;
ifs >> m_vertices[i].point.y;
ifs >> m_vertices[i].point.z;
}
for(i = 0; i < m_numTriangles; i++) { //Read Triangles
ifs >> blank;
ifs >> m_triangles[i].u[0];
ifs >> m_triangles[i].v[0];
ifs >> blank;
ifs >> m_triangles[i].u[1];
ifs >> m_triangles[i].v[1];
ifs >> blank;
ifs >> m_triangles[i].u[2];
ifs >> m_triangles[i].v[2];
ifs >> blank;
ifs >> m_triangles[i].indices[0];
ifs >> blank;
ifs >> m_triangles[i].indices[1];
ifs >> blank;
ifs >> m_triangles[i].indices[2];
ifs >> blank;
}
computeFaceNormals();
console.newCMsg("done");
}
void renderObj(float x, float y, float z, bool vertexNormals) { //Render mesh
glEnable(GL_TEXTURE_2D);
glTranslatef(x, y, z);
glBindTexture(GL_TEXTURE_2D, texture[m_tid].texID);
if(vertexNormals) {
glBegin(GL_TRIANGLES);
for(int i = 0; i < m_numTriangles; i++) {
glNormal3f(m_vertices[m_triangles[i].indices[0]-1].normal.x, m_vertices[m_triangles[i].indices[0]-1].normal.y, m_vertices[m_triangles[i].indices[0]-1].normal.z); glTexCoord2f(m_triangles[i].u[2], m_triangles[i].v[2]); glVertex3f(m_vertices[m_triangles[i].indices[0]-1].point.x, m_vertices[m_triangles[i].indices[0]-1].point.y, m_vertices[m_triangles[i].indices[0]-1].point.z);
glNormal3f(m_vertices[m_triangles[i].indices[0]-1].normal.x, m_vertices[m_triangles[i].indices[0]-1].normal.y, m_vertices[m_triangles[i].indices[0]-1].normal.z); glTexCoord2f(m_triangles[i].u[1], m_triangles[i].v[1]); glVertex3f(m_vertices[m_triangles[i].indices[1]-1].point.x, m_vertices[m_triangles[i].indices[1]-1].point.y, m_vertices[m_triangles[i].indices[1]-1].point.z);
glNormal3f(m_vertices[m_triangles[i].indices[0]-1].normal.x, m_vertices[m_triangles[i].indices[0]-1].normal.y, m_vertices[m_triangles[i].indices[0]-1].normal.z); glTexCoord2f(m_triangles[i].u[0], m_triangles[i].v[0]); glVertex3f(m_vertices[m_triangles[i].indices[2]-1].point.x, m_vertices[m_triangles[i].indices[2]-1].point.y, m_vertices[m_triangles[i].indices[2]-1].point.z);
}
glEnd();
}
else {
glBegin(GL_TRIANGLES);
for(int i = 0; i < m_numTriangles; i++) {
glNormal3f(m_triangles[i].normal.x, m_triangles[i].normal.y, m_triangles[i].normal.z);
glTexCoord2f(m_triangles[i].u[2], m_triangles[i].v[2]); glVertex3f(m_vertices[m_triangles[i].indices[0]-1].point.x, m_vertices[m_triangles[i].indices[0]-1].point.y, m_vertices[m_triangles[i].indices[0]-1].point.z);
glTexCoord2f(m_triangles[i].u[1], m_triangles[i].v[1]); glVertex3f(m_vertices[m_triangles[i].indices[1]-1].point.x, m_vertices[m_triangles[i].indices[1]-1].point.y, m_vertices[m_triangles[i].indices[1]-1].point.z);
glTexCoord2f(m_triangles[i].u[0], m_triangles[i].v[0]); glVertex3f(m_vertices[m_triangles[i].indices[2]-1].point.x, m_vertices[m_triangles[i].indices[2]-1].point.y, m_vertices[m_triangles[i].indices[2]-1].point.z);
}
glEnd();
}
glTranslatef(-x, -y, -z);
}
};
My normals aren’t calculated correctly! It loks like it in the code, but when I draw the object with lighting it looks way screwed up…
What can possibly be wrong?!