自己来做个简陋的OpenGL选择教程....
2014-11-12 18:21
183 查看
自己来做个简陋的OpenGL选择教程....
#include <windows.h> #include <GL/glut.h> #include <stdio.h> void drawScene(GLenum mode) { glMatrixMode(GL_MODELVIEW); glLoadIdentity(); GLfloat x1 = -99; GLfloat y1 = -99; GLfloat x2 = 99; GLfloat y2 = 99; GLfloat z = 10; glColor3f(1.0, 0.0, 0.0); if (mode == GL_SELECT) { glLoadName(111); } glRectd(x1, y1, x2, y2); x1 = -44; y1 = -44; x2 = 44; y2 = 44; z = -1; glColor3f(0.0, 1.0, 0.0); if (mode == GL_SELECT) { glLoadName(222); } glRectd(x1, y1, x2, y2); x1 = -33; y1 = -33; x2 = 33; y2 = 33; z = -50; glColor3f(1.0, 1.0, 0.0); if (mode == GL_SELECT) { glLoadName(333); } glRectd(x1, y1, x2, y2); } void selectObjects() { GLuint buf[11]; glSelectBuffer(12, buf); glRenderMode(GL_SELECT); glInitNames(); glPushName(0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-100, 100, -100, 100, 150, -100); drawScene(GL_SELECT); 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); glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); glMatrixMode(GL_PROJECTION); //gluPerspective(60, 1.0, 1, -1); glOrtho(-100, 100, -100, 100, 150, -100); drawScene(GL_RENDER); 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; }
相关文章推荐
- Windows 7下OpenGL如何配置(网上有教程,这里做部分修改,也是为了方便自己以后使用)
- 纹理滤波方式、光源:Jeff Molofee(NeHe) 的 OPENGL 教程-第七课
- 新手上路:Jeff Molofee(NeHe) 的 OPENGL 教程-第一课
- NeHe的opengl教程delphi版(6)----纹理映射(贴图)
- 汇编语言超浓缩教程(选择自 lbsjs 的 Blog)
- PM,选择自己还是别人?
- QQ游戏外挂制作教程 (对对碰) 选择自 terry6394 的 Blog
- NeHe的opengl教程delphi版(7)----滤波
- 微软的正则表达式教程(五):选择/编组和后向引用
- 教程文章.Net(新闻管理系统) 自己开发的
- 第一个三角形:Jeff Molofee(NeHe) 的OPENGL教程-第二课
- 粗糙的世界:Jeff Molofee(NeHe) 的 OPENGL 教程-第十课
- NeHe的opengl教程delphi版(3)----着色
- NeHe的opengl教程delphi版(5)----3D
- 位图波浪:Jeff Molofee(NeHe) 的 OPENGL 教程-第十一课
- 着色:Jeff Molofee(NeHe) 的 OPENGL 教程-第三课
- 向3D进军:Jeff Molofee(NeHe) 的 OPENGL 教程 -第五课
- 漂亮的星星动画:Jeff Molofee(NeHe) 的 OPENGL 教程-第九课
- NeHe的opengl教程delphi版(8)----简单的透明
- 如何用Delphi编写自己的可视化控件 选择自 chenbin165 的 Blog