Пример #1
0
//	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();
}
Пример #2
0
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;
    }


}
Пример #3
0
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);
}
Пример #4
0
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);
}
Пример #5
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);
}
Пример #7
0
//	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();
}
Пример #9
0
//	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);
}
Пример #11
0
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"); */
}
Пример #12
0
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 );
}
Пример #13
0
//	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);
	}

}
Пример #16
0
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);
	
}
Пример #17
0
//	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();
}
Пример #18
0
//	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();
}
Пример #19
0
//	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();
}