⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pick.c

📁 计算机图形学~想必是很多人需要的~在此共享一下
💻 C
字号:
/* pick.c    */

/* E. Angel, Interactive Computer Graphics */
/* A Top-Down Approach with OpenGL, Third Edition */
/* Addison-Wesley Longman, 2003 */

/* demonstrates picking used selection mode */
#include <stdlib.h>#include <stdio.h>#include <GL/glut.h>void init(){   glClearColor (0.0, 0.0, 0.0, 0.0);}void drawObjects(GLenum mode){	if(mode == GL_SELECT) glLoadName(1);	glColor3f(1.0, 0.0, 0.0);	glRectf(-0.5, -0.5, 1.0, 1.0);	if(mode == GL_SELECT) glLoadName(2);	glColor3f(0.0, 0.0, 1.0);	glRectf(-1.0, -1.0, 0.5, 0.5);}void display(){	glClear(GL_COLOR_BUFFER_BIT);	drawObjects(GL_RENDER);	glFlush();}/*  processHits prints out the contents of the  *  selection array. */void processHits (GLint hits, GLuint buffer[]){   unsigned int i, j;   GLuint ii, jj, names, *ptr;   printf ("hits = %d\n", hits);   ptr = (GLuint *) buffer;    for (i = 0; i < hits; i++) {	/*  for each hit  */      names = *ptr;	  ptr+=3;      for (j = 0; j < names; j++) { /*  for each name */         if(*ptr==1) printf ("red rectangle\n");         else printf ("blue rectangle\n");         ptr++;      }      printf ("\n");   }}#define SIZE 512void mouse(int button, int state, int x, int y){   GLuint selectBuf[SIZE];   GLint hits;   GLint viewport[4];   if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)    {   glGetIntegerv (GL_VIEWPORT, viewport);   glSelectBuffer (SIZE, selectBuf);   glRenderMode(GL_SELECT);   glInitNames();   glPushName(0);   glMatrixMode (GL_PROJECTION);   glPushMatrix ();   glLoadIdentity ();/*  create 5x5 pixel picking region near cursor location	*/   gluPickMatrix ((GLdouble) x, (GLdouble) (viewport[3] - y),                   5.0, 5.0, viewport);   gluOrtho2D (-2.0, 2.0, -2.0, 2.0);   drawObjects(GL_SELECT);   glMatrixMode (GL_PROJECTION);   glPopMatrix ();   glFlush ();   hits = glRenderMode (GL_RENDER);   processHits (hits, selectBuf);   glutPostRedisplay();   }} void reshape(int w, int h){   glViewport(0, 0, w, h);   glMatrixMode(GL_PROJECTION);   glLoadIdentity();   gluOrtho2D (-2.0, 2.0, -2.0, 2.0);   glMatrixMode(GL_MODELVIEW);   glLoadIdentity();}void keyboard(unsigned char key, int x, int y){   switch (key) {      case 27:         exit(0);         break;   }}/* Main Loop */int main(int argc, char** argv){   glutInit(&argc, argv);   glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);   glutInitWindowSize (500, 500);   glutInitWindowPosition (100, 100);   glutCreateWindow (argv[0]);   init ();   glutReshapeFunc (reshape);   glutDisplayFunc(display);    glutMouseFunc (mouse);   glutKeyboardFunc (keyboard);   glutMainLoop();   return 0; }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -