From 1afece81c575c0ec6c87784794ea948661d0afb0 Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Tue, 17 Sep 2013 11:49:50 -0700 Subject: [PATCH] Use quads as well as triangles, apply scale. --- interface/src/avatar/BlendFace.cpp | 18 +++++++++++++----- interface/src/avatar/BlendFace.h | 3 ++- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/interface/src/avatar/BlendFace.cpp b/interface/src/avatar/BlendFace.cpp index 18c948f8cc..901cdba060 100644 --- a/interface/src/avatar/BlendFace.cpp +++ b/interface/src/avatar/BlendFace.cpp @@ -34,7 +34,9 @@ bool BlendFace::render(float alpha) { glm::quat orientation = _owningHead->getOrientation(); glm::vec3 axis = glm::axis(orientation); glRotatef(glm::angle(orientation), axis.x, axis.y, axis.z); - glScalef(_owningHead->getScale(), _owningHead->getScale(), _owningHead->getScale()); + const float MODEL_SCALE = 0.005f; + glScalef(_owningHead->getScale() * MODEL_SCALE, _owningHead->getScale() * MODEL_SCALE, + _owningHead->getScale() * MODEL_SCALE); glColor4f(1.0f, 1.0f, 1.0f, alpha); @@ -49,7 +51,9 @@ bool BlendFace::render(float alpha) { glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _iboID); - glDrawRangeElementsEXT(GL_TRIANGLES, 0, _baseVertices.size() - 1, _indexCount, GL_UNSIGNED_INT, 0); + glDrawRangeElementsEXT(GL_QUADS, 0, _baseVertices.size() - 1, _quadIndexCount, GL_UNSIGNED_INT, 0); + glDrawRangeElementsEXT(GL_TRIANGLES, 0, _baseVertices.size() - 1, _triangleIndexCount, GL_UNSIGNED_INT, + (void*)(_quadIndexCount * sizeof(int))); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); @@ -80,15 +84,19 @@ void BlendFace::setRig(const fsMsgRig& rig) { glGenBuffers(1, &_vboID); } glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _iboID); - glBufferData(GL_ELEMENT_ARRAY_BUFFER, rig.mesh().m_tris.size() * sizeof(fsVector3i), - rig.mesh().m_tris.data(), GL_STATIC_DRAW); + glBufferData(GL_ELEMENT_ARRAY_BUFFER, rig.mesh().m_quads.size() * sizeof(fsVector4i) + + rig.mesh().m_tris.size() * sizeof(fsVector3i), NULL, GL_STATIC_DRAW); + glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 0, rig.mesh().m_quads.size() * sizeof(fsVector4i), rig.mesh().m_quads.data()); + glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, rig.mesh().m_quads.size() * sizeof(fsVector4i), + rig.mesh().m_tris.size() * sizeof(fsVector3i), rig.mesh().m_tris.data()); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); glBindBuffer(GL_ARRAY_BUFFER, _vboID); glBufferData(GL_ARRAY_BUFFER, rig.mesh().m_vertex_data.m_vertices.size() * sizeof(fsVector3f), NULL, GL_DYNAMIC_DRAW); glBindBuffer(GL_ARRAY_BUFFER, 0); - _indexCount = rig.mesh().m_tris.size() * 3; + _quadIndexCount = rig.mesh().m_quads.size() * 4; + _triangleIndexCount = rig.mesh().m_tris.size() * 3; _baseVertices = rig.mesh().m_vertex_data.m_vertices; _blendshapes = rig.blendshapes(); } diff --git a/interface/src/avatar/BlendFace.h b/interface/src/avatar/BlendFace.h index 9385cf4e0b..bcc0689b72 100644 --- a/interface/src/avatar/BlendFace.h +++ b/interface/src/avatar/BlendFace.h @@ -39,7 +39,8 @@ private: GLuint _iboID; GLuint _vboID; - GLsizei _indexCount; + GLsizei _quadIndexCount; + GLsizei _triangleIndexCount; std::vector _baseVertices; std::vector _blendshapes; };