[COLOR=#ff00ff][COLOR=#0000ff]void[/COLOR]ddeCL::ddeMeshBuild[COLOR=#8000ff]( [/COLOR][COLOR=#000080]ddeMesh[/COLOR][COLOR=#8000ff] *[/COLOR][COLOR=#0000ff]tempMesh[/COLOR][COLOR=#8000ff] )[/COLOR][/COLOR]
[COLOR=#8000ff]{[/COLOR]
[COLOR=#008000]/* Local variables */[/COLOR]
[COLOR=#8000ff] [COLOR=#000080]Vertex[/COLOR] *[COLOR=#000080]tempVert[/COLOR] = NULL;[/COLOR]
[COLOR=#8000ff] [COLOR=#000080]Weight[/COLOR] *[COLOR=#000080]tempWeight[/COLOR] = NULL;[/COLOR]
[COLOR=#8000ff] [COLOR=#000080]Joint[/COLOR] *[COLOR=#000080]tempJoint[/COLOR] = NULL;[/COLOR]
[COLOR=#8000ff] [COLOR=#000080]ddeFloat[/COLOR] *[COLOR=#000080]currVBOPos[/COLOR] = NULL;[/COLOR]
[COLOR=#8000ff] [COLOR=#000080]ddeFloat[/COLOR] *[COLOR=#000080]VBOCPU[/COLOR] = NULL;[/COLOR]
[COLOR=#8000ff] ddeMath::[COLOR=#000080]vec3[/COLOR] [COLOR=#000080]tan1[/COLOR] [[COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]numVerts[/COLOR]];[/COLOR]
[COLOR=#8000ff] ddeMath::[COLOR=#000080]vec3[/COLOR] [COLOR=#000080]tan2[/COLOR] [[COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]numVerts[/COLOR]];[/COLOR]
[COLOR=#8000ff] [U]vector[/U]<ddeMath::[COLOR=#000080]vec4[/COLOR]> [COLOR=#000080]WeightBuffer[/COLOR];[/COLOR]
[COLOR=#8000ff] [U]vector[/U]<ddeMath::[COLOR=#000080]vec4[/COLOR]> [COLOR=#000080]BoneIndexBuffer[/COLOR];[/COLOR][COLOR=#008000]
[/COLOR]
[COLOR=#0000ff]if[COLOR=#8000ff]( [/COLOR]tempMesh[COLOR=#8000ff]->[/COLOR][COLOR=#800080]isSkinned[/COLOR][COLOR=#8000ff] == [/COLOR]false[COLOR=#8000ff] )[/COLOR][/COLOR]
[COLOR=#8000ff] {[/COLOR]
[COLOR=#808080][COLOR=#8000ff][U]printf[/U][/COLOR][COLOR=#8000ff]( [/COLOR]"Processing Mesh... %s\n"[COLOR=#8000ff], [/COLOR][COLOR=#0000ff]tempMesh[/COLOR][COLOR=#8000ff]->[/COLOR][COLOR=#800080]meshName[/COLOR][COLOR=#8000ff] );[/COLOR][/COLOR]
[COLOR=#008000]//We create a temporary array in order to copy all the meshes from the file to the VBOCPU Array,[/COLOR]
[COLOR=#008000]//We don't need 64 bytes of information for each vertex, but this way we will made a perfect pre-fetching[/COLOR]
[COLOR=#008000]//and no cache miss on GPU, so that's why we send dummy information[/COLOR]
[COLOR=#8000ff] [COLOR=#000080]VBOCPU[/COLOR] = ( [COLOR=#000080]ddeFloat[/COLOR]* )[U]malloc[/U]( ( [COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]numVerts[/COLOR] * [COLOR=#ff8000]16[/COLOR] ) * [COLOR=#0000ff]sizeof[/COLOR]( [COLOR=#0000ff]float[/COLOR] ) );[/COLOR]
[COLOR=#000080][COLOR=#0000ff]for[/COLOR][COLOR=#8000ff] ( [/COLOR]ddeIntj[COLOR=#8000ff] = [/COLOR][COLOR=#ff8000]0[/COLOR][COLOR=#8000ff], [/COLOR]vboCpuIterator[COLOR=#8000ff] = [/COLOR][COLOR=#ff8000]0[/COLOR][COLOR=#8000ff]; [/COLOR]j[COLOR=#8000ff] < [/COLOR][COLOR=#0000ff]tempMesh[/COLOR][COLOR=#8000ff]->[/COLOR][COLOR=#800080]numVerts[/COLOR][COLOR=#8000ff]; [/COLOR]j[COLOR=#8000ff]++, [/COLOR]vboCpuIterator[COLOR=#8000ff] += [/COLOR][COLOR=#ff8000]16[/COLOR][COLOR=#8000ff] )[/COLOR][/COLOR]
[COLOR=#8000ff] {[/COLOR]
[COLOR=#008000]//Temp Variables for boneweight and index matrix[/COLOR]
[COLOR=#8000ff] ddeMath::[COLOR=#000080]vec4[/COLOR] [COLOR=#000080]boneIndices[/COLOR] = ddeMath::[COLOR=#000080]vec4[/COLOR]([COLOR=#ff8000]0[/COLOR]);[/COLOR]
[COLOR=#8000ff] ddeMath::[COLOR=#000080]vec4[/COLOR] [COLOR=#000080]boneWeights[/COLOR] = ddeMath::[COLOR=#000080]vec4[/COLOR]([COLOR=#ff8000]0[/COLOR]);[/COLOR]
[COLOR=#8000ff] [COLOR=#000080]tempVert[/COLOR] = &[COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]verts[/COLOR][[COLOR=#000080]j[/COLOR]];[/COLOR]
[COLOR=#8000ff] [COLOR=#000080]tempVert[/COLOR]->[COLOR=#800080]pos[/COLOR].[COLOR=#800080]x[/COLOR] = [COLOR=#000080]tempVert[/COLOR]->[COLOR=#800080]pos[/COLOR].[COLOR=#800080]y[/COLOR] = [COLOR=#000080]tempVert[/COLOR]->[COLOR=#800080]pos[/COLOR].[COLOR=#800080]z[/COLOR] = [COLOR=#ff8000]0.0[/COLOR];[/COLOR]
[COLOR=#8000ff] [COLOR=#000080]tempVert[/COLOR]->[COLOR=#800080]n[/COLOR].[COLOR=#800080]x[/COLOR] = [COLOR=#000080]tempVert[/COLOR]->[COLOR=#800080]n[/COLOR].[COLOR=#800080]y[/COLOR] = [COLOR=#000080]tempVert[/COLOR]->[COLOR=#800080]n[/COLOR].[COLOR=#800080]z[/COLOR] = [COLOR=#ff8000]0.0[/COLOR]; [/COLOR]
[COLOR=#8000ff] [COLOR=#0000ff]for[/COLOR] ( [COLOR=#000080]ddeInt[/COLOR] [COLOR=#000080]k[/COLOR]=[COLOR=#ff8000]0[/COLOR]; [COLOR=#000080]k[/COLOR] < [COLOR=#000080]tempVert[/COLOR]->[COLOR=#800080]weightCount[/COLOR]; [COLOR=#000080]k[/COLOR]++ )[/COLOR]
[COLOR=#8000ff] { [/COLOR]
[COLOR=#8000ff] [COLOR=#000080]tempWeight[/COLOR] = &[COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]weights[/COLOR][ [COLOR=#000080]tempVert[/COLOR]->[COLOR=#800080]weightIndex[/COLOR] + [COLOR=#000080]k[/COLOR] ];[/COLOR]
[COLOR=#8000ff] [COLOR=#000080]tempJoint[/COLOR] = &[COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]joints[/COLOR] [ [COLOR=#000080]tempWeight[/COLOR]->[COLOR=#800080]joint[/COLOR] ]; [/COLOR]
[COLOR=#8000ff] ddeMath::[COLOR=#000080]quat[/COLOR] [COLOR=#000080]q[/COLOR];[/COLOR]
[COLOR=#8000ff] ddeMath::[COLOR=#000080]vec3[/COLOR] [COLOR=#000080]result[/COLOR] = [COLOR=#000080]tempJoint[/COLOR]->[COLOR=#800080]quat[/COLOR] * ddeMath::[COLOR=#000080]vec3[/COLOR]( [COLOR=#000080]tempWeight[/COLOR]->[COLOR=#800080]pos[/COLOR][[COLOR=#ff8000]0[/COLOR]],[/COLOR]
[COLOR=#8000ff] [COLOR=#000080]tempWeight[/COLOR]->[COLOR=#800080]pos[/COLOR][[COLOR=#ff8000]1[/COLOR]],[/COLOR]
[COLOR=#8000ff] [COLOR=#000080]tempWeight[/COLOR]->[COLOR=#800080]pos[/COLOR][[COLOR=#ff8000]2[/COLOR]] );[/COLOR]
[COLOR=#000080]tempVert[COLOR=#8000ff]->[/COLOR][COLOR=#800080]pos[/COLOR][COLOR=#8000ff].[/COLOR][COLOR=#800080]x[/COLOR][COLOR=#8000ff] += ( [/COLOR]tempJoint[COLOR=#8000ff]->[/COLOR][COLOR=#800080]pos[/COLOR][COLOR=#8000ff][[/COLOR][COLOR=#ff8000]0[/COLOR][COLOR=#8000ff]] + [/COLOR]result[COLOR=#8000ff].[/COLOR][COLOR=#800080]x[/COLOR][COLOR=#8000ff] ) * [/COLOR]tempWeight[COLOR=#8000ff]->[/COLOR][COLOR=#800080]w[/COLOR][COLOR=#8000ff];[/COLOR][/COLOR]
[COLOR=#000080]tempVert[COLOR=#8000ff]->[/COLOR][COLOR=#800080]pos[/COLOR][COLOR=#8000ff].[/COLOR][COLOR=#800080]y[/COLOR][COLOR=#8000ff] += ( [/COLOR]tempJoint[COLOR=#8000ff]->[/COLOR][COLOR=#800080]pos[/COLOR][COLOR=#8000ff][[/COLOR][COLOR=#ff8000]1[/COLOR][COLOR=#8000ff]] + [/COLOR]result[COLOR=#8000ff].[/COLOR][COLOR=#800080]y[/COLOR][COLOR=#8000ff] ) * [/COLOR]tempWeight[COLOR=#8000ff]->[/COLOR][COLOR=#800080]w[/COLOR][COLOR=#8000ff];[/COLOR][/COLOR]
[COLOR=#000080]tempVert[COLOR=#8000ff]->[/COLOR][COLOR=#800080]pos[/COLOR][COLOR=#8000ff].[/COLOR][COLOR=#800080]z[/COLOR][COLOR=#8000ff] += ( [/COLOR]tempJoint[COLOR=#8000ff]->[/COLOR][COLOR=#800080]pos[/COLOR][COLOR=#8000ff][[/COLOR][COLOR=#ff8000]2[/COLOR][COLOR=#8000ff]] + [/COLOR]result[COLOR=#8000ff].[/COLOR][COLOR=#800080]z[/COLOR][COLOR=#8000ff] ) * [/COLOR]tempWeight[COLOR=#8000ff]->[/COLOR][COLOR=#800080]w[/COLOR][COLOR=#8000ff];[/COLOR][/COLOR]
[COLOR=#000080]boneIndices[COLOR=#8000ff][[/COLOR]k[COLOR=#8000ff]] = ( [/COLOR][COLOR=#0000ff]float[/COLOR][COLOR=#8000ff] )[/COLOR]tempWeight[COLOR=#8000ff]->[/COLOR][COLOR=#800080]joint[/COLOR][COLOR=#8000ff];[/COLOR][/COLOR]
[COLOR=#8000ff] [COLOR=#000080]boneWeights[/COLOR][[COLOR=#000080]k[/COLOR]] = [COLOR=#000080]tempWeight[/COLOR]->[COLOR=#800080]w[/COLOR]; [/COLOR]
[COLOR=#008000][COLOR=#8000ff] } [/COLOR]// for (weights) [/COLOR]
[COLOR=#008000]// Copy the 3 new vertices to the temporary VBO [/COLOR]
[COLOR=#000080]currVBOPos[COLOR=#8000ff] = &[/COLOR]VBOCPU[COLOR=#8000ff][[/COLOR]vboCpuIterator[COLOR=#8000ff]];[/COLOR][/COLOR]
[COLOR=#000080]currVBOPos[COLOR=#8000ff][[/COLOR][COLOR=#ff8000]0[/COLOR][COLOR=#8000ff]] = [/COLOR]tempVert[COLOR=#8000ff]->[/COLOR][COLOR=#800080]pos[/COLOR][COLOR=#8000ff].[/COLOR][COLOR=#800080]x[/COLOR][COLOR=#8000ff]; [/COLOR][COLOR=#008000]//Vertex Pos0.[/COLOR][/COLOR]
[COLOR=#000080]currVBOPos[COLOR=#8000ff][[/COLOR][COLOR=#ff8000]1[/COLOR][COLOR=#8000ff]] = [/COLOR]tempVert[COLOR=#8000ff]->[/COLOR][COLOR=#800080]pos[/COLOR][COLOR=#8000ff].[/COLOR][COLOR=#800080]y[/COLOR][COLOR=#8000ff]; [/COLOR][COLOR=#008000]//Vertex Pos1.[/COLOR][/COLOR]
[COLOR=#000080]currVBOPos[COLOR=#8000ff][[/COLOR][COLOR=#ff8000]2[/COLOR][COLOR=#8000ff]] = [/COLOR]tempVert[COLOR=#8000ff]->[/COLOR][COLOR=#800080]pos[/COLOR][COLOR=#8000ff].[/COLOR][COLOR=#800080]z[/COLOR][COLOR=#8000ff]; [/COLOR][COLOR=#008000]//Vertex Pos2.[/COLOR][/COLOR]
[COLOR=#8000ff] [COLOR=#000080]currVBOPos[/COLOR][[COLOR=#ff8000]3[/COLOR]] = [COLOR=#ff8000]0.0[/COLOR]f; [COLOR=#008000]//Vertex Pos3 (Dummy).[/COLOR][/COLOR]
[COLOR=#000080]currVBOPos[COLOR=#8000ff][[/COLOR][COLOR=#ff8000]8[/COLOR][COLOR=#8000ff]] = [/COLOR]tempVert[COLOR=#8000ff]->[/COLOR][COLOR=#800080]tc[/COLOR][COLOR=#8000ff].[/COLOR][COLOR=#800080]x[/COLOR][COLOR=#8000ff]; [/COLOR][COLOR=#008000]//Texture Coord 0.[/COLOR][/COLOR]
[COLOR=#000080]currVBOPos[COLOR=#8000ff][[/COLOR][COLOR=#ff8000]9[/COLOR][COLOR=#8000ff]] = [/COLOR]tempVert[COLOR=#8000ff]->[/COLOR][COLOR=#800080]tc[/COLOR][COLOR=#8000ff].[/COLOR][COLOR=#800080]y[/COLOR][COLOR=#8000ff]; [/COLOR][COLOR=#008000]//Texture Coord 1.[/COLOR][/COLOR]
[COLOR=#8000ff] [COLOR=#0000ff]#ifdef[/COLOR] DDEDEBUG[/COLOR]
[COLOR=#008000]//Check for duplicates Verts in the VBO[/COLOR]
[COLOR=#8000ff] ddeCheckCurrVertexVBO( tempVert->pos.x,[/COLOR]
[COLOR=#8000ff] tempVert->pos.y,[/COLOR]
[COLOR=#8000ff] tempVert->pos.z,[/COLOR]
[COLOR=#8000ff] VBOCPU,[/COLOR]
[COLOR=#8000ff] j,[/COLOR]
[COLOR=#8000ff] tempMesh->meshName );[/COLOR]
[COLOR=#8000ff] [COLOR=#0000ff]#endif[/COLOR][/COLOR]
[COLOR=#000080]WeightBuffer[COLOR=#8000ff].[/COLOR][COLOR=#8000ff][U]push_back[/U][/COLOR][COLOR=#8000ff] ([/COLOR]boneWeights[COLOR=#8000ff]);[/COLOR][/COLOR]
[COLOR=#000080]BoneIndexBuffer[COLOR=#8000ff].[/COLOR][COLOR=#8000ff][U]push_back[/U][/COLOR][COLOR=#8000ff]([/COLOR]boneIndices[COLOR=#8000ff]);[/COLOR][/COLOR]
[COLOR=#008000][COLOR=#8000ff] } [/COLOR]// for (mesh vertices)[/COLOR]
[COLOR=#008000]// For each normal, add contribution to normal from every face that vertex [/COLOR]
[COLOR=#008000]// is part of and also made the first pass for the Tangent Creation[/COLOR]
[COLOR=#808080][COLOR=#8000ff][U]printf[/U][/COLOR][COLOR=#8000ff]( [/COLOR]"Calculating Normals...\n"[COLOR=#8000ff] );[/COLOR][/COLOR]
[COLOR=#8000ff] [COLOR=#0000ff]for[/COLOR]( [COLOR=#000080]ddeInt[/COLOR] [COLOR=#000080]j[/COLOR] = [COLOR=#ff8000]0[/COLOR]; [COLOR=#000080]j[/COLOR] < [COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]numTris[/COLOR]; [COLOR=#000080]j[/COLOR]++ )[/COLOR]
[COLOR=#8000ff] {[/COLOR]
[COLOR=#008000]//Normal Stuff[/COLOR]
[COLOR=#008000]//Retrieves Vertex from Index List [/COLOR]
[COLOR=#8000ff] [COLOR=#000080]Vertex[/COLOR] *[COLOR=#000080]v0[/COLOR] = &[COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]verts[/COLOR][ [COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]tris[/COLOR][[COLOR=#000080]j[/COLOR]].[COLOR=#800080]v[/COLOR][[COLOR=#ff8000]0[/COLOR]] ];[/COLOR]
[COLOR=#8000ff] [COLOR=#000080]Vertex[/COLOR] *[COLOR=#000080]v1[/COLOR] = &[COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]verts[/COLOR][ [COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]tris[/COLOR][[COLOR=#000080]j[/COLOR]].[COLOR=#800080]v[/COLOR][[COLOR=#ff8000]1[/COLOR]] ];[/COLOR]
[COLOR=#8000ff] [COLOR=#000080]Vertex[/COLOR] *[COLOR=#000080]v2[/COLOR] = &[COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]verts[/COLOR][ [COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]tris[/COLOR][[COLOR=#000080]j[/COLOR]].[COLOR=#800080]v[/COLOR][[COLOR=#ff8000]2[/COLOR]] ];[/COLOR]
[COLOR=#8000ff] [COLOR=#0000ff]float[/COLOR] [COLOR=#000080]Ax[/COLOR] = [COLOR=#000080]v1[/COLOR]->[COLOR=#800080]pos[/COLOR][[COLOR=#ff8000]0[/COLOR]] - [COLOR=#000080]v0[/COLOR]->[COLOR=#800080]pos[/COLOR][[COLOR=#ff8000]0[/COLOR]];[/COLOR]
[COLOR=#8000ff] [COLOR=#0000ff]float[/COLOR] [COLOR=#000080]Ay[/COLOR] = [COLOR=#000080]v1[/COLOR]->[COLOR=#800080]pos[/COLOR][[COLOR=#ff8000]1[/COLOR]] - [COLOR=#000080]v0[/COLOR]->[COLOR=#800080]pos[/COLOR][[COLOR=#ff8000]1[/COLOR]];[/COLOR]
[COLOR=#8000ff] [COLOR=#0000ff]float[/COLOR] [COLOR=#000080]Az[/COLOR] = [COLOR=#000080]v1[/COLOR]->[COLOR=#800080]pos[/COLOR][[COLOR=#ff8000]2[/COLOR]] - [COLOR=#000080]v0[/COLOR]->[COLOR=#800080]pos[/COLOR][[COLOR=#ff8000]2[/COLOR]];[/COLOR]
[COLOR=#8000ff] [COLOR=#0000ff]float[/COLOR] [COLOR=#000080]Bx[/COLOR] = [COLOR=#000080]v2[/COLOR]->[COLOR=#800080]pos[/COLOR][[COLOR=#ff8000]0[/COLOR]] - [COLOR=#000080]v0[/COLOR]->[COLOR=#800080]pos[/COLOR][[COLOR=#ff8000]0[/COLOR]];[/COLOR]
[COLOR=#8000ff] [COLOR=#0000ff]float[/COLOR] [COLOR=#000080]By[/COLOR] = [COLOR=#000080]v2[/COLOR]->[COLOR=#800080]pos[/COLOR][[COLOR=#ff8000]1[/COLOR]] - [COLOR=#000080]v0[/COLOR]->[COLOR=#800080]pos[/COLOR][[COLOR=#ff8000]1[/COLOR]];[/COLOR]
[COLOR=#8000ff] [COLOR=#0000ff]float[/COLOR] [COLOR=#000080]Bz[/COLOR] = [COLOR=#000080]v2[/COLOR]->[COLOR=#800080]pos[/COLOR][[COLOR=#ff8000]2[/COLOR]] - [COLOR=#000080]v0[/COLOR]->[COLOR=#800080]pos[/COLOR][[COLOR=#ff8000]2[/COLOR]];[/COLOR]
[COLOR=#8000ff] [COLOR=#0000ff]float[/COLOR] [COLOR=#000080]nx[/COLOR] = [COLOR=#000080]Ay[/COLOR] * [COLOR=#000080]Bz[/COLOR] - [COLOR=#000080]By[/COLOR] * [COLOR=#000080]Az[/COLOR];[/COLOR]
[COLOR=#8000ff] [COLOR=#0000ff]float[/COLOR] [COLOR=#000080]ny[/COLOR] = -([COLOR=#000080]Ax[/COLOR] * [COLOR=#000080]Bz[/COLOR] - [COLOR=#000080]Bx[/COLOR] * [COLOR=#000080]Az[/COLOR]);[/COLOR]
[COLOR=#8000ff] [COLOR=#0000ff]float[/COLOR] [COLOR=#000080]nz[/COLOR] = [COLOR=#000080]Ax[/COLOR] * [COLOR=#000080]By[/COLOR] - [COLOR=#000080]Bx[/COLOR] * [COLOR=#000080]Ay[/COLOR];[/COLOR]
[COLOR=#8000ff] [COLOR=#000080]v0[/COLOR]->[COLOR=#800080]n[/COLOR][[COLOR=#ff8000]0[/COLOR]] += [COLOR=#000080]nx[/COLOR];[/COLOR]
[COLOR=#8000ff] [COLOR=#000080]v0[/COLOR]->[COLOR=#800080]n[/COLOR][[COLOR=#ff8000]1[/COLOR]] += [COLOR=#000080]ny[/COLOR];[/COLOR]
[COLOR=#8000ff] [COLOR=#000080]v0[/COLOR]->[COLOR=#800080]n[/COLOR][[COLOR=#ff8000]2[/COLOR]] += [COLOR=#000080]nz[/COLOR];[/COLOR]
[COLOR=#8000ff] [COLOR=#000080]v1[/COLOR]->[COLOR=#800080]n[/COLOR][[COLOR=#ff8000]0[/COLOR]] += [COLOR=#000080]nx[/COLOR];[/COLOR]
[COLOR=#8000ff] [COLOR=#000080]v1[/COLOR]->[COLOR=#800080]n[/COLOR][[COLOR=#ff8000]1[/COLOR]] += [COLOR=#000080]ny[/COLOR];[/COLOR]
[COLOR=#8000ff] [COLOR=#000080]v1[/COLOR]->[COLOR=#800080]n[/COLOR][[COLOR=#ff8000]2[/COLOR]] += [COLOR=#000080]nz[/COLOR];[/COLOR]
[COLOR=#8000ff] [COLOR=#000080]v2[/COLOR]->[COLOR=#800080]n[/COLOR][[COLOR=#ff8000]0[/COLOR]] += [COLOR=#000080]nx[/COLOR];[/COLOR]
[COLOR=#8000ff] [COLOR=#000080]v2[/COLOR]->[COLOR=#800080]n[/COLOR][[COLOR=#ff8000]1[/COLOR]] += [COLOR=#000080]ny[/COLOR];[/COLOR]
[COLOR=#8000ff] [COLOR=#000080]v2[/COLOR]->[COLOR=#800080]n[/COLOR][[COLOR=#ff8000]2[/COLOR]] += [COLOR=#000080]nz[/COLOR];[/COLOR]
[COLOR=#8000ff] }[/COLOR]
[COLOR=#808080][COLOR=#8000ff][U]printf[/U][/COLOR][COLOR=#8000ff]( [/COLOR]"Calculating First Pass Tangent...\n"[COLOR=#8000ff] );[/COLOR][/COLOR]
[COLOR=#8000ff] [COLOR=#0000ff]for[/COLOR]( [COLOR=#000080]ddeInt[/COLOR] [COLOR=#000080]j[/COLOR] = [COLOR=#ff8000]0[/COLOR]; [COLOR=#000080]j[/COLOR] < [COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]numTris[/COLOR]; [COLOR=#000080]j[/COLOR]++ )[/COLOR]
[COLOR=#8000ff] {[/COLOR]
[COLOR=#008000]//Tangent Stuff[/COLOR]
[COLOR=#008000]//Retrieve Triangle from Index List[/COLOR]
[COLOR=#8000ff] [COLOR=#000080]ddeLong[/COLOR] [COLOR=#000080]i1[/COLOR] = [COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]tris[/COLOR][[COLOR=#000080]j[/COLOR]].[COLOR=#800080]v[/COLOR][[COLOR=#ff8000]0[/COLOR]];[/COLOR]
[COLOR=#8000ff] [COLOR=#000080]ddeLong[/COLOR] [COLOR=#000080]i2[/COLOR] = [COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]tris[/COLOR][[COLOR=#000080]j[/COLOR]].[COLOR=#800080]v[/COLOR][[COLOR=#ff8000]1[/COLOR]];[/COLOR]
[COLOR=#8000ff] [COLOR=#000080]ddeLong[/COLOR] [COLOR=#000080]i3[/COLOR] = [COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]tris[/COLOR][[COLOR=#000080]j[/COLOR]].[COLOR=#800080]v[/COLOR][[COLOR=#ff8000]2[/COLOR]];[/COLOR]
[COLOR=#008000]//Fill the 3 Verts of the triangle[/COLOR]
[COLOR=#8000ff] ddeMath::[COLOR=#000080]vec3[/COLOR] [COLOR=#000080]vert1[/COLOR] = ddeMath::[COLOR=#000080]vec3[/COLOR]( [COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]verts[/COLOR][[COLOR=#000080]i1[/COLOR]].[COLOR=#800080]pos[/COLOR][[COLOR=#ff8000]0[/COLOR]],[/COLOR]
[COLOR=#8000ff] [COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]verts[/COLOR][[COLOR=#000080]i1[/COLOR]].[COLOR=#800080]pos[/COLOR][[COLOR=#ff8000]1[/COLOR]],[/COLOR]
[COLOR=#8000ff] [COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]verts[/COLOR][[COLOR=#000080]i1[/COLOR]].[COLOR=#800080]pos[/COLOR][[COLOR=#ff8000]2[/COLOR]] );[/COLOR]
[COLOR=#8000ff] ddeMath::[COLOR=#000080]vec3[/COLOR] [COLOR=#000080]vert2[/COLOR] = ddeMath::[COLOR=#000080]vec3[/COLOR]( [COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]verts[/COLOR][[COLOR=#000080]i2[/COLOR]].[COLOR=#800080]pos[/COLOR][[COLOR=#ff8000]0[/COLOR]],[/COLOR]
[COLOR=#8000ff] [COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]verts[/COLOR][[COLOR=#000080]i2[/COLOR]].[COLOR=#800080]pos[/COLOR][[COLOR=#ff8000]1[/COLOR]],[/COLOR]
[COLOR=#8000ff] [COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]verts[/COLOR][[COLOR=#000080]i2[/COLOR]].[COLOR=#800080]pos[/COLOR][[COLOR=#ff8000]2[/COLOR]] );[/COLOR]
[COLOR=#8000ff] ddeMath::[COLOR=#000080]vec3[/COLOR] [COLOR=#000080]vert3[/COLOR] = ddeMath::[COLOR=#000080]vec3[/COLOR]( [COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]verts[/COLOR][[COLOR=#000080]i3[/COLOR]].[COLOR=#800080]pos[/COLOR][[COLOR=#ff8000]0[/COLOR]],[/COLOR]
[COLOR=#8000ff] [COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]verts[/COLOR][[COLOR=#000080]i3[/COLOR]].[COLOR=#800080]pos[/COLOR][[COLOR=#ff8000]1[/COLOR]],[/COLOR]
[COLOR=#8000ff] [COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]verts[/COLOR][[COLOR=#000080]i3[/COLOR]].[COLOR=#800080]pos[/COLOR][[COLOR=#ff8000]2[/COLOR]] );[/COLOR]
[COLOR=#008000]//Fill the 3 Texture Coords of each Vertex[/COLOR]
[COLOR=#8000ff] ddeMath::[COLOR=#000080]vec2[/COLOR] [COLOR=#000080]tc1[/COLOR] = ddeMath::[COLOR=#000080]vec2[/COLOR]( [COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]verts[/COLOR][[COLOR=#000080]i1[/COLOR]].[COLOR=#800080]tc[/COLOR][[COLOR=#ff8000]0[/COLOR]],[/COLOR]
[COLOR=#8000ff] [COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]verts[/COLOR][[COLOR=#000080]i1[/COLOR]].[COLOR=#800080]tc[/COLOR][[COLOR=#ff8000]1[/COLOR]] );[/COLOR]
[COLOR=#8000ff] ddeMath::[COLOR=#000080]vec2[/COLOR] [COLOR=#000080]tc2[/COLOR] = ddeMath::[COLOR=#000080]vec2[/COLOR]( [COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]verts[/COLOR][[COLOR=#000080]i2[/COLOR]].[COLOR=#800080]tc[/COLOR][[COLOR=#ff8000]0[/COLOR]],[/COLOR]
[COLOR=#8000ff] [COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]verts[/COLOR][[COLOR=#000080]i2[/COLOR]].[COLOR=#800080]tc[/COLOR][[COLOR=#ff8000]1[/COLOR]] );[/COLOR]
[COLOR=#8000ff] ddeMath::[COLOR=#000080]vec2[/COLOR] [COLOR=#000080]tc3[/COLOR] = ddeMath::[COLOR=#000080]vec2[/COLOR]( [COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]verts[/COLOR][[COLOR=#000080]i3[/COLOR]].[COLOR=#800080]tc[/COLOR][[COLOR=#ff8000]0[/COLOR]],[/COLOR]
[COLOR=#8000ff] [COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]verts[/COLOR][[COLOR=#000080]i3[/COLOR]].[COLOR=#800080]tc[/COLOR][[COLOR=#ff8000]1[/COLOR]] );[/COLOR]
[COLOR=#008000]//Calculate the Tangent[/COLOR]
[COLOR=#000080]ddeFloatx1[COLOR=#8000ff] = [/COLOR]vert2[COLOR=#8000ff].[/COLOR][COLOR=#800080]x[/COLOR][COLOR=#8000ff] - [/COLOR]vert1[COLOR=#8000ff].[/COLOR][COLOR=#800080]x[/COLOR][COLOR=#8000ff];[/COLOR][/COLOR]
[COLOR=#000080]ddeFloatx2[COLOR=#8000ff] = [/COLOR]vert3[COLOR=#8000ff].[/COLOR][COLOR=#800080]x[/COLOR][COLOR=#8000ff] - [/COLOR]vert1[COLOR=#8000ff].[/COLOR][COLOR=#800080]x[/COLOR][COLOR=#8000ff];[/COLOR][/COLOR]
[COLOR=#000080]ddeFloaty1[COLOR=#8000ff] = [/COLOR]vert2[COLOR=#8000ff].[/COLOR][COLOR=#800080]y[/COLOR][COLOR=#8000ff] - [/COLOR]vert1[COLOR=#8000ff].[/COLOR][COLOR=#800080]y[/COLOR][COLOR=#8000ff];[/COLOR][/COLOR]
[COLOR=#000080]ddeFloaty2[COLOR=#8000ff] = [/COLOR]vert3[COLOR=#8000ff].[/COLOR][COLOR=#800080]y[/COLOR][COLOR=#8000ff] - [/COLOR]vert1[COLOR=#8000ff].[/COLOR][COLOR=#800080]y[/COLOR][COLOR=#8000ff];[/COLOR][/COLOR]
[COLOR=#000080]ddeFloatz1[COLOR=#8000ff] = [/COLOR]vert2[COLOR=#8000ff].[/COLOR][COLOR=#800080]z[/COLOR][COLOR=#8000ff] - [/COLOR]vert1[COLOR=#8000ff].[/COLOR][COLOR=#800080]z[/COLOR][COLOR=#8000ff];[/COLOR][/COLOR]
[COLOR=#000080]ddeFloatz2[COLOR=#8000ff] = [/COLOR]vert3[COLOR=#8000ff].[/COLOR][COLOR=#800080]z[/COLOR][COLOR=#8000ff] - [/COLOR]vert1[COLOR=#8000ff].[/COLOR][COLOR=#800080]z[/COLOR][COLOR=#8000ff];[/COLOR][/COLOR]
[COLOR=#000080]ddeFloats1[COLOR=#8000ff] = [/COLOR]tc2[COLOR=#8000ff].[/COLOR][COLOR=#800080]x[/COLOR][COLOR=#8000ff] - [/COLOR]tc1[COLOR=#8000ff].[/COLOR][COLOR=#800080]x[/COLOR][COLOR=#8000ff];[/COLOR][/COLOR]
[COLOR=#000080]ddeFloats2[COLOR=#8000ff] = [/COLOR]tc3[COLOR=#8000ff].[/COLOR][COLOR=#800080]x[/COLOR][COLOR=#8000ff] - [/COLOR]tc1[COLOR=#8000ff].[/COLOR][COLOR=#800080]x[/COLOR][COLOR=#8000ff];[/COLOR][/COLOR]
[COLOR=#000080]ddeFloatt1[COLOR=#8000ff] = [/COLOR]tc2[COLOR=#8000ff].[/COLOR][COLOR=#800080]y[/COLOR][COLOR=#8000ff] - [/COLOR]tc1[COLOR=#8000ff].[/COLOR][COLOR=#800080]y[/COLOR][COLOR=#8000ff];[/COLOR][/COLOR]
[COLOR=#000080]ddeFloatt2[COLOR=#8000ff] = [/COLOR]tc3[COLOR=#8000ff].[/COLOR][COLOR=#800080]y[/COLOR][COLOR=#8000ff] - [/COLOR]tc1[COLOR=#8000ff].[/COLOR][COLOR=#800080]y[/COLOR][COLOR=#8000ff];[/COLOR][/COLOR]
[COLOR=#8000ff] [COLOR=#000080]ddeFloat[/COLOR] [COLOR=#000080]r[/COLOR] = [COLOR=#ff8000]1.0[/COLOR]f / ([COLOR=#000080]s1[/COLOR] * [COLOR=#000080]t2[/COLOR] - [COLOR=#000080]s2[/COLOR] * [COLOR=#000080]t1[/COLOR]);[/COLOR]
[COLOR=#8000ff] ddeMath::[COLOR=#000080]vec3[/COLOR] [COLOR=#000080]sdir[/COLOR] = ddeMath::[COLOR=#000080]vec3[/COLOR]( ( [COLOR=#000080]t2[/COLOR] * [COLOR=#000080]x1[/COLOR] - [COLOR=#000080]t1[/COLOR] * [COLOR=#000080]x2[/COLOR] ) * [COLOR=#000080]r[/COLOR],[/COLOR]
[COLOR=#8000ff] ( [COLOR=#000080]t2[/COLOR] * [COLOR=#000080]y1[/COLOR] - [COLOR=#000080]t1[/COLOR] * [COLOR=#000080]y2[/COLOR] ) * [COLOR=#000080]r[/COLOR],[/COLOR]
[COLOR=#8000ff] ( [COLOR=#000080]t2[/COLOR] * [COLOR=#000080]z1[/COLOR] - [COLOR=#000080]t1[/COLOR] * [COLOR=#000080]z2[/COLOR] ) * [COLOR=#000080]r[/COLOR] );[/COLOR]
[COLOR=#8000ff] ddeMath::[COLOR=#000080]vec3[/COLOR] [COLOR=#000080]tdir[/COLOR] = ddeMath::[COLOR=#000080]vec3[/COLOR]( ( [COLOR=#000080]s1[/COLOR] * [COLOR=#000080]x2[/COLOR] - [COLOR=#000080]s2[/COLOR] * [COLOR=#000080]x1[/COLOR] ) * [COLOR=#000080]r[/COLOR],[/COLOR]
[COLOR=#8000ff] ( [COLOR=#000080]s1[/COLOR] * [COLOR=#000080]y2[/COLOR] - [COLOR=#000080]s2[/COLOR] * [COLOR=#000080]y1[/COLOR] ) * [COLOR=#000080]r[/COLOR],[/COLOR]
[COLOR=#8000ff] ( [COLOR=#000080]s1[/COLOR] * [COLOR=#000080]z2[/COLOR] - [COLOR=#000080]s2[/COLOR] * [COLOR=#000080]z1[/COLOR] ) * [COLOR=#000080]r[/COLOR] );[/COLOR]
[COLOR=#008000]//Add the result for each tangent[/COLOR]
[COLOR=#8000ff] [COLOR=#000080]tan1[/COLOR][[COLOR=#000080]i1[/COLOR]] += [COLOR=#000080]sdir[/COLOR]; [COLOR=#000080]tan2[/COLOR][[COLOR=#000080]i1[/COLOR]] += [COLOR=#000080]tdir[/COLOR];[/COLOR]
[COLOR=#8000ff] [COLOR=#000080]tan2[/COLOR][[COLOR=#000080]i2[/COLOR]] += [COLOR=#000080]sdir[/COLOR]; [COLOR=#000080]tan2[/COLOR][[COLOR=#000080]i2[/COLOR]] += [COLOR=#000080]tdir[/COLOR];[/COLOR]
[COLOR=#8000ff] [COLOR=#000080]tan2[/COLOR][[COLOR=#000080]i3[/COLOR]] += [COLOR=#000080]sdir[/COLOR]; [COLOR=#000080]tan2[/COLOR][[COLOR=#000080]i3[/COLOR]] += [COLOR=#000080]tdir[/COLOR];[/COLOR]
[COLOR=#8000ff] }[/COLOR]
[COLOR=#008000]// Normalize each normal && Calculate Final Tangent and BiNormal[/COLOR]
[COLOR=#808080][COLOR=#8000ff][U]printf[/U][/COLOR][COLOR=#8000ff]( [/COLOR]"Filling Normal - Tangent - BiNormal...\n"[COLOR=#8000ff] );[/COLOR][/COLOR]
[COLOR=#000080][COLOR=#0000ff]for[/COLOR][COLOR=#8000ff]( [/COLOR]ddeIntj[COLOR=#8000ff] = [/COLOR][COLOR=#ff8000]0[/COLOR][COLOR=#8000ff], [/COLOR]vboCpuIterator[COLOR=#8000ff] = [/COLOR][COLOR=#ff8000]0[/COLOR][COLOR=#8000ff]; [/COLOR]j[COLOR=#8000ff] < [/COLOR][COLOR=#0000ff]tempMesh[/COLOR][COLOR=#8000ff]->[/COLOR][COLOR=#800080]numVerts[/COLOR][COLOR=#8000ff]; [/COLOR]j[COLOR=#8000ff]++, [/COLOR]vboCpuIterator[COLOR=#8000ff] += [/COLOR][COLOR=#ff8000]16[/COLOR][COLOR=#8000ff] )[/COLOR][/COLOR]
[COLOR=#8000ff] {[/COLOR]
[COLOR=#8000ff] [COLOR=#000080]Vertex[/COLOR] *[COLOR=#000080]v[/COLOR] = &[COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]verts[/COLOR][[COLOR=#000080]j[/COLOR]];[/COLOR]
[COLOR=#8000ff] [COLOR=#0000ff]float[/COLOR] [COLOR=#000080]mag[/COLOR] = ([COLOR=#0000ff]float[/COLOR])[U]sqrt[/U]( [COLOR=#0000ff]float[/COLOR]( [COLOR=#000080]v[/COLOR]->[COLOR=#800080]n[/COLOR][[COLOR=#ff8000]0[/COLOR]] * [COLOR=#000080]v[/COLOR]->[COLOR=#800080]n[/COLOR][[COLOR=#ff8000]0[/COLOR]] + [COLOR=#000080]v[/COLOR]->[COLOR=#800080]n[/COLOR][[COLOR=#ff8000]1[/COLOR]] * [COLOR=#000080]v[/COLOR]->[COLOR=#800080]n[/COLOR][[COLOR=#ff8000]1[/COLOR]] + [COLOR=#000080]v[/COLOR]->[COLOR=#800080]n[/COLOR][[COLOR=#ff8000]2[/COLOR]] * [COLOR=#000080]v[/COLOR]->[COLOR=#800080]n[/COLOR][[COLOR=#ff8000]2[/COLOR]] ) );[/COLOR]
[COLOR=#008000]// Avoid Division By Zero [/COLOR]
[COLOR=#8000ff] [COLOR=#0000ff]if[/COLOR] ( [COLOR=#000080]mag[/COLOR] > [COLOR=#ff8000]0.0001[/COLOR]f ) [/COLOR]
[COLOR=#8000ff] {[/COLOR]
[COLOR=#8000ff] [COLOR=#000080]v[/COLOR]->[COLOR=#800080]n[/COLOR][[COLOR=#ff8000]0[/COLOR]] /= [COLOR=#000080]mag[/COLOR];[/COLOR]
[COLOR=#8000ff] [COLOR=#000080]v[/COLOR]->[COLOR=#800080]n[/COLOR][[COLOR=#ff8000]1[/COLOR]] /= [COLOR=#000080]mag[/COLOR];[/COLOR]
[COLOR=#8000ff] [COLOR=#000080]v[/COLOR]->[COLOR=#800080]n[/COLOR][[COLOR=#ff8000]2[/COLOR]] /= [COLOR=#000080]mag[/COLOR];[/COLOR]
[COLOR=#8000ff] }[/COLOR]
[COLOR=#008000]//Finish Tangent and Binormal Calculations[/COLOR]
[COLOR=#8000ff] ddeMath::[COLOR=#000080]vec3[/COLOR] [COLOR=#000080]tmpNormal[/COLOR] = ddeMath::[COLOR=#000080]vec3[/COLOR]( [COLOR=#000080]v[/COLOR]->[COLOR=#800080]n[/COLOR][[COLOR=#ff8000]0[/COLOR]], [COLOR=#000080]v[/COLOR]->[COLOR=#800080]n[/COLOR][[COLOR=#ff8000]1[/COLOR]], [COLOR=#000080]v[/COLOR]->[COLOR=#800080]n[/COLOR][[COLOR=#ff8000]2[/COLOR]] );[/COLOR]
[COLOR=#8000ff] ddeMath::[COLOR=#000080]vec3[/COLOR] [COLOR=#000080]tmpTan[/COLOR];[/COLOR]
[COLOR=#8000ff] ( ddeMath::[COLOR=#ff00ff]dot[/COLOR]( ddeMath::[COLOR=#ff00ff]cross[/COLOR]( [COLOR=#000080]tmpNormal[/COLOR], [COLOR=#000080]tan1[/COLOR][[COLOR=#000080]j[/COLOR]] ), [COLOR=#000080]tan2[/COLOR][[COLOR=#000080]j[/COLOR]] ) < [COLOR=#ff8000]0.0[/COLOR]f) ? [COLOR=#000080]tmpTan[/COLOR] = [COLOR=#000080]tan1[/COLOR][[COLOR=#000080]j[/COLOR]][/COLOR]
[COLOR=#8000ff] : [COLOR=#000080]tmpTan[/COLOR] = [COLOR=#000080]tan2[/COLOR][[COLOR=#000080]j[/COLOR]];[/COLOR]
[COLOR=#8000ff] ddeMath::[COLOR=#ff00ff]orthonormalize[/COLOR]( [COLOR=#000080]tmpNormal[/COLOR], [COLOR=#000080]tmpTan[/COLOR] );
[/COLOR]
[COLOR=#8000ff] ddeMath::[COLOR=#000080]vec3[/COLOR] [COLOR=#000080]resultTan[/COLOR] = [COLOR=#000080]tmpTan[/COLOR];
[/COLOR]
[COLOR=#8000ff] ddeMath::[COLOR=#000080]vec3[/COLOR] [COLOR=#000080]biNormal[/COLOR] = ddeMath::[COLOR=#ff00ff]cross[/COLOR]( [COLOR=#000080]tmpTan[/COLOR], [COLOR=#000080]tmpNormal[/COLOR] );[/COLOR]
[COLOR=#008000]// Now save Normals in the VBO Array [/COLOR]
[COLOR=#000080]currVBOPos[COLOR=#8000ff] = &[/COLOR]VBOCPU[COLOR=#8000ff][[/COLOR]vboCpuIterator[COLOR=#8000ff]];[/COLOR][/COLOR]
[COLOR=#8000ff] [COLOR=#000080]currVBOPos[/COLOR][[COLOR=#ff8000]4[/COLOR]] = [COLOR=#000080]v[/COLOR]->[COLOR=#800080]n[/COLOR][[COLOR=#ff8000]0[/COLOR]]; [COLOR=#008000]//Normal 0. [/COLOR][/COLOR]
[COLOR=#8000ff] [COLOR=#000080]currVBOPos[/COLOR][[COLOR=#ff8000]5[/COLOR]] = [COLOR=#000080]v[/COLOR]->[COLOR=#800080]n[/COLOR][[COLOR=#ff8000]1[/COLOR]]; [COLOR=#008000]//Normal 1.[/COLOR][/COLOR]
[COLOR=#8000ff] [COLOR=#000080]currVBOPos[/COLOR][[COLOR=#ff8000]6[/COLOR]] = [COLOR=#000080]v[/COLOR]->[COLOR=#800080]n[/COLOR][[COLOR=#ff8000]2[/COLOR]]; [COLOR=#008000]//Normal 2.[/COLOR][/COLOR]
[COLOR=#008000][COLOR=#000080]currVBOPos[/COLOR][COLOR=#8000ff][[/COLOR][COLOR=#ff8000]7[/COLOR][COLOR=#8000ff]] = [/COLOR][COLOR=#ff8000]0.0[/COLOR][COLOR=#8000ff]f; [/COLOR]//Normal 3. (Dummy).[/COLOR]
[COLOR=#000080]currVBOPos[COLOR=#8000ff][[/COLOR][COLOR=#ff8000]10[/COLOR][COLOR=#8000ff]] = [/COLOR]tmpTan[COLOR=#8000ff].[/COLOR][COLOR=#800080]x[/COLOR][COLOR=#8000ff]; [/COLOR][COLOR=#008000]//Tangent x.[/COLOR][/COLOR]
[COLOR=#000080]currVBOPos[COLOR=#8000ff][[/COLOR][COLOR=#ff8000]11[/COLOR][COLOR=#8000ff]] = [/COLOR]tmpTan[COLOR=#8000ff].[/COLOR][COLOR=#800080]y[/COLOR][COLOR=#8000ff]; [/COLOR][COLOR=#008000]//Tangent y.[/COLOR][/COLOR]
[COLOR=#000080]currVBOPos[COLOR=#8000ff][[/COLOR][COLOR=#ff8000]12[/COLOR][COLOR=#8000ff]] = [/COLOR]tmpTan[COLOR=#8000ff].[/COLOR][COLOR=#800080]z[/COLOR][COLOR=#8000ff]; [/COLOR][COLOR=#008000]//Tangent z.[/COLOR][/COLOR]
[COLOR=#000080]currVBOPos[COLOR=#8000ff][[/COLOR][COLOR=#ff8000]13[/COLOR][COLOR=#8000ff]] = [/COLOR]biNormal[COLOR=#8000ff].[/COLOR][COLOR=#800080]x[/COLOR][COLOR=#8000ff]; [/COLOR][COLOR=#008000]//Binormal x.[/COLOR][/COLOR]
[COLOR=#000080]currVBOPos[COLOR=#8000ff][[/COLOR][COLOR=#ff8000]14[/COLOR][COLOR=#8000ff]] = [/COLOR]biNormal[COLOR=#8000ff].[/COLOR][COLOR=#800080]y[/COLOR][COLOR=#8000ff]; [/COLOR][COLOR=#008000]//Binormal y.[/COLOR][/COLOR]
[COLOR=#000080]currVBOPos[COLOR=#8000ff][[/COLOR][COLOR=#ff8000]15[/COLOR][COLOR=#8000ff]] = [/COLOR]biNormal[COLOR=#8000ff].[/COLOR][COLOR=#800080]z[/COLOR][COLOR=#8000ff]; [/COLOR][COLOR=#008000]//Binormal z.[/COLOR][/COLOR]
[COLOR=#8000ff] } [/COLOR]
[COLOR=#008000]// Creates a new Vertex Buffer Object for Mesh, Normals and TexCoords && Populate it [/COLOR]
[COLOR=#8000ff] glGenBuffersARB( [COLOR=#ff8000]1[/COLOR], &( [COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]V_N_TC_VBO[/COLOR] ) );[/COLOR]
[COLOR=#8000ff] glBindBufferARB( GL_ARRAY_BUFFER_ARB, [COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]V_N_TC_VBO[/COLOR] );[/COLOR]
[COLOR=#8000ff] glBufferDataARB( GL_ARRAY_BUFFER_ARB, ( ( [COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]numVerts[/COLOR] * [COLOR=#ff8000]16[/COLOR] ) * [COLOR=#0000ff]sizeof[/COLOR]( [COLOR=#000080]GLfloat[/COLOR] ) ), [COLOR=#000080]VBOCPU[/COLOR],[/COLOR]
[COLOR=#8000ff] GL_STATIC_DRAW_ARB );[/COLOR]
[COLOR=#008000]// Create a Buffer for the Bone Weights [/COLOR]
[COLOR=#8000ff] glGenBuffersARB( [COLOR=#ff8000]1[/COLOR], &( [COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]BWEIGHT_VBO[/COLOR] ) );[/COLOR]
[COLOR=#8000ff] glBindBufferARB( GL_ARRAY_BUFFER_ARB, [COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]BWEIGHT_VBO[/COLOR] );[/COLOR]
[COLOR=#8000ff] glBufferDataARB( GL_ARRAY_BUFFER_ARB, [COLOR=#0000ff]sizeof[/COLOR]( ddeMath::[COLOR=#000080]vec4[/COLOR] ) * [COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]numVerts[/COLOR], &( [COLOR=#000080]WeightBuffer[/COLOR][[COLOR=#ff8000]0[/COLOR]] ),[/COLOR]
[COLOR=#8000ff] GL_STATIC_DRAW_ARB );[/COLOR]
[COLOR=#008000]// Create a Buffer for the Bone Weights [/COLOR]
[COLOR=#8000ff] glGenBuffersARB( [COLOR=#ff8000]1[/COLOR], &( [COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]BINDEX_VBO[/COLOR] ) );[/COLOR]
[COLOR=#8000ff] glBindBufferARB( GL_ARRAY_BUFFER_ARB, [COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]BINDEX_VBO[/COLOR] );[/COLOR]
[COLOR=#8000ff] glBufferDataARB( GL_ARRAY_BUFFER_ARB, [COLOR=#0000ff]sizeof[/COLOR]( ddeMath::[COLOR=#000080]vec4[/COLOR] ) * [COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]numVerts[/COLOR], &( [COLOR=#000080]BoneIndexBuffer[/COLOR][[COLOR=#ff8000]0[/COLOR]] ),[/COLOR]
[COLOR=#8000ff] GL_STATIC_DRAW_ARB );[/COLOR]
[COLOR=#008000]// Disables VBO Buffer [/COLOR]
[COLOR=#8000ff] glBindBufferARB( GL_ARRAY_BUFFER_ARB, [COLOR=#ff8000]0[/COLOR] );[/COLOR]
[COLOR=#008000]// Also creates a Vertex Buffer Object for the Triagle List [/COLOR]
[COLOR=#8000ff] glGenBuffersARB( [COLOR=#ff8000]1[/COLOR], &( [COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]T_VBO[/COLOR] ) );[/COLOR]
[COLOR=#8000ff] glBindBufferARB( GL_ELEMENT_ARRAY_BUFFER_ARB, [COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]T_VBO[/COLOR] );[/COLOR]
[COLOR=#008000]// At last we Populate the VBO [/COLOR]
[COLOR=#8000ff] glBufferDataARB( GL_ELEMENT_ARRAY_BUFFER_ARB, ( ( [COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]numTris[/COLOR] * [COLOR=#ff8000]3[/COLOR] ) * [COLOR=#0000ff]sizeof[/COLOR]( [COLOR=#000080]GLfloat[/COLOR] ) ),[/COLOR]
[COLOR=#8000ff] [COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]tris[/COLOR], GL_STATIC_DRAW_ARB );[/COLOR]
[COLOR=#008000]// Disables VBO Buffer [/COLOR]
[COLOR=#8000ff] glBindBufferARB( GL_ELEMENT_ARRAY_BUFFER_ARB, [COLOR=#ff8000]0[/COLOR] );[/COLOR]
[COLOR=#0000ff]tempMesh[COLOR=#8000ff]->[/COLOR][COLOR=#800080]isSkinned[/COLOR][COLOR=#8000ff] = [/COLOR]true[COLOR=#8000ff];[/COLOR][/COLOR]
[COLOR=#008000]//CheckError();[/COLOR]
[COLOR=#008000]// Free the temporaries VBOs [/COLOR]
[COLOR=#8000ff] [U]free[/U]( [COLOR=#000080]VBOCPU[/COLOR] ); [/COLOR]
[COLOR=#008000]//TESTING PURPOSE//[/COLOR]
[COLOR=#8000ff] [U]free[/U]( [COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]verts[/COLOR] );[/COLOR]
[COLOR=#8000ff] [U]free[/U]( [COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]tris[/COLOR] );[/COLOR]
[COLOR=#8000ff] [U]free[/U]( [COLOR=#0000ff]tempMesh[/COLOR]->[COLOR=#800080]weights[/COLOR] );[/COLOR]
[COLOR=#008000][COLOR=#8000ff] }[/COLOR]// Only for non skinned meshes[/COLOR]
[COLOR=#008000]//} // for (meshes) [/COLOR]
[COLOR=#8000ff]}[/COLOR]