//-------------------------------------------------------------- void ofVboMesh::update(){ if(meshElement->haveVertsChanged()){ setupVertices(drawType); //vbo.updateVertexData(meshElement->getVerticesPointer(), meshElement->getNumVertices()); } if(meshElement->haveColorsChanged()){ setupColors(drawType); //vbo.updateColorData(meshElement->getColorsPointer(), meshElement->getNumColors()); } if(meshElement->haveNormalsChanged()){ setupNormals(drawType); //vbo.updateNormalData(meshElement->getNormalsPointer(), meshElement->getNumNormals()); } if(meshElement->haveTexCoordsChanged()){ setupTexCoords(drawType); //vbo.updateTexCoordData(meshElement->getTexCoordsPointer(), meshElement->getNumTexCoords()); } if(meshElement->haveIndicesChanged() && bUseIndices){ setupIndices(drawType); //vbo.setIndexData(meshElement->getIndexPointer(),meshElement->getNumIndices()); //vbo.updateIndexData(meshElement->getIndexPointer(),meshElement->getNumIndices()); } }
//-------------------------------------------------------------- void ofVboMesh::draw(polyMode pMode){ if(!vbo.getIsAllocated()){ setupVertices(drawType); } if(meshElement->getNumColors() && !vbo.getUsingColors()){ setupColors(drawType); } if(meshElement->getNumNormals() && !vbo.getUsingNormals()){ setupNormals(drawType); } if(meshElement->getNumTexCoords() && !vbo.getUsingTexCoords()){ setupTexCoords(drawType); } if(!meshElement->getNumIndices()){ meshElement->setupIndices(); } update(); glPushAttrib(GL_POLYGON_BIT); glPolygonMode(GL_FRONT_AND_BACK, pMode); GLuint mode = ofGetGLTriangleMode(meshElement->getMode()); if(pMode!=OF_MESH_POINTS){ if(bUseIndices){ cout << meshElement->getNumIndices() << endl; vbo.drawElements(mode,meshElement->getNumIndices()); }else{ vbo.draw(mode,0,meshElement->getNumVertices()); } }else{ //no indices needed for just drawing verts as points vbo.draw(GL_POINTS,0,meshElement->getNumVertices()); } glPopAttrib(); }
void CF_Slices::render(double t, uint oldImageID, uint newImageID) { setupTexCoords(); glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); gluPerspective(90.0, 1.0, 0.1, 100.0); glMatrixMode(GL_MODELVIEW); glPushMatrix(); glLoadIdentity(); gluLookAt(0.0, 0.0, -1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); glClearColor(0.0, 0.0, 0.0, 1.0); glClear(GL_COLOR_BUFFER_BIT); glEnable(GL_TEXTURE_2D); glEnable(GL_CULL_FACE); const int n = 20; double x = 1.0 - 1.0 / n; int tex = screenSize.x / n; for(int i = 0; i < n; i++, x -= 2.0 / n) { double angle = clamp((180.0 + (n - 1) * 10.0) * t - i * 10.0, 0.0, 180.0); glPushMatrix(); glTranslated(x, 0.0, 0.0); glRotated(angle, 0.0, 1.0, 0.0); glScaled(1.0 / n, 1.0, 1.0); // vordere Seite zeichnen glBindTexture(GL_TEXTURE_2D, oldImageID); glBegin(GL_QUADS); double c = 1.0 - angle / 180.0; glColor4d(c, c, c, 1.0); glTexCoord2i(i * tex + tex, 0); glVertex3i(-1, 1, 0); glTexCoord2i(i * tex, 0); glVertex3i(1, 1, 0); glTexCoord2i(i * tex, screenSize.y); glVertex3i(1, -1, 0); glTexCoord2i(i * tex + tex, screenSize.y); glVertex3i(-1, -1, 0); glEnd(); // hintere Seite zeichnen glRotated(180.0, 0.0, 1.0, 0.0); glBindTexture(GL_TEXTURE_2D, newImageID); glBegin(GL_QUADS); c = angle / 180.0; glColor4d(c, c, c, 1.0); glTexCoord2i(i * tex + tex, 0); glVertex3i(-1, 1, 0); glTexCoord2i(i * tex, 0); glVertex3i(1, 1, 0); glTexCoord2i(i * tex, screenSize.y); glVertex3i(1, -1, 0); glTexCoord2i(i * tex + tex, screenSize.y); glVertex3i(-1, -1, 0); glEnd(); glPopMatrix(); } glDisable(GL_TEXTURE_2D); glDisable(GL_CULL_FACE); glPopMatrix(); glMatrixMode(GL_PROJECTION); glPopMatrix(); glMatrixMode(GL_MODELVIEW); }