DebugGrid::DebugGrid(int size, int padding) { const int HALF_SIZE = size / 2; std::vector<float> m_verts; for(int i = -HALF_SIZE; i <= HALF_SIZE; i += padding) { AddToVector(m_verts, -HALF_SIZE, 0.0f, (float)i); AddToVector(m_verts, HALF_SIZE, 0.0f, (float)i); AddToVector(m_verts, (float)i, 0.0f, -HALF_SIZE); AddToVector(m_verts, (float)i, 0.0f, HALF_SIZE); } m_vbo = new VertexBufferObject(m_verts, false, false, CL_LINES); SetColor(Color::Blue); }
void CLoad3DS::ComputeNormals(t3DModel *pModel) { int i; CVector3 vVector1, vVector2, vNormal, vPoly[3]; if(pModel->numOfObjects <= 0) return; for(int index = 0; index < pModel->numOfObjects; index++) { t3DObject *pObject = &(pModel->pObject[index]); pObject->pNormals = new CVector3 [pObject->numOfVerts]; for(i=0; i < pObject->numOfFaces; i++) { unsigned short* pIdx = pObject->pFaces[i].vertIndex; vPoly[0] = pObject->pVerts[pIdx[0]]; vPoly[1] = pObject->pVerts[pIdx[1]]; vPoly[2] = pObject->pVerts[pIdx[2]]; vVector1 = SubVector(vPoly[0], vPoly[1]); vVector2 = SubVector(vPoly[0], vPoly[2]); vNormal = Cross(vVector1, vVector2); Normalize(vNormal); AddToVector(pObject->pNormals[pIdx[0]], vNormal); AddToVector(pObject->pNormals[pIdx[1]], vNormal); AddToVector(pObject->pNormals[pIdx[2]], vNormal); } for (i = 0; i < pObject->numOfVerts; i++) { Normalize(pObject->pNormals[i]); } } }
void DrawQuads() { if(g_DrawVertices->size() < 4 * 3) return; //Create verts to draw triangle std::vector<float> vertices; for(size_t i = 0; i < g_DrawVertices->size(); i += 12) { Vector3Df one((*g_DrawVertices)[i], (*g_DrawVertices)[i + 1], (*g_DrawVertices)[i + 2]); Vector3Df two((*g_DrawVertices)[i + 3], (*g_DrawVertices)[i + 4], (*g_DrawVertices)[i + 5]); Vector3Df three((*g_DrawVertices)[i + 6], (*g_DrawVertices)[i + 7], (*g_DrawVertices)[i + 8]); Vector3Df four((*g_DrawVertices)[i + 9], (*g_DrawVertices)[i + 10], (*g_DrawVertices)[i + 11]); AddToVector(vertices, one); AddToVector(vertices, two); AddToVector(vertices, three); AddToVector(vertices, one); AddToVector(vertices, three); AddToVector(vertices, four); } //Create verts to draw triangle std::vector<float> normals; for(size_t i = 0; i < g_DrawNormals->size(); i += 12) { Vector3Df one((*g_DrawNormals)[i], (*g_DrawNormals)[i + 1], (*g_DrawNormals)[i + 2]); Vector3Df two((*g_DrawNormals)[i + 3], (*g_DrawNormals)[i + 4], (*g_DrawNormals)[i + 5]); Vector3Df three((*g_DrawNormals)[i + 6], (*g_DrawNormals)[i + 7], (*g_DrawNormals)[i + 8]); Vector3Df four((*g_DrawNormals)[i + 9], (*g_DrawNormals)[i + 10], (*g_DrawNormals)[i + 11]); AddToVector(normals, one); AddToVector(normals, two); AddToVector(normals, three); AddToVector(normals, one); AddToVector(normals, three); AddToVector(normals, four); } std::vector<float> texCoord; //Create tex coords to draw triangle if(g_DrawTextureCoords->size() >= 4 * 2) //4 verts * 2 uv { for(size_t i = 0; i < g_DrawTextureCoords->size(); i += 8) { Vector2Df one((*g_DrawTextureCoords)[i], (*g_DrawTextureCoords)[i + 1]); Vector2Df two((*g_DrawTextureCoords)[i + 2], (*g_DrawTextureCoords)[i + 3]); Vector2Df three((*g_DrawTextureCoords)[i + 4], (*g_DrawTextureCoords)[i + 5]); Vector2Df four((*g_DrawTextureCoords)[i + 6], (*g_DrawTextureCoords)[i + 7]); AddToVector(texCoord, one); AddToVector(texCoord, two); AddToVector(texCoord, three); AddToVector(texCoord, one); AddToVector(texCoord, three); AddToVector(texCoord, four); } } DrawTriangles(vertices, texCoord, normals); }