コード例 #1
0
ファイル: lapr5.cpp プロジェクト: JorgeNeves/easySoft
void display(void)
{
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	glLoadIdentity();
	setCamera();

	/*material(slate);
	glPushMatrix();
	glTranslated(0, 0, -40);
	desenhaSolo();
	glPopMatrix();*/
		
	//desenhaEixos();
	
	desenhaLabirinto();
 
	if(estado.eixoTranslaccao) {
		cout << "Translate... " << estado.eixoTranslaccao << endl; 

	}

	glFlush();
	glutSwapBuffers();

}
コード例 #2
0
void createDisplayLists(int janelaID)
{
	modelo.labirinto[janelaID]=glGenLists(2);
	glNewList(modelo.labirinto[janelaID], GL_COMPILE);
		glPushAttrib(GL_COLOR_BUFFER_BIT | GL_CURRENT_BIT | GL_ENABLE_BIT );
		  desenhaLabirinto(modelo.texID[JANELA_NAVIGATE][ID_TEXTURA_CUBOS]);
		  desenhaLabirinto(modelo.texID[JANELA_TOP][ID_TEXTURA_CUBOS]);
		glPopAttrib();
	glEndList();

	modelo.chao[janelaID]=modelo.labirinto[janelaID]+1;
	glNewList(modelo.chao[janelaID], GL_COMPILE);
		glPushAttrib(GL_COLOR_BUFFER_BIT | GL_CURRENT_BIT | GL_ENABLE_BIT );
		  desenhaChao(CHAO_DIMENSAO,modelo.texID[janelaID][ID_TEXTURA_CHAO]);
		glPopAttrib();
	glEndList();
}
コード例 #3
0
ファイル: lapr5.cpp プロジェクト: JorgeNeves/easySoft
int detectCollision(GLfloat xp, GLfloat yp, GLfloat zp){
	int i, n, objid = 0;
	double zmin = 10.0;
	GLuint buffer[100], *ptr;

	glSelectBuffer(100, buffer);
	glRenderMode(GL_SELECT);
	glInitNames();

	glMatrixMode(GL_PROJECTION);
	glPushMatrix(); // guarda a projecção
	glLoadIdentity();
	//setCamera();
	
	glOrtho(-estado.camera.dim / 2.0, estado.camera.dim / 2.0, 
		-estado.camera.dim / 2.0, estado.camera.dim / 2.0, 
		0.0, estado.camera.dim / 2.0 + (estado.camera.velv + estado.camera.velh));
	//setProjection(x, y, GL_TRUE);

	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
	
	glRotated(-M_PI/2.0 - atan2(estado.camera.velv,estado.camera.velh),1,0,0);
	glRotated(M_PI/2.0 - estado.camera.dir_lat,0,0,1);
	glTranslated(-xp,-yp,-zp);
	
	//desenhaEixos();
	desenhaLabirinto();

	n = glRenderMode(GL_RENDER);
	if (n > 0)
	{
		ptr = buffer;
		for (i = 0; i < n; i++)
		{
			if (zmin >(double) ptr[1] / UINT_MAX) {
				zmin = (double)ptr[1] / UINT_MAX;
				objid = ptr[3];
			}
			ptr += 3 + ptr[0]; // ptr[0] contem o número de nomes (normalmente 1); 3 corresponde a numnomes, zmin e zmax
		}
	}


	glMatrixMode(GL_PROJECTION); //repõe matriz projecção
	glPopMatrix();
	glMatrixMode(GL_MODELVIEW);

	return objid;
}
コード例 #4
0
ファイル: lapr5.cpp プロジェクト: JorgeNeves/easySoft
int picking(int x, int y){
	int i, n, objid=0;
	double zmin = 10.0;
	GLuint buffer[100], *ptr;

	glSelectBuffer(100, buffer);
	glRenderMode(GL_SELECT);
	glInitNames();

	glMatrixMode(GL_PROJECTION);
	glPushMatrix(); // guarda a projecção
		glLoadIdentity();
		setProjection(x,y,GL_TRUE);
	
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
	setCamera();
	//desenhaEixos();
	desenhaLabirinto();
	
	n = glRenderMode(GL_RENDER);
	if (n > 0)
	{
		ptr = buffer;
		for (i = 0; i < n; i++)
		{
			if (zmin > (double) ptr[1] / UINT_MAX) {
				zmin = (double) ptr[1] / UINT_MAX;
				objid = ptr[3];
			}
			ptr += 3 + ptr[0]; // ptr[0] contem o número de nomes (normalmente 1); 3 corresponde a numnomes, zmin e zmax
		}
	}


	glMatrixMode(GL_PROJECTION); //repõe matriz projecção
	glPopMatrix();
	glMatrixMode(GL_MODELVIEW);

	return objid;
}