gluUnProject

// Extensions.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <GL/glut.h> 

void display(void) 
{ 
	glClear(GL_COLOR_BUFFER_BIT); 
	{                    // 如果不支持 GL_ARB_window_pos 
		// 则只能使用 glRasterPos*系列函数 
		// 先计算出一个经过变换后能够得到 
		//   (100, 100)的坐标(x, y, z) 
		// 然后调用 glRasterPos3d(x, y, z); 
		GLint viewport[4]; 
		GLdouble modelview[16], projection[16]; 
		GLdouble x, y, z; 

		printf("不支持 GL_ARB_window_pos\n"); 
		printf("使用 glRasterPos 函数\n"); 

		glGetIntegerv(GL_VIEWPORT, viewport); 
		glGetDoublev(GL_MODELVIEW_MATRIX, modelview); 
		glGetDoublev(GL_PROJECTION_MATRIX, projection); 
		gluUnProject(100, 100, 0.5, modelview, projection, viewport, &x, &y, &z); 
		glRasterPos3d(x, y, z); 
	} 

	{ // 绘制一个 5*5 的像素块 
		GLubyte pixels[5][5][4]; 
		// 把像素中的所有像素都设置为红色 
		int i, j; 
		for(i=0; i<5; ++i) 
		{
			for(j=0; j<5; ++j) 
			{ 
				pixels[i][j][0] = 255; // red 
				pixels[i][j][1] = 0;   // green 
				pixels[i][j][2] = 0;   // blue 
				pixels[i][j][3] = 255; // alpha 
			} 
		}
		glDrawPixels(5, 5, GL_RGBA, GL_UNSIGNED_BYTE, pixels); 
	} 

	glutSwapBuffers(); 
} 

int main(int argc, char* argv[]) 
{ 
	glutInit(&argc, argv); 
	glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); 
	glutInitWindowPosition(100, 100); 
	glutInitWindowSize(512, 512); 
	glutCreateWindow("OpenGL"); 
	glutDisplayFunc(&display); 
	glutMainLoop(); 
} 

你可能感兴趣的:(gluUnProject)