// Funcao que desenha um quadro. void drawFrame(GLuint frameTexture, GLuint pictureTexture) { glColor3f(1.0f,1.0f,1.0f); // Face frontal do quadro: glPushMatrix(); glTranslatef(75,20, 248); // Faz translate para o local pretendido. glRotatef(-180, 0,1,0); // Roda o objecto em torno dos yy. drawQuads(pictureTexture, 150, 100); glPopMatrix(); // Face de tras do quadro: //glPushMatrix(); //glTranslatef(0,70, 250); // Faz translate para o local pretendido. //glTranslatef(-75,-50, 0); // Faz translate para a origem. //drawQuads(frameTexture, 150, 100); //glPopMatrix(); // Faces Laterais: // Lateral direita glPushMatrix(); glTranslatef(0,70, 250); // Faz translate para o local pretendido. glTranslatef(75,0.0, -1.0); // Faz translate para o local correto glRotatef(90, 0,1,0); // Roda o objecto em torno dos yy. glTranslatef(-1,-50, 0.0); // Faz translate para a origem. drawQuads(frameTexture, 2, 100); glPopMatrix(); // Lateral esquerda glPushMatrix(); glTranslatef(0,70, 250); // Faz translate para o local pretendido. glTranslatef(-75,0.0, -1.0); // Faz translate para o local correto glRotatef(-90, 0,1,0); // Roda o objecto em torno dos yy. glTranslatef(-1,-50, 0.0); // Faz translate para a origem. drawQuads(frameTexture, 2, 100); glPopMatrix(); // Lateral superior glPushMatrix(); glTranslatef(0,70, 250); // Faz translate para o local pretendido. glTranslatef(0,50.0, -1.0); // Faz translate para o local correto glRotatef(-90, 1,0,0); // Roda o objecto em torno dos xx. glTranslatef(-75,-1, 0.0); // Faz translate para a origem. drawQuads(frameTexture, 150, 2); glPopMatrix(); // Lateral inferior glPushMatrix(); glTranslatef(0,70, 250); // Faz translate para o local pretendido. glTranslatef(0,-50.0, -1.0); // Faz translate para o local correto glRotatef(90, 1,0,0); // Roda o objecto em torno dos xx. glTranslatef(-75,-1, 0.0); // Faz translate para a origem. drawQuads(frameTexture, 150, 2); glPopMatrix(); }
void GLWidget::paintGL() { glClearColor(1.0, 1.0, 0.0, 1.0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); switch (type) { case 0: drawPoints() ; break; case 1: drawLines(); break; case 2: drawLineStrip(); break; case 3: drawLineLoop(); break; case 4: drawTriangles(); break; case 5: drawTriangleStrip(); break; case 6: drawTriangleFan(); break; case 7: drawQuads(); break; case 8: drawQuadStrip(); break; case 9: drawPolygons(); break; default: break; } }
int SubdivScene::select(int x, int y, int width, int height, float fovy, Face* f) { GLuint buffer[SELECT_BUFFER_SIZE]; glSelectBuffer(SELECT_BUFFER_SIZE, buffer); glRenderMode(GL_SELECT); glInitNames(); GLint viewport[4]; glGetIntegerv(GL_VIEWPORT, (GLint*) &viewport); glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); gluPickMatrix(x,y, 2, 2, (GLint*) &viewport); gluPerspective(fovy, (GLfloat) width/height, 0.01, 100.0); glMatrixMode(GL_MODELVIEW); glPushName(0); //draw the scene we will select from if (f) drawQuads(f); else drawHDS(true); glMatrixMode(GL_PROJECTION); glPopMatrix(); glMatrixMode(GL_MODELVIEW); const GLuint hitlist = glRenderMode(GL_RENDER); return processHits(hitlist, buffer); }
void GPUVolRTV0::raycasting_pass() { glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, final_image, 0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glUseProgram(shaderprog); glUniform1f(stepsizeLoc, stepsize); glUniformMatrix4fv(mvLoc, 1, GL_FALSE, mModelView); glUniformMatrix4fv(mpLoc, 1, GL_FALSE, mProj); set_tex_param(texLoc, backface_buffer, shaderprog, GL_TEXTURE0, GL_TEXTURE_2D); set_tex_param(volumeTexLoc, volume_texture, shaderprog, GL_TEXTURE1, GL_TEXTURE_3D); glEnable(GL_CULL_FACE); glCullFace(GL_BACK); drawQuads(1.0,1.0, 1.0); glDisable(GL_CULL_FACE); glUseProgram(0); }
// render the backface to the offscreen buffer backface_buffer void GPUVolRTV0::render_backface() { glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, backface_buffer, 0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glEnable(GL_CULL_FACE); glCullFace(GL_FRONT); drawQuads(1.0,1.0, 1.0); glDisable(GL_CULL_FACE); }
// render the backface to the offscreen buffer backFaceBuffer void renderBackFace(void){ glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, backFaceBuffer, 0); glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT ); glEnable(GL_CULL_FACE); glCullFace(GL_FRONT); glMatrixMode(GL_MODELVIEW); glScalef(ProportionalScale[1],ProportionalScale[2],ProportionalScale[3]); drawQuads(1.0,1.0,1.0); glDisable(GL_CULL_FACE); }
// Funcao que desenha uma carpete. 120x88 void drawCarpet(GLuint carpetTexture) { // Carpete: glPushMatrix(); glColor3f(1.0f,1.0f,1.0f); glTranslatef(0,-79.9, -200); // Faz translate para o local pretendido. glRotatef(-90, 1, 0, 0); // Roda o objecto -90 graus em torno dos xx. glTranslatef(-60,-44, 0); // Faz translate para a origem. drawQuads(carpetTexture, 120, 88); glPopMatrix(); }
//------------------------------------------------------------------------------ void QSceneTextureBatch::draw(void) { // Optimization: Fast Dispatch if (getTotalQuads() == 0) return; // Set shaders and states m_FirstSprite->drawSetup(); // Draw all quads in batch drawQuads(); }
// Funcao que desenha o tabuleiro do jogo do galo. void drawGameBoard(GLuint upperFaceTexture, GLuint otherFacesTexture) { glColor3f(1.0f,1.0f,1.0f); // Face Superior: glPushMatrix(); glTranslatef(0,1, 0); // Faz translate para o local pretendido. glRotatef(-90, 1, 0, 0); // Roda o objecto -90 graus em torno dos xx. glTranslatef(-20,-16, 0); // Faz translate para a origem. drawQuads(upperFaceTexture, 40, 32); glPopMatrix(); // Faces Laterais: // Frontal: glPushMatrix(); glTranslatef(-20,-1, 16); // Faz translate para o local pretendido. drawQuads(otherFacesTexture, 40, 2); glPopMatrix(); // Traseira: glPushMatrix(); glTranslatef(20,-1, -16); // Faz translate para o local pretendido. glRotatef(180, 0, 1,0); // Rotacao 180graus yy. drawQuads(otherFacesTexture, 40, 2); glPopMatrix(); // Direita: glPushMatrix(); glTranslatef(20,-1, 16); // Faz translate para o local pretendido. glRotatef(90, 0, 1,0); // Rotacao 90graus yy. drawQuads(otherFacesTexture, 32, 2); glPopMatrix(); // Esquerda: glPushMatrix(); glTranslatef(-20,-1, -16); // Faz translate para o local pretendido. glRotatef(-90, 0, 1,0); // Rotacao 90graus yy. drawQuads(otherFacesTexture, 32, 2); glPopMatrix(); }
void rayCasting(void){ glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, finalImage, 0); glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT ); // backFaceBuffer -> texture0 glActiveTexture( GL_TEXTURE0 ); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, backFaceBuffer); //gradientTexture -> texture1 glActiveTexture( GL_TEXTURE1 ); //glEnable(GL_TEXTURE_3D); glBindTexture(GL_TEXTURE_3D,gradientTexture3D); //TransferTexture -> texture2 glActiveTexture(GL_TEXTURE2); glBindTexture(GL_TEXTURE_1D, TransferTexture); //intensityTexture -> texture3 glActiveTexture( GL_TEXTURE3 ); glBindTexture(GL_TEXTURE_3D,intensityTexture3D); glUseProgram(glslprogram); uniform1f( "stepSize", stepSize ); uniform1f( "viewWidth", WINDOW_WIDTH ); uniform1f( "viewHeight", WINDOW_HEIGHT ); uniform1i( "backFace", 0 ); // backFaceBuffer -> texture0 uniform1i( "gradientVol", 1 ); // gradientTexture -> texture2 uniform1i( "intensityVol", 3 ); uniform1i( "showGradient",showGradient); uniform1i( "TransferTexture",2); uniform1f( "edgeThresh", edgeThresh ); uniform1f( "edgeExp", edgeExp ); uniform1f( "DitherRay", DitherRay ); uniform1f( "boundExp", boundExp ); uniform3fv("clearColor",ClearColor[1],ClearColor[2],ClearColor[3]); uniform1f( "isRGBA", true); glEnable(GL_CULL_FACE); glCullFace(GL_BACK); glMatrixMode(GL_MODELVIEW); glScalef(1,1,1); drawQuads(1.0,1.0,1.0); glDisable(GL_CULL_FACE); glUseProgram(0); //glActiveTexture( GL_TEXTURE1 ); //glDisable(GL_TEXTURE_3D); glActiveTexture( GL_TEXTURE0 ); glDisable(GL_TEXTURE_2D); }
static GLvoid drawScene(ModeInfo * mi) { pulsarstruct *gp = &Pulsar[MI_SCREEN(mi)]; /* check_gl_error ("drawScene"); */ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); /* we have to do this here because the FPS meter turns these 3 features off!! */ { if (do_light) { glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); } if (do_texture) { glEnable(GL_TEXTURE_2D); } if (do_blend) { glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); } } resetProjection(); /* use XYZ scaling factors to change the size of the pulsar */ glScalef(gp->scale_x, gp->scale_y, gp->scale_z); drawQuads(gp); mi->polygon_count = num_quads; /* update the scaling factors- cyclic */ gp->scale_x = cos(gp->frame/360.)*10.; gp->scale_y = sin(gp->frame/360.)*10.; gp->scale_z = 1; /* increment frame-counter */ gp->frame++; /* check_gl_error ("drawScene"); */ }
void drawer_t::drawLists( void ) { if ( ! head ) return; tessellation_t * tes = head; do { switch ( tes->type ) { case DT_QUADS: drawQuads( tes ); break; case DT_TRIANGLES: drawTriangles( tes ); break; } tes = tes->next; } while ( tes ); }
// Funcao que desenha um cubo de gelo. void drawIceCube(GLuint cubeTexture) { // Face Superior: glPushMatrix(); glTranslatef(-35,-1, 35); // Faz translate para o local pretendido. glRotatef(-90, 1, 0, 0); // Roda o objecto 90 graus em torno dos xx. drawQuads(cubeTexture, 70, 70); glPopMatrix(); // Face Inferior: glPushMatrix(); glTranslatef(-35,-21, -35); // Faz translate para o local pretendido. glRotatef(90, 1, 0, 0); // Roda o objecto 90 graus em torno dos xx. drawQuads(cubeTexture, 70, 70); glPopMatrix(); // Faces laterais: // Frontal glPushMatrix(); glTranslatef(-35,-21, 35); // Faz translate para o local pretendido. drawQuads(cubeTexture, 70, 20); glPopMatrix(); // Traseira glPushMatrix(); glTranslatef(35,-21, -35); // Faz translate para o local pretendido. glRotatef(180, 0, 1, 0); // Roda o objecto 90 graus em torno dos yy. drawQuads(cubeTexture, 70, 20); glPopMatrix(); // Direita glPushMatrix(); glTranslatef(35,-21, 35); // Faz translate para o local pretendido. glRotatef(90, 0, 1, 0); // Roda o objecto 90 graus em torno dos yy. drawQuads(cubeTexture, 70, 20); glPopMatrix(); // Esquerda glPushMatrix(); glTranslatef(-35,-21, -35); // Faz translate para o local pretendido. glRotatef(-90, 0, 1, 0); // Roda o objecto -90 graus em torno dos yy. drawQuads(cubeTexture, 70, 20); glPopMatrix(); }
void MyGLImageViewer::drawFCVisualization(GLuint *texVBO, GLuint shaderProg, int windowWidth, int windowHeight, VRParams params) { glUseProgram(shaderProg); drawQuads(1.0f/params.scaleWidth, 1.0f/params.scaleHeight, 1.0f/params.scaleDepth); GLuint texLoc = glGetUniformLocation(shaderProg, "position"); glUniform1i(texLoc, 8); glActiveTexture(GL_TEXTURE8); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, texVBO[params.positionTextureIndex]); texLoc = glGetUniformLocation(shaderProg, "normal"); glUniform1i(texLoc, 9); glActiveTexture(GL_TEXTURE9); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, texVBO[params.normalTextureIndex]); texLoc = glGetUniformLocation(shaderProg, "curvature"); glUniform1i(texLoc, 10); glActiveTexture(GL_TEXTURE10); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, texVBO[params.curvatureTextureIndex]); texLoc = glGetUniformLocation(shaderProg, "focusLayer"); glUniform1i(texLoc, 11); glActiveTexture(GL_TEXTURE11); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, texVBO[params.focusTextureIndex]); texLoc = glGetUniformLocation(shaderProg, "contextLayer"); glUniform1i(texLoc, 12); glActiveTexture(GL_TEXTURE12); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, texVBO[params.contextTextureIndex]); texLoc = glGetUniformLocation(shaderProg, "focusPoint"); glUniform2f(texLoc, params.focusPoint[0], params.focusPoint[1]); texLoc = glGetUniformLocation(shaderProg, "focusRadius"); glUniform1f(texLoc, params.focusRadius); texLoc = glGetUniformLocation(shaderProg, "windowWidth"); glUniform1i(texLoc, windowWidth); texLoc = glGetUniformLocation(shaderProg, "windowHeight"); glUniform1i(texLoc, windowHeight); glUseProgram(0); glActiveTexture(GL_TEXTURE8); glDisable(GL_TEXTURE_2D); glActiveTexture(GL_TEXTURE9); glDisable(GL_TEXTURE_2D); glActiveTexture(GL_TEXTURE10); glDisable(GL_TEXTURE_2D); glActiveTexture(GL_TEXTURE11); glDisable(GL_TEXTURE_2D); glActiveTexture(GL_TEXTURE12); glDisable(GL_TEXTURE_2D); }
void MyGLImageViewer::draw3DTexture(GLuint *texVBO, float *rot, float *trans, GLuint shaderProg, int windowWidth, int windowHeight, VRParams params) { glUseProgram(shaderProg); GLuint texLoc = glGetUniformLocation(shaderProg, "volume"); glUniform1i(texLoc, 7); glActiveTexture(GL_TEXTURE7); glEnable(GL_TEXTURE_3D); glBindTexture(GL_TEXTURE_3D, texVBO[params.volumeTextureIndex]); glActiveTexture(GL_TEXTURE7); glMatrixMode(GL_TEXTURE); glLoadIdentity(); texLoc = glGetUniformLocation(shaderProg, "minMaxOctree"); glUniform1i(texLoc, 2); glActiveTexture(GL_TEXTURE2); glEnable(GL_TEXTURE_3D); glBindTexture(GL_TEXTURE_3D, texVBO[params.minMaxOctreeTextureIndex]); if(params.stepSize >= 0) { GLuint texLoc = glGetUniformLocation(shaderProg, "stepSize"); glUniform1f(texLoc, params.stepSize); texLoc = glGetUniformLocation(shaderProg, "earlyRayTerminationThreshold"); glUniform1f(texLoc, params.earlyRayTerminationThreshold); texLoc = glGetUniformLocation(shaderProg, "camera"); glUniform3f(texLoc, 0, 0, 3); texLoc = glGetUniformLocation(shaderProg, "kt"); glUniform1f(texLoc, params.kt); texLoc = glGetUniformLocation(shaderProg, "ks"); glUniform1f(texLoc, params.ks); if(params.stochasticJithering) { texLoc = glGetUniformLocation(shaderProg, "stochasticJithering"); glUniform1i(texLoc, 1); } else { texLoc = glGetUniformLocation(shaderProg, "stochasticJithering"); glUniform1i(texLoc, 0); } if(params.triCubicInterpolation) { texLoc = glGetUniformLocation(shaderProg, "triCubicInterpolation"); glUniform1i(texLoc, 1); } else { texLoc = glGetUniformLocation(shaderProg, "triCubicInterpolation"); glUniform1i(texLoc, 0); } if(params.MIP) { texLoc = glGetUniformLocation(shaderProg, "MIP"); glUniform1i(texLoc, 1); } else { texLoc = glGetUniformLocation(shaderProg, "MIP"); glUniform1i(texLoc, 0); } if(params.gradientByForwardDifferences) { texLoc = glGetUniformLocation(shaderProg, "forwardDifference"); glUniform1i(texLoc, 1); } else { texLoc = glGetUniformLocation(shaderProg, "forwardDifference"); glUniform1i(texLoc, 0); } if(params.FCVisualization) { texLoc = glGetUniformLocation(shaderProg, "FCVisualization"); glUniform1i(texLoc, 1); } else { texLoc = glGetUniformLocation(shaderProg, "FCVisualization"); glUniform1i(texLoc, 0); } texLoc = glGetUniformLocation(shaderProg, "clippingPlane"); glUniform1i(texLoc, (int)params.clippingPlane); texLoc = glGetUniformLocation(shaderProg, "inverseClipping"); glUniform1i(texLoc, (int)params.inverseClipping); texLoc = glGetUniformLocation(shaderProg, "clippingOcclusion"); glUniform1i(texLoc, (int)params.clippingOcclusion); texLoc = glGetUniformLocation(shaderProg, "clippingPlaneLeftX"); glUniform1f(texLoc, params.clippingPlaneLeftX); texLoc = glGetUniformLocation(shaderProg, "clippingPlaneRightX"); glUniform1f(texLoc, params.clippingPlaneRightX); texLoc = glGetUniformLocation(shaderProg, "clippingPlaneUpY"); glUniform1f(texLoc, params.clippingPlaneUpY); texLoc = glGetUniformLocation(shaderProg, "clippingPlaneDownY"); glUniform1f(texLoc, params.clippingPlaneDownY); texLoc = glGetUniformLocation(shaderProg, "clippingPlaneFrontZ"); glUniform1f(texLoc, params.clippingPlaneFrontZ); texLoc = glGetUniformLocation(shaderProg, "clippingPlaneBackZ"); glUniform1f(texLoc, params.clippingPlaneBackZ); texLoc = glGetUniformLocation(shaderProg, "isosurfaceThreshold"); glUniform1f(texLoc, params.isoSurfaceThreshold); texLoc = glGetUniformLocation(shaderProg, "windowWidth"); glUniform1i(texLoc, windowWidth); texLoc = glGetUniformLocation(shaderProg, "windowHeight"); glUniform1i(texLoc, windowHeight); } drawQuads(1.0f/params.scaleWidth, 1.0f/params.scaleHeight, 1.0f/params.scaleDepth); texLoc = glGetUniformLocation(shaderProg, "transferFunction"); glUniform1i(texLoc, 1); glActiveTexture(GL_TEXTURE1); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, texVBO[params.transferFunctionTextureIndex]); texLoc = glGetUniformLocation(shaderProg, "noise"); glUniform1i(texLoc, 3); glActiveTexture(GL_TEXTURE3); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, texVBO[params.noiseTextureIndex]); texLoc = glGetUniformLocation(shaderProg, "backFrameBuffer"); glUniform1i(texLoc, 5); glActiveTexture(GL_TEXTURE5); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, texVBO[params.backQuadTextureIndex]); texLoc = glGetUniformLocation(shaderProg, "frontFrameBuffer"); glUniform1i(texLoc, 6); glActiveTexture(GL_TEXTURE6); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, texVBO[params.frontQuadTextureIndex]); if(params.FCVisualization) { texLoc = glGetUniformLocation(shaderProg, "positionBuffer"); glUniform1i(texLoc, 8); glActiveTexture(GL_TEXTURE8); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, texVBO[params.positionTextureIndex]); texLoc = glGetUniformLocation(shaderProg, "normalBuffer"); glUniform1i(texLoc, 9); glActiveTexture(GL_TEXTURE9); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, texVBO[params.normalTextureIndex]); } glUseProgram(0); glActiveTexture(GL_TEXTURE1); glDisable(GL_TEXTURE_2D); glActiveTexture(GL_TEXTURE2); glDisable(GL_TEXTURE_3D); glActiveTexture(GL_TEXTURE3); glDisable(GL_TEXTURE_2D); glActiveTexture(GL_TEXTURE5); glDisable(GL_TEXTURE_2D); glActiveTexture(GL_TEXTURE6); glDisable(GL_TEXTURE_2D); glActiveTexture(GL_TEXTURE7); glDisable(GL_TEXTURE_3D); if(params.FCVisualization) { glActiveTexture(GL_TEXTURE8); glDisable(GL_TEXTURE_2D); glActiveTexture(GL_TEXTURE9); glDisable(GL_TEXTURE_2D); } }
void MyGLImageViewer::draw3DTexture(GLuint *texVBO, int index, int octreeIndex, float *rot, float *trans, GLuint shaderProg, int windowWidth, int windowHeight, VRParams params, int TFIndex) { glUseProgram(shaderProg); GLuint texLoc = glGetUniformLocation(shaderProg, "volume"); glUniform1i(texLoc, 7); glActiveTexture(GL_TEXTURE7); glEnable(GL_TEXTURE_3D); glBindTexture(GL_TEXTURE_3D, texVBO[index]); glActiveTexture(GL_TEXTURE7); glMatrixMode(GL_TEXTURE); glLoadIdentity(); texLoc = glGetUniformLocation(shaderProg, "minMaxOctree"); glUniform1i(texLoc, 2); glActiveTexture(GL_TEXTURE2); glEnable(GL_TEXTURE_3D); glBindTexture(GL_TEXTURE_3D, texVBO[octreeIndex]); if(params.stepSize >= 0) { GLuint texLoc = glGetUniformLocation(shaderProg, "stepSize"); glUniform1f(texLoc, params.stepSize); texLoc = glGetUniformLocation(shaderProg, "earlyRayTerminationThreshold"); glUniform1f(texLoc, params.earlyRayTerminationThreshold); texLoc = glGetUniformLocation(shaderProg, "camera"); glUniform3f(texLoc, 0, 0, 3); texLoc = glGetUniformLocation(shaderProg, "kt"); glUniform1f(texLoc, params.kt); texLoc = glGetUniformLocation(shaderProg, "ks"); glUniform1f(texLoc, params.ks); if(params.stochasticJithering) { texLoc = glGetUniformLocation(shaderProg, "stochasticJithering"); glUniform1i(texLoc, 1); } else { texLoc = glGetUniformLocation(shaderProg, "stochasticJithering"); glUniform1i(texLoc, 0); } if(params.triCubicInterpolation) { texLoc = glGetUniformLocation(shaderProg, "triCubicInterpolation"); glUniform1i(texLoc, 1); } else { texLoc = glGetUniformLocation(shaderProg, "triCubicInterpolation"); glUniform1i(texLoc, 0); } if(params.MIP) { texLoc = glGetUniformLocation(shaderProg, "MIP"); glUniform1i(texLoc, 1); } else { texLoc = glGetUniformLocation(shaderProg, "MIP"); glUniform1i(texLoc, 0); } if(params.gradientByForwardDifferences) { texLoc = glGetUniformLocation(shaderProg, "forwardDifference"); glUniform1i(texLoc, 1); } else { texLoc = glGetUniformLocation(shaderProg, "forwardDifference"); glUniform1i(texLoc, 0); } texLoc = glGetUniformLocation(shaderProg, "isosurfaceThreshold"); glUniform1f(texLoc, params.isoSurfaceThreshold); texLoc = glGetUniformLocation(shaderProg, "windowWidth"); glUniform1i(texLoc, 640); texLoc = glGetUniformLocation(shaderProg, "windowHeight"); glUniform1i(texLoc, 480); } drawQuads(1.0f/params.scaleWidth, 1.0f/params.scaleHeight, 1.0f/params.scaleDepth); texLoc = glGetUniformLocation(shaderProg, "transferFunction"); glUniform1i(texLoc, 1); glActiveTexture(GL_TEXTURE1); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, texVBO[1]); texLoc = glGetUniformLocation(shaderProg, "noise"); glUniform1i(texLoc, 3); glActiveTexture(GL_TEXTURE3); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, texVBO[3]); texLoc = glGetUniformLocation(shaderProg, "backFrameBuffer"); glUniform1i(texLoc, 5); glActiveTexture(GL_TEXTURE5); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, texVBO[5]); texLoc = glGetUniformLocation(shaderProg, "frontFrameBuffer"); glUniform1i(texLoc, 6); glActiveTexture(GL_TEXTURE6); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, texVBO[6]); glUseProgram(0); glActiveTexture(GL_TEXTURE1); glDisable(GL_TEXTURE_2D); glActiveTexture(GL_TEXTURE2); glDisable(GL_TEXTURE_3D); glActiveTexture(GL_TEXTURE3); glDisable(GL_TEXTURE_2D); glActiveTexture(GL_TEXTURE5); glDisable(GL_TEXTURE_2D); glActiveTexture(GL_TEXTURE6); glDisable(GL_TEXTURE_2D); glActiveTexture(GL_TEXTURE7); glDisable(GL_TEXTURE_3D); }
// Funcao que desenha a mesa. void drawTable(GLuint tableTexture) { glColor3f(1.0f,1.0f,1.0f); // Face Superior: glPushMatrix(); glTranslatef(-65,-1, 35); // Faz translate para o local pretendido. glRotatef(-90, 1, 0, 0); // Roda o objecto 90 graus em torno dos xx. drawQuads(tableTexture, 130, 70); glPopMatrix(); // Face Inferior: glPushMatrix(); glTranslatef(-65,-4, -35); // Faz translate para o local pretendido. glRotatef(90, 1, 0, 0); // Roda o objecto 90 graus em torno dos xx. drawQuads(tableTexture, 130, 70); glPopMatrix(); // Faces laterais: // Frontal glPushMatrix(); glTranslatef(-65,-4, 35); // Faz translate para o local pretendido. drawQuads(tableTexture, 130, 3); glPopMatrix(); // Traseira glPushMatrix(); glTranslatef(65,-4, -35); // Faz translate para o local pretendido. glRotatef(180, 0, 1, 0); // Roda o objecto 90 graus em torno dos yy. drawQuads(tableTexture, 130, 3); glPopMatrix(); // Direita glPushMatrix(); glTranslatef(65,-4, 35); // Faz translate para o local pretendido. glRotatef(90, 0, 1, 0); // Roda o objecto 90 graus em torno dos yy. drawQuads(tableTexture, 70, 3); glPopMatrix(); // Esquerda glPushMatrix(); glTranslatef(-65,-4, -35); // Faz translate para o local pretendido. glRotatef(-90, 0, 1, 0); // Roda o objecto -90 graus em torno dos yy. drawQuads(tableTexture, 70, 3); glPopMatrix(); // Pernas direita-frente da mesa: //Frente glPushMatrix(); glTranslatef(55,-4, 30); // Faz translate para o local pretendido. glRotatef(-90, 0,0, 1); // Roda o objecto -90 graus em torno dos zz. drawQuads(tableTexture, 76, 5); glPopMatrix(); //Tras glPushMatrix(); glTranslatef(60,-4, 25); // Faz translate para o local pretendido. glRotatef(-180, 0,1, 0); // Roda o objecto -180 graus em torno dos yy. glRotatef(-90, 0,0, 1); // Roda o objecto -90 graus em torno dos zz. drawQuads(tableTexture, 76, 5); glPopMatrix(); //Esquerda glPushMatrix(); glTranslatef(55,-4, 25); // Faz translate para o local pretendido. glRotatef(-90, 0,1, 0); // Roda o objecto 90 graus em torno dos yy. glRotatef(-90, 0,0, 1); // Roda o objecto -90 graus em torno dos zz. drawQuads(tableTexture, 76, 5); glPopMatrix(); //Direita glPushMatrix(); glTranslatef(60,-4, 30); // Faz translate para o local pretendido. glRotatef(90, 0,1, 0); // Roda o objecto 90 graus em torno dos yy. glRotatef(-90, 0,0, 1); // Roda o objecto -90 graus em torno dos zz. drawQuads(tableTexture, 76, 5); glPopMatrix(); // Pernas direita-tras da mesa: //Frente glPushMatrix(); glTranslatef(55,-4, -25); // Faz translate para o local pretendido. glRotatef(-90, 0,0, 1); // Roda o objecto -90 graus em torno dos zz. drawQuads(tableTexture, 76, 5); glPopMatrix(); //Tras glPushMatrix(); glTranslatef(60,-4, -30); // Faz translate para o local pretendido. glRotatef(-180, 0,1, 0); // Roda o objecto -180 graus em torno dos yy. glRotatef(-90, 0,0, 1); // Roda o objecto -90 graus em torno dos zz. drawQuads(tableTexture, 76, 5); glPopMatrix(); //Esquerda glPushMatrix(); glTranslatef(55,-4, -30); // Faz translate para o local pretendido. glRotatef(-90, 0,1, 0); // Roda o objecto 90 graus em torno dos yy. glRotatef(-90, 0,0, 1); // Roda o objecto -90 graus em torno dos zz. drawQuads(tableTexture, 76, 5); glPopMatrix(); //Direita glPushMatrix(); glTranslatef(60,-4, -25); // Faz translate para o local pretendido. glRotatef(90, 0,1, 0); // Roda o objecto 90 graus em torno dos yy. glRotatef(-90, 0,0, 1); // Roda o objecto -90 graus em torno dos zz. drawQuads(tableTexture, 76, 5); glPopMatrix(); // Pernas esquerda-frente da mesa: //Frente glPushMatrix(); glTranslatef(-60,-4, 30); // Faz translate para o local pretendido. glRotatef(-90, 0,0, 1); // Roda o objecto -90 graus em torno dos zz. drawQuads(tableTexture, 76, 5); glPopMatrix(); //Tras glPushMatrix(); glTranslatef(-55,-4, 25); // Faz translate para o local pretendido. glRotatef(-180, 0,1, 0); // Roda o objecto -180 graus em torno dos yy. glRotatef(-90, 0,0, 1); // Roda o objecto -90 graus em torno dos zz. drawQuads(tableTexture, 76, 5); glPopMatrix(); //Esquerda glPushMatrix(); glTranslatef(-60,-4, 25); // Faz translate para o local pretendido. glRotatef(-90, 0,1, 0); // Roda o objecto 90 graus em torno dos yy. glRotatef(-90, 0,0, 1); // Roda o objecto -90 graus em torno dos zz. drawQuads(tableTexture, 76, 5); glPopMatrix(); //Direita glPushMatrix(); glTranslatef(-55,-4, 30); // Faz translate para o local pretendido. glRotatef(90, 0,1, 0); // Roda o objecto 90 graus em torno dos yy. glRotatef(-90, 0,0, 1); // Roda o objecto -90 graus em torno dos zz. drawQuads(tableTexture, 76, 5); glPopMatrix(); // Pernas esquerda-tras da mesa: //Frente glPushMatrix(); glTranslatef(-60,-4, -25); // Faz translate para o local pretendido. glRotatef(-90, 0,0, 1); // Roda o objecto -90 graus em torno dos zz. drawQuads(tableTexture, 76, 5); glPopMatrix(); //Tras glPushMatrix(); glTranslatef(-55,-4, -30); // Faz translate para o local pretendido. glRotatef(-180, 0,1, 0); // Roda o objecto -180 graus em torno dos yy. glRotatef(-90, 0,0, 1); // Roda o objecto -90 graus em torno dos zz. drawQuads(tableTexture, 76, 5); glPopMatrix(); //Esquerda glPushMatrix(); glTranslatef(-60,-4, -30); // Faz translate para o local pretendido. glRotatef(-90, 0,1, 0); // Roda o objecto 90 graus em torno dos yy. glRotatef(-90, 0,0, 1); // Roda o objecto -90 graus em torno dos zz. drawQuads(tableTexture, 76, 5); glPopMatrix(); //Direita glPushMatrix(); glTranslatef(-55,-4, -25); // Faz translate para o local pretendido. glRotatef(90, 0,1, 0); // Roda o objecto 90 graus em torno dos yy. glRotatef(-90, 0,0, 1); // Roda o objecto -90 graus em torno dos zz. drawQuads(tableTexture, 76, 5); glPopMatrix(); }
// Funcao que desenha a sala/casa. void drawRoom(GLuint floorTexture, GLuint wallTexture, GLuint wallUpperDoorTexture , GLuint doorTexture, GLuint windowLeftTexture, GLuint leftWallWindow, GLuint rightWallWindow, GLuint upperWallWindow, GLuint bottomWallWindow, GLuint windowRightTexture, GLuint windowBottomTexture, GLuint windowUpperTexture, GLuint windowMidleUpTexture, GLuint windowMidleRightTexture, GLfloat windowRotationAngle) { glColor3f(1.0f,1.0f,1.0f); // Chao: glPushMatrix(); glTranslatef(-250,-80.0, -250); // Faz translate para o local pretendido. glRotatef(90, 0, 0, -1); // Roda o objecto 90 graus em torno dos -zz. glRotatef(-90, 0, 1, 0); // Roda o objecto -90 graus em torno dos yy. drawQuads(floorTexture, 500, 500); glPopMatrix(); // Teto: glPushMatrix(); glTranslatef(250,170.0, -250); // Faz translate para o local pretendido. glRotatef(-90, 0, 0, -1); // Roda o objecto -90 graus em torno dos -zz. glRotatef(-90, 0, 1, 0); // Roda o objecto -90 graus em torno dos yy. drawQuads(floorTexture, 500, 500); glPopMatrix(); // Face Direita: glPushMatrix(); glTranslatef(250.0,-80.0,-250); // Faz translate para o local pretendido. glRotatef(-90, 0, 1, 0); // Roda o objecto -90 graus em torno dos yy. drawQuads(wallTexture, 500, 250); glPopMatrix(); // Face Fundo Esquerda: glPushMatrix(); glTranslatef(-250.0,-80,-250); // Faz translate para o local pretendido. drawQuads(wallTexture, 214, 250); glPopMatrix(); // Face Fundo Direita: glPushMatrix(); glTranslatef(36,-80,-250); // Faz translate para o local pretendido. drawQuads(wallTexture, 214, 250); glPopMatrix(); // Face Fundo por cima da porta: glPushMatrix(); glTranslatef(-36,110,-250); // Faz translate para o local pretendido. drawQuads(wallUpperDoorTexture, 72, 60); glPopMatrix(); // PORTA: glPushMatrix(); glTranslatef(-36.0,-80.0,-250); // Faz translate para o local pretendido. drawQuads(doorTexture, 72, 190); glPopMatrix(); // Faces da Esquerda: //Esquerda glPushMatrix(); glTranslatef(-250.0,-80,250); // Faz translate para o local pretendido. glRotatef(90, 0, 1, 0); // Roda o objecto -90 graus em torno dos yy. drawQuads(leftWallWindow, 189, 250); glPopMatrix(); //Cima da janela glPushMatrix(); glTranslatef(-250.0,130,61.5); // Faz translate para o local pretendido. glRotatef(90, 0, 1, 0); // Roda o objecto -90 graus em torno dos yy. drawQuads(upperWallWindow, 123, 40); glPopMatrix(); //De baixo da janela glPushMatrix(); glTranslatef(-250.0,-80,61.5); // Faz translate para o local pretendido. glRotatef(90, 0, 1, 0); // Roda o objecto -90 graus em torno dos yy. drawQuads(bottomWallWindow, 123, 60); glPopMatrix(); //Direita glPushMatrix(); glTranslatef(-250.0,-80,-61.5); // Faz translate para o local pretendido. glRotatef(90, 0, 1, 0); // Roda o objecto -90 graus em torno dos yy. drawQuads(rightWallWindow,189, 250); glPopMatrix(); // Janela: //Parte de baixo glPushMatrix(); glTranslatef(-250,-20, 61.5); // Faz translate para o local pretendido. glRotatef(90, 0, 1,0); // Rotacao 90graus yy. drawQuads(windowBottomTexture, 123, 28); glPopMatrix(); //Parte de cima glPushMatrix(); glTranslatef(-250,110, 61.5); // Faz translate para o local pretendido. glRotatef(90, 0, 1,0); // Rotacao 90graus yy. drawQuads(windowUpperTexture, 123, 20); glPopMatrix(); //Parte da esquerda glPushMatrix(); glTranslatef(-250,8, 61.5); // Faz translate para o local pretendido. glRotatef(90, 0, 1,0); // Rotacao 90graus yy. drawQuads(windowLeftTexture, 19, 102); glPopMatrix(); //Parte da direita glPushMatrix(); glTranslatef(-250,8, -36.5); // Faz translate para o local pretendido. glRotatef(90, 0, 1,0); // Rotacao 90graus yy. drawQuads(windowRightTexture, 25.5, 102); glPopMatrix(); //Partes do meio: // | glPushMatrix(); glTranslatef(-249.9, 8, 3.9+37.45); // Faz translate para o local pretendido. glRotatef(90+windowRotationAngle, 0, 1,0); // Rotacao 90graus yy. glTranslatef(37.45, 0, 0); // Faz translate para o local pretendido. drawQuads(windowMidleUpTexture, 4.1, 102); glPopMatrix(); // -- glPushMatrix(); glTranslatef(-249.95, 55.65, 42.5); // Faz translate para o local pretendido. glRotatef(90+windowRotationAngle, 0, 1,0); // Rotacao 90graus yy. drawQuads(windowMidleRightTexture, 79, 2); glPopMatrix(); // Face Frente: glPushMatrix(); glTranslatef(250,-80, 250); // Faz translate para o local pretendido. glRotatef(-180, 0, -1, 0); // Roda o objecto -90 graus em torno dos yy. drawQuads(wallTexture, 500, 250); glPopMatrix(); }
// Funcao que desenha o relogio na parede. void drawClock(GLuint frontTexture, GLuint othersTexture, GLfloat hourAngle, GLfloat minutesAngle, GLfloat secondsAngle){ glEnable(GL_TEXTURE_2D); glColor4f(WHITE); // Face do relogio: glPushMatrix(); glTranslatef(110.0,80, -248); // Translate para a parede. glTranslatef(-25,-25, 0.0); // Faz translate para a origem. drawQuads(frontTexture, 50, 50); glPopMatrix(); /*// Parte de tras do relogio: glPushMatrix(); glTranslatef(110.0,80, -250); // Translate para a parede. glRotatef(-180, 0,1,0); // Roda o objecto em torno dos yy. glTranslatef(-25,-25, 0.0); // Faz translate para a origem. drawQuads(othersTexture, 50, 50); glPopMatrix();*/ // Lateral direita do relogio: glPushMatrix(); glTranslatef(110.0,80, -248); // Translate para a parede. glTranslatef(25,0.0, -1.0); // Faz translate para o local correto glRotatef(90, 0,1,0); // Roda o objecto em torno dos yy. glTranslatef(-1,-25, 0.0); // Faz translate para a origem. drawQuads(othersTexture, 2, 50); glPopMatrix(); // Lateral esquerda do relogio: glPushMatrix(); glTranslatef(110.0,80, -248); // Translate para a parede. glTranslatef(-25,0.0, -1.0); // Faz translate para o local correto glRotatef(-90, 0,1,0); // Roda o objecto em torno dos yy. glTranslatef(-1,-25, 0.0); // Faz translate para a origem. drawQuads(othersTexture, 2, 50); glPopMatrix(); // Lateral superior do relogio: glPushMatrix(); glTranslatef(110.0,80, -248); // Translate para a parede. glRotatef(90, 0,0,1); // Roda o objecto em torno dos yy. glTranslatef(25,0.0, -1.0); // Faz translate para o local correto glRotatef(90, 0,1,0); // Roda o objecto em torno dos yy. glTranslatef(-1,-25, 0.0); // Faz translate para a origem. drawQuads(othersTexture, 2, 50); glPopMatrix(); // Lateral inferior do relogio: glPushMatrix(); glTranslatef(110.0,80, -248); // Translate para a parede. glRotatef(-90, 0,0,1); // Roda o objecto em torno dos yy. glTranslatef(25,0.0, -1.0); // Faz translate para o local correto glRotatef(90, 0,1,0); // Roda o objecto em torno dos yy. glTranslatef(-1,-25, 0.0); // Faz translate para a origem. drawQuads(othersTexture, 2, 50); glPopMatrix(); // Ponteiro dos minutos: glDisable(GL_TEXTURE_2D); glColor4f(BLACK); glPushMatrix(); glTranslatef(110.0,80, -248); // Translate para a parede. glRotatef(minutesAngle,0,0,1); // Roda o objecto em torno dos zz. glTranslatef(-0.35,0, 0.06); // Faz translate para a origem. drawQuadsSimple(0.7, 12.5); glPopMatrix(); // Ponteiro das horas: glColor4f(BLUE); glPushMatrix(); glTranslatef(110.0,80, -248); // Translate para a parede. glRotatef(hourAngle,0,0,1); // Roda o objecto em torno dos zz. glTranslatef(-0.5, 0, 0.08); // Faz translate para a origem. drawQuadsSimple(1, 9); glPopMatrix(); // Ponteiro dos segundos: glColor4f(RED); glPushMatrix(); glTranslatef(110.0,80, -248); // Translate para a parede. glRotatef(secondsAngle,0,0,1); // Roda o objecto em torno dos zz. glTranslatef(-0.2, 0, 0.1); // Faz translate para a origem. drawQuadsSimple(0.4, 15); glPopMatrix(); }