I tried to write some simple phong shader but the result looks a bit weird.

I guess that the shader codes are correct and think that the problem is because

of the normals. I calculate them my myself and pass them as vertex normals.

QVector<float> WavefrontObj::calculateNormals(const float *vertices, unsigned int numVertices, const unsigned int *indices, unsigned int numIndices) { // Foreach vertice we calculate a normal QVector<float> vecNormals(numVertices); for(unsigned int i=0; i<numIndices; ) { hduVector3Df firstvec = hduVector3Df(&vertices[indices[i+1]*3])-hduVector3Df(&vertices[indices[i]*3]); hduVector3Df secondvec = hduVector3Df(&vertices[indices[i]*3])-hduVector3Df(&vertices[indices[i+2]*3]); hduVector3Df normal = crossProduct(firstvec, secondvec); for(int v=0; v<3; ++v, ++i) { unsigned int index = indices[i]*3; assert(index<numVertices && "Error in vertices"); vecNormals[index]-=normal[0]; vecNormals[index+1]-=normal[1]; vecNormals[index+2]-=normal[2]; } } // Normalize all normals for(int i=0; i<vecNormals.size(); i+=3) { hduVector3Df normal(&vecNormals[i]); normal.normalize(); vecNormals[i]=-normal[0]; vecNormals[i+1]=-normal[1]; vecNormals[i+2]=-normal[2]; } return vecNormals; }

The model looks like this

Is there a better way to calculate the normals? I tried calculating them using the geometry shader but this gives the image a facet look.

Thanks for any hints,

bbuerger