thank you both for the replys. i think i know what i need to do, just not sure what order i need to read my vu and vv variables when alternating?
so to clarify for myself... for the first alternating read, what vertices do i want vu and vv to be? vu is 23? vv is 20? what about the second alternating read? vu is ?? and vv is ?? does the cross product also change on each alternating read? or just the vertices i read into vu and vv? i thought i had this in concrete, but the more sample code on calculating normals i find, the more confused i become. every source code calculating normals i find reads the vertices in a different order... i've now changed my vu vv and cross product dozens of times...!
correct me if i am wrong, going by the diagram the first read is vertex 1, 2 then 3. and the second read is 3, 4 then 2? cw then alternate ccw?
[source lang="cpp"]if (flip > 0) { flip = 0; vu[0] = vertices[1][x]  vertices[2][x]; vu[1] = vertices[1][y]  vertices[2][y]; vu[2] = vertices[1][z]  vertices[2][z]; vv[0] = vertices[1][x]  vertices[0][x]; vv[1] = vertices[1][y]  vertices[0][y]; vv[2] = vertices[1][z]  vertices[0][z];}else { flip = 1; vu[0] = vertices[?][x]  vertices[?][x]; vu[1] = vertices[?][y]  vertices[?][y]; vu[2] = vertices[?][z]  vertices[?][z]; vv[0] = vertices[?][x]  vertices[?][x]; vv[1] = vertices[?][y]  vertices[?][y]; vv[2] = vertices[?][z]  vertices[?][z];}[/source]
 Home
 » Viewing Profile: Reputation: juddo
We're offering banner ads on our site from just $5!
1. Details HERE. 2. GDNet+ Subscriptions HERE. 3. Ad upload HERE.
Don't forget to read Tuesday's email newsletter for your chance to win a free copy of Construct 2!
juddo
Member Since 30 Aug 2010Offline Last Active Dec 05 2012 07:14 AM
Community Stats
 Group Members
 Active Posts 12
 Profile Views 1,099
 Submitted Links 0
 Member Title Member
 Age 30 years old
 Birthday February 25, 1984

Gender
Male

Location
Melbourne, Victoria
132
Learning
User Tools
Contacts
juddo hasn't added any contacts yet.
Latest Visitors
No latest visitors to show
#4998839 calculating normals for triangle strip model, not terrain
Posted by juddo on 08 November 2012  06:18 AM
#4998713 calculating normals for triangle strip model, not terrain
Posted by juddo on 07 November 2012  08:44 PM
hello all,
i am reading vertex data from a game file that stores a character model in triangle strips (ps2 game, hence why triangle strips are used). i did concider converting the triangle strips into vertex indexing to help ease the pain of calculating my normals at runtime, but still would like some help calculating normals for triangle strips.
i recently read on here that triangle strips flip cw/ccw culling every triangle if backface culling is on. below is my code for calculating normals at the moment;
[source lang="cpp"] float vu[3]; float vv[3]; float cp[3]; float result; for (int k = 0; k < nvertices; k++) { vu[0] = vertices[k + 1][0]  vertices[k][0]; vu[1] = vertices[k + 1][1]  vertices[k][1]; vu[2] = vertices[k + 1][2]  vertices[k][2]; vv[0] = vertices[k + 1][0]  vertices[k + 2][0]; vv[1] = vertices[k + 1][1]  vertices[k + 2][1]; vv[2] = vertices[k + 1][2]  vertices[k + 2][2]; cp[0] = (vu[2] * vv[1])  (vu[1] * vv[2]); cp[1] = (vu[0] * vv[2])  (vu[2] * vv[0]); cp[2] = (vu[1] * vv[0])  (vu[0] * vv[1]); result = (float)sqrt((cp[0]*cp[0]) + (cp[1]*cp[1]) + (cp[2]*cp[2])); if (result == 0.0f) result = 1.0f; normals[k][0] = cp[0] / result; normals[k][1] = cp[1] / result; normals[k][2] = cp[2] / result; }[/source]
when i run my program with the above code, i see the following;
&&
you can see on this side shot that i can see through the model (less than desireable.) at the moment i am iterating through every vertex, do i need an offset in my loop to calculate the next triangle or next vertex? it looks like the normals are facing away from each other...
and this is the drawing code...
[source lang="cpp"]glPushMatrix(); glTranslatef(posx_, posy_, posz_); glRotatef(90.0f, 0, 0, 1); glRotatef(turnrate_, 1, 0, 0); glBegin(GL_TRIANGLE_STRIP); for (int i = 0; i < model_.nvertices; i++) { glNormal3f(model_.normals[i][0], model_.normals[i][1], model_.normals[i][2]); glVertex3f(model_.vertices[i][0], model_.vertices[i][1], model_.vertices[i][2]); } glEnd();glPopMatrix();[/source]
thanks for your time,
best regards,
justin
i am reading vertex data from a game file that stores a character model in triangle strips (ps2 game, hence why triangle strips are used). i did concider converting the triangle strips into vertex indexing to help ease the pain of calculating my normals at runtime, but still would like some help calculating normals for triangle strips.
i recently read on here that triangle strips flip cw/ccw culling every triangle if backface culling is on. below is my code for calculating normals at the moment;
[source lang="cpp"] float vu[3]; float vv[3]; float cp[3]; float result; for (int k = 0; k < nvertices; k++) { vu[0] = vertices[k + 1][0]  vertices[k][0]; vu[1] = vertices[k + 1][1]  vertices[k][1]; vu[2] = vertices[k + 1][2]  vertices[k][2]; vv[0] = vertices[k + 1][0]  vertices[k + 2][0]; vv[1] = vertices[k + 1][1]  vertices[k + 2][1]; vv[2] = vertices[k + 1][2]  vertices[k + 2][2]; cp[0] = (vu[2] * vv[1])  (vu[1] * vv[2]); cp[1] = (vu[0] * vv[2])  (vu[2] * vv[0]); cp[2] = (vu[1] * vv[0])  (vu[0] * vv[1]); result = (float)sqrt((cp[0]*cp[0]) + (cp[1]*cp[1]) + (cp[2]*cp[2])); if (result == 0.0f) result = 1.0f; normals[k][0] = cp[0] / result; normals[k][1] = cp[1] / result; normals[k][2] = cp[2] / result; }[/source]
when i run my program with the above code, i see the following;
&&
you can see on this side shot that i can see through the model (less than desireable.) at the moment i am iterating through every vertex, do i need an offset in my loop to calculate the next triangle or next vertex? it looks like the normals are facing away from each other...
and this is the drawing code...
[source lang="cpp"]glPushMatrix(); glTranslatef(posx_, posy_, posz_); glRotatef(90.0f, 0, 0, 1); glRotatef(turnrate_, 1, 0, 0); glBegin(GL_TRIANGLE_STRIP); for (int i = 0; i < model_.nvertices; i++) { glNormal3f(model_.normals[i][0], model_.normals[i][1], model_.normals[i][2]); glVertex3f(model_.vertices[i][0], model_.vertices[i][1], model_.vertices[i][2]); } glEnd();glPopMatrix();[/source]
thanks for your time,
best regards,
justin