Esempio n. 1
0
//--------------------------------------------------------------
void testApp::draw(){
			
	if(fboUsed)
    {
        // set the rendering destination to FBO
        glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fboId);
		nmShader.setShaderActive(true);
		glViewport(0, 0, ofGetWidth(), ofGetHeight());
		
        glClearColor(1, 1, 1, 1);
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	
        glPushMatrix();
       
        camera->setView();
		drawCity();
		glPopMatrix();
		nmShader.setShaderActive(false);
		
#ifdef DEBUG
	//	glReadPixels(0,0,ofGetWidth(),ofGetHeight(),GL_COLOR_ATTACHMENT0_EXT,GL_RGB8, colourBytes);
	//	colourImage.saveImage("ColourBuffer.png");	
		
	//	glReadPixels(0,0,ofGetWidth(),ofGetHeight(),GL_DEPTH_ATTACHMENT_EXT,GL_UNSIGNED_BYTE, depthBytes);
	//	depthImage.saveImage("DepthBuffer.png");
		
#endif
		
		
		// Switch to Final Render Buffer
        glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fboIdFinal);
		
		glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        // trigger mipmaps generation explicitly
        // NOTE: If GL_GENERATE_MIPMAP is set to GL_TRUE, then glCopyTexSubImage2D()
        // triggers mipmap generation automatically. However, the texture attached
        // onto a FBO should generate mipmaps manually via glGenerateMipmapEXT().
    
		// back to normal viewport and projection matrix
		glViewport(0, 0, ofGetWidth(), ofGetHeight());
		glMatrixMode(GL_PROJECTION);
		glLoadIdentity();
		glOrtho(-ofGetWidth()/2,ofGetWidth()/2,-ofGetHeight()/2,ofGetHeight()/2,1,20);
		glMatrixMode(GL_MODELVIEW);
		glLoadIdentity();
		glEnable(GL_TEXTURE_2D);
		ssao2Shader.setShaderActive(true);
			
		glActiveTextureARB(GL_TEXTURE0_ARB);
		glGenerateMipmapEXT(GL_TEXTURE_2D);
		glBindTexture(GL_TEXTURE_2D,colourTextureId);
		
		glActiveTextureARB(GL_TEXTURE1_ARB);
		glBindTexture(GL_TEXTURE_2D,noiseTextureId);
		
		 // This is needed and fails without but I suspect is a slow down bottleneck!
		
		ssao2Shader.setUniformVariable1i("normalMap",0);
		ssao2Shader.setUniformVariable1i("rnm",1);
		ssao2Shader.setUniformVariable1f("totStrength", totStrength);
		ssao2Shader.setUniformVariable1f("strength", ssaoStrength);
		ssao2Shader.setUniformVariable1f("offset", ssaoOffset);
		ssao2Shader.setUniformVariable1f("falloff",ssaoFalloff );
		ssao2Shader.setUniformVariable1f("rad", ssaoRad);
		glScalef(0.25, 0.25, 0.25);
		glTranslated(0,0,-2);
		glColor3f(1.0, 1.0, 1.0);
		
		glBegin(GL_QUADS);
		glMultiTexCoord2f(GL_TEXTURE0_ARB, 0, 0); glMultiTexCoord2f(GL_TEXTURE1_ARB, 0, 0);	glVertex3f(-ofGetWidth()/2,-ofGetHeight()/2,0);
		glMultiTexCoord2f(GL_TEXTURE0_ARB, 1, 0); glMultiTexCoord2f(GL_TEXTURE1_ARB, 1, 0);	glVertex3f(ofGetWidth()/2,-ofGetHeight()/2,0);
		glMultiTexCoord2f(GL_TEXTURE0_ARB, 1, 1); glMultiTexCoord2f(GL_TEXTURE1_ARB, 1, 1);	glVertex3f(ofGetWidth()/2,ofGetHeight()/2,0);
		glMultiTexCoord2f(GL_TEXTURE0_ARB, 0, 1); glMultiTexCoord2f(GL_TEXTURE1_ARB, 0, 1);	glVertex3f(-ofGetWidth()/2,ofGetHeight()/2,0);
		glEnd();
		
		ssao2Shader.setShaderActive(false);
		

		
		// back to normal window-system-provided framebuffer
        glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); // unbind

		glViewport(0, 0, ofGetWidth(), ofGetHeight());
		glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
		glMatrixMode(GL_PROJECTION);
		glLoadIdentity();
		glOrtho(-ofGetWidth()/2,ofGetWidth()/2,-ofGetHeight()/2,ofGetHeight()/2,1,20);
		glMatrixMode(GL_MODELVIEW);
		glLoadIdentity();
		
		if (blurStep){
			blurShader.setShaderActive(true);
			blurShader.setUniformVariable2f("ScaleU",1.0/ofGetWidth(),1.0/ofGetHeight());
			blurShader.setUniformVariable1i("textureSource",2);
		}
		
		
		glActiveTextureARB(GL_TEXTURE2_ARB);
		glBindTexture(GL_TEXTURE_2D,finalTextureId);
		glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
		glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
		
		glPushMatrix();
		glTranslated(0,0,-5);
		glColor3f(0.95, 0.97, 1.0);
		glBegin(GL_QUADS);
		
		glMultiTexCoord2f(GL_TEXTURE2_ARB, 0, 0);glVertex3f(-ofGetWidth()/2,-ofGetHeight()/2,0);
		glMultiTexCoord2f(GL_TEXTURE2_ARB, 1, 0);glVertex3f(ofGetWidth()/2,-ofGetHeight()/2,0);
		glMultiTexCoord2f(GL_TEXTURE2_ARB, 1, 1);glVertex3f(ofGetWidth()/2,ofGetHeight()/2,0);
		glMultiTexCoord2f(GL_TEXTURE2_ARB, 0, 1);glVertex3f(-ofGetWidth()/2,ofGetHeight()/2,0);
		
		glEnd();
		glPopMatrix();
		
		if(blurStep)
			blurShader.setShaderActive(false);
		
		glDisable(GL_TEXTURE_2D);
		
		glPushMatrix();
		glTranslated(-ofGetWidth() /2,ofGetHeight() /2,-2);
		glRotatef(180, 1.0, 0, 0);
			if (showGui) gui.draw();
		glPopMatrix();
		
    }
	else {
		glMatrixMode(GL_PROJECTION);
		glPushMatrix();
		glLoadIdentity();
		glOrtho(-ofGetWidth()/2,ofGetWidth()/2,-ofGetHeight()/2,ofGetHeight()/2,1,20);
		glMatrixMode(GL_MODELVIEW);
		glPushMatrix();
		glLoadIdentity();
		glTranslated(0,0,-1500);
		glColor3f(1.0, 0.0, 0.0);
		glBegin(GL_QUADS);

		glVertex3f(-ofGetWidth()/2,-ofGetHeight()/2,0);
		glVertex3f(ofGetWidth()/2,-ofGetHeight()/2,0);
		glVertex3f(ofGetWidth()/2,ofGetHeight()/2,0);
		glVertex3f(-ofGetWidth()/2,ofGetHeight()/2,0);
		
		glEnd();
		glPopMatrix();
	}

	// Flick back to standard projection and draw our QUAD
	
	
}
Esempio n. 2
0
void drawConvexHull()
{
	fillConstants();


	const unsigned char black[] = {0,0,0};
	const unsigned char red[] = { 255,0,0 };
	const unsigned char green[] = { 0,255,0 };
	//const unsigned char blue[] = { 0,0,255 };

	CImg<unsigned char> visu(COLUMNS,ROWS,1,3,255);
	CImgDisplay draw_disp(visu,"Cities");

	//draw cities
	for(int i=0;i<nodes;++i)
	{
		visu.draw_circle(xtoc(x[i]),ytor(y[i]),CITYRADIUS,black,1,1);
	}

	drawCity(45,&visu,green);
	drawCity(35,&visu,green);
	drawCity(48,&visu,green);

	drawCity(63,&visu,green);



	//draw convex hull
	cout << "Checkpoint 1" << "\n";
	convexHullAlgorithm();
	cout << "Checkpoint 2" << "\n";
	displayCurrentHull(&visu,red);

/*


	int i=0;
	while(mask[i]<0)
	{
		++i;
	}
	cout << "Checkpoint 3: " << i << "\n";
	int firstNode = i;
	int currNode = i;
	int nextNode = mask[currNode];
		cout << "Current Node: " << currNode << "\n";
		cout << "Next Node: " << nextNode << "\n";
	while(nextNode!=firstNode && nextNode>=0)
	{

		visu.draw_line(
			xtoc(x[currNode]),ytor(y[currNode]),
			xtoc(x[nextNode]),ytor(y[nextNode]),
			red,1,~0U);
		currNode = nextNode;
		nextNode = mask[nextNode];
	}
*/
	visu.display(draw_disp);

	while ( !draw_disp.is_closed() )
	{
		draw_disp.wait();
	}
}