OpenLG选择

来源:互联网 发布:淘宝天猫男装牛仔裤 编辑:程序博客网 时间:2024/06/06 20:28
#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 512void 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

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



0 0