#include <GL/glut.h>
#include <GL/glu.h>
#include <conio.h>
#include <stdlib.h> 
#include <GL/glaux.h>
#include <fstream>
#include <math.h>



int ww=600,hh=600;
int mouseX,mouseY;


GLint viewport[4],winX,winY,viewportX,viewportY;
GLdouble modelview[16];
GLdouble projection[16];

GLfloat viewportZ,winZ;
GLdouble posX,posY,posZ;






void mouse(int button,int state,int x,int y)
{ if (state==GLUT_DOWN&&button==GLUT_LEFT_BUTTON)  
  {

winX=winY=winZ=0.0;
posX=posY=posZ=0.0;
viewportZ=viewportY=viewportX=0.0;
winX=x;
winY=y;

viewportX=winX;
viewportY=hh-y;
glReadBuffer(GL_FRONT);
glGetIntegerv(GL_VIEWPORT, viewport); 
glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
glGetDoublev(GL_PROJECTION_MATRIX, projection);



//获得屏幕坐标对应世界坐标的深度
glReadPixels(viewportX,viewportY, 1,1, GL_DEPTH_COMPONENT, GL_FLOAT, &winZ);

viewportZ=winZ;
  //获得相应世界坐标
gluUnProject(viewportX, viewportY, viewportZ, modelview, projection, viewport, &posX, &posY, &posZ);


}


}

void init()
{  
  //设置观察和投影方式
glClearColor(0.0,0.0,0.0,0.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0,-400,400,0,0,0,0,1,0);
glMatrixMode( GL_PROJECTION );
  glLoadIdentity();
gluPerspective( 60, 1, 0, 1000);

}



void reshape(GLsizei w,GLsizei h)
{

ww=w;
hh=h;
glViewport(0,0,w,h);
  glMatrixMode( GL_PROJECTION );
glLoadIdentity();
gluPerspective( 60., (double)w/(double)h, 1, 900.0);
glMatrixMode(GL_MODELVIEW);

}
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.0,1.0,0.0);
   
glPolygonMode (GL_FRONT, GL_FILL);
glPolygonMode (GL_BACK, GL_LINE);
glBegin(GL_QUADS);  

glVertex3f(-256.0f,-256.0f,0.0f);  
glVertex3f(256.0f,-256.0f,0.0f);  
glVertex3f(256.0f,256.0f,0.0f);  
glVertex3f(-256.0f,256.0f,0.0f);  
glEnd();


glutSwapBuffers();
}
int main(int argc, char ** argv)
{
glutInit(& argc, argv);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glEnable(GL_DEPTH_TEST); 
  glClearDepth(1.0f); 
glDepthFunc(GL_LEQUAL);  
 
glutInitDisplayMode(GLUT_RGBA|GLUT_DOUBLE);

glutInitWindowSize(600,600);
glutInitWindowPosition(0,0);
glutCreateWindow("三维场景");
init();
glutDisplayFunc(display);

glutReshapeFunc(reshape);
glutMouseFunc(mouse);
glutMotionFunc(mousemove);

glutMainLoop();
}
posted on 2012-11-01 22:57  暮色年华  阅读(1000)  评论(0编辑  收藏  举报