PDA

View Full Version : Problem with normals?



Cucus
07-15-2011, 10:49 AM
Hello,

First, check the images added (foto 1 and 2).
You will se that there's some parts of the robot where the light isn't correctly displayed.

You may be thinking about different problems, I will explain the algorithm used as best as I can to see if someone find the problem.

Step 1:
Each joint (part) of the robot is drawed in a different origin of coordinates (Denavit-Hartenberg transformation (http://en.wikipedia.org/wiki/Denavit-Hartenberg_Parameters)). So, for each vertex of the joints, we need to make the transformation to:



GLfloat * matrixModel = new GLfloat[16];
glGetFloatv(GL_MODELVIEW_MATRIX, matrixModel);
//ModelView after the transformation

matrixModel = mCalc.doTranspose(matrixModel);
matrixModel = mCalc.doInverse(matrixModel);

vertexArray = new GLfloat[sizeVertex];
Vertex v;
int i = 0;
int j;
for(j=0;j<vertexVector.size();j++)
{
v = vertexVector[j]; //vertexVector ----> vector<Vertex> type ---> Vertex is a struct of 3 floats
vertexArray[i] = v.x*matrixModel[0]+v.y*matrixModel[1]+v.z*matrixModel[2]+matrixModel[3];
//transforming to the new origin coordinantes..
vertexArray[i+1] = v.x*matrixModel[4]+v.y*matrixModel[5]+v.z*matrixModel[6]+matrixModel[7];
vertexArray[i+2] = v.x*matrixModel[8]+v.y*matrixModel[9]+v.z*matrixModel[10]+matrixModel[11];
i+=3;
}


After this I do the same with normals except that I don't apply the calculations to transform it to the new origin coordinantes.
Those arrays are added to VBO and after, I call glDrawArrays(..) (in a different function ofc).

I tryied to apply the calculations to transform it to the new origin coordinantes to the normals but the result is horrible (check foto4).

Do you have any idea?

Thanks