bbuerger

Member
  • Content count

    3
  • Joined

  • Last visited

Community Reputation

100 Neutral

About bbuerger

  • Rank
    Newbie
  1. GLSL Shader

    Ok this solved the problem. Blender has a modifier edge split that can reinsert the missing vertices automatically. Thanks for the good advice.
  2. GLSL Shader

    Yes I have no duplicate edges. Thanks for the hints then I will recreate my model or search for a program that create duplicate vertices if the angle is too big.
  3. GLSL Shader

    Hi there, I tried to write some simple phong shader but the result looks a bit weird. [sharedmedia=core:attachments:8477] 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. [CODE] 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; } [/CODE] The model looks like this [sharedmedia=core:attachments:8478] 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