From 85ab9b75766b86ee2ec4b77f151b931f91abfdb6 Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Wed, 25 Sep 2013 11:35:02 -0700 Subject: [PATCH] Use the texture coordinates when rendering the eyes. --- interface/src/avatar/BlendFace.cpp | 11 +++++++++-- interface/src/renderer/FBXReader.cpp | 2 +- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/interface/src/avatar/BlendFace.cpp b/interface/src/avatar/BlendFace.cpp index d25009f40f..f7da86447e 100644 --- a/interface/src/avatar/BlendFace.cpp +++ b/interface/src/avatar/BlendFace.cpp @@ -69,6 +69,9 @@ bool BlendFace::render(float alpha) { glm::vec3 rotationAxis = glm::axis(rotation); glRotatef(glm::angle(rotation), rotationAxis.x, rotationAxis.y, rotationAxis.z); glTranslatef(-mesh.pivot.x, -mesh.pivot.y, -mesh.pivot.z); + + // use texture coordinates only for the eye, for now + glEnableClientState(GL_TEXTURE_COORD_ARRAY); } // all meshes after the first are white @@ -107,11 +110,13 @@ bool BlendFace::render(float alpha) { glVertexPointer(3, GL_FLOAT, 0, 0); glNormalPointer(GL_FLOAT, 0, (void*)(vertexCount * sizeof(glm::vec3))); + glTexCoordPointer(2, GL_FLOAT, 0, (void*)(vertexCount * 2 * sizeof(glm::vec3))); glDrawRangeElementsEXT(GL_QUADS, 0, vertexCount - 1, mesh.quadIndices.size(), GL_UNSIGNED_INT, 0); glDrawRangeElementsEXT(GL_TRIANGLES, 0, vertexCount - 1, mesh.triangleIndices.size(), GL_UNSIGNED_INT, (void*)(mesh.quadIndices.size() * sizeof(int))); if (mesh.isEye) { + glDisableClientState(GL_TEXTURE_COORD_ARRAY); glPopMatrix(); } } @@ -213,11 +218,13 @@ void BlendFace::setGeometry(const FBXGeometry& geometry) { glBindBuffer(GL_ARRAY_BUFFER, ids.second); if (mesh.blendshapes.isEmpty()) { - glBufferData(GL_ARRAY_BUFFER, (mesh.vertices.size() + mesh.normals.size()) * sizeof(glm::vec3), - NULL, GL_STATIC_DRAW); + glBufferData(GL_ARRAY_BUFFER, (mesh.vertices.size() + mesh.normals.size()) * sizeof(glm::vec3) + + mesh.texCoords.size() * sizeof(glm::vec2), NULL, GL_STATIC_DRAW); glBufferSubData(GL_ARRAY_BUFFER, 0, mesh.vertices.size() * sizeof(glm::vec3), mesh.vertices.constData()); glBufferSubData(GL_ARRAY_BUFFER, mesh.vertices.size() * sizeof(glm::vec3), mesh.normals.size() * sizeof(glm::vec3), mesh.normals.constData()); + glBufferSubData(GL_ARRAY_BUFFER, (mesh.vertices.size() + mesh.normals.size()) * sizeof(glm::vec3), + mesh.texCoords.size() * sizeof(glm::vec2), mesh.texCoords.constData()); } else { glBufferData(GL_ARRAY_BUFFER, (mesh.vertices.size() + mesh.normals.size()) * sizeof(glm::vec3), diff --git a/interface/src/renderer/FBXReader.cpp b/interface/src/renderer/FBXReader.cpp index a35812dc5f..c8472ade9e 100644 --- a/interface/src/renderer/FBXReader.cpp +++ b/interface/src/renderer/FBXReader.cpp @@ -310,7 +310,7 @@ FBXGeometry extractFBXGeometry(const FBXNode& node) { normals = createVec3Vector(subdata.properties.at(0).value >()); } } - } else if (data.name == "LayerElementUV") { + } else if (data.name == "LayerElementUV" && data.properties.at(0).toInt() == 0) { QVector texCoords; QVector indices; foreach (const FBXNode& subdata, data.children) {