OpenLG选择

#include <windows.h>
#include <GL/glu.h>
#include <GL/gl.h>
#include <GL/glut.h>
#include <GL/glaux.h>
#include <math.h> 
#include <stdio.h>

void drawScene()
{
	glMatrixMode(GL_PROJECTION);
	gluPerspective(60, 1.0, 1,  -1);
	//glOrtho(-100, 100, -100, 100, 150,  -100);

	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
	GLfloat dDis = sqrtf(30000);
	gluLookAt(0, 0, dDis,   0, 0,  0,  0, 1, 0);
	//gluLookAt(0, 0, 150,   0, 0,  0,  0, 1, 0);

	GLfloat x1 = -99;
	GLfloat y1 = -99;
	GLfloat x2 = 99;
	GLfloat y2 = 99;
	GLfloat z = -5;
	glColor3f(1.0, 0.0, 0.0);
	glBegin(GL_LINE_LOOP);
		glVertex3f(x1, y1, z);
		glVertex3f(x2, y1, z);
		glVertex3f(x2, y2, z);
		glVertex3f(x1, y2, z);
	glEnd();

	x1 = -44;
	y1 = -44;
	x2 = 44;
	y2 = 44;
	z = -9;

	glColor3f(0.0, 1.0, 0.0);
	glBegin(GL_LINE_LOOP);
	glVertex3f(x1, y1, z);
		glVertex3f(x2, y1, z);
		glVertex3f(x2, y2, z);
		glVertex3f(x1, y2, z);
	glEnd();

	x1 = -33;
	y1 = -33;
	x2 = 33;
	y2 = 33;
	z = -15;

	glColor3f(1.0, 1.0, 0.0);
	glBegin(GL_LINE_LOOP);
		glVertex3f(x1, y1, z);
		glVertex3f(x2, y1, z);
		glVertex3f(x2, y2, z);
		glVertex3f(x1, y2, z);
	glEnd();
}


#define BUF_SIZE 512
void selectObjects()
{
	GLuint buf[512];
	glSelectBuffer(512, buf);

	glRenderMode(GL_SELECT);
	glInitNames();
	glPushName(0);

	glPushMatrix();
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	glOrtho(-100, 100, -100, 100, 150,  -100);

	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
	
	glLoadName(444);
	GLfloat x1 = -99;
	GLfloat y1 = -99;
	GLfloat x2 = 99;
	GLfloat y2 = 99;
	GLfloat z = -5;

	glColor3f(1.0, 1.0, 0.0);
	glBegin(GL_LINE_LOOP);
		glVertex3f(x1, y1, z);
		glVertex3f(x2, y1, z);
		glVertex3f(x2, y2, z);
		glVertex3f(x1, y2, z);
	glEnd();

	glLoadName(555);
	x1 = -44;
	y1 = -44;
	x2 = 44;
	y2 = 44;
	z = -9;

	glColor3f(0.0, 1.0, 0.0);
	glBegin(GL_LINE_LOOP);
		glVertex3f(x1, y1, z);
		glVertex3f(x2, y1, z);
		glVertex3f(x2, y2, z);
		glVertex3f(x1, y2, z);
	glEnd();

	x1 = -33;
	y1 = -33;
	x2 = 33;
	y2 = 33;
	z = -15;

	glColor3f(1.0, 1.0, 0.0);
	glBegin(GL_LINE_LOOP);
		glVertex3f(x1, y1, z);
		glVertex3f(x2, y1, z);
		glVertex3f(x2, y2, z);
		glVertex3f(x1, y2, z);
	glEnd();

	glPushMatrix();
	glFlush();

	GLint hits;
	hits = glRenderMode(GL_SELECT);
	
	int j = 0;
	for (int i = 0; i<hits; i++)
	{
		printf("-- Name's Num: %d\n", buf[j]);
		printf("-- Min Z: %d\n", buf[j+1]/0xffffffff);
		printf("-- Max Z: %d\n", buf[j+2]/0xffffffff);
		printf("-- Name : %d\n", buf[j+3]);
		j+=4;
	}

}

void init()
{
	glEnable(GL_DEPTH_TEST);
	glShadeModel(GL_FLOAT);
}

void display()
{
	glClearColor(0.0, 0.0, 0.0, 0.0);
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

	drawScene();
	selectObjects();

	glFlush();
}

int main()
{
	glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);

	glutInitWindowSize(200, 200);

	glutInitWindowPosition(200, 400);
	glutCreateWindow("Yulinxx");
	init();
	glutDisplayFunc(display);
	glutMainLoop();

	return 0;
}



红宝书上的图形绘制太过麻烦,看得头晕.....

简化一下,绘制三个矩形,红色的名字为444

蓝色,黄色共一个名字:555

注意,选择的时候,需要将三个矩形重新绘制一遍.....................


OpenLG选择_第1张图片

你可能感兴趣的:(OpenLG选择)