#include <cstdlib>
#include <iostream>
#include <gl/gl.h>
#include <gl/glu.h>
#include <gl/glut.h>
using namespace std;
double objx, objy, objz;
void processMouse(int button, int state, int x, int y)
{
double modelview[16], projection[16];
int viewport[4];
float z;
//get the modelview matrix
glGetDoublev( GL_MODELVIEW_MATRIX, modelview );
//get the projection matrix
glGetDoublev( GL_PROJECTION_MATRIX, projection );
//get the viewport
glGetIntegerv( GL_VIEWPORT, viewport );
//Read the window z co-ordinate
//(the z value on that point in unit cube)
glReadPixels( x, viewport[3]-y, 1, 1,
GL_DEPTH_COMPONENT, GL_FLOAT, &z );
//Unproject the window co-ordinates to
//find the world co-ordinates.
gluUnProject( x, viewport[3]-y, z, modelview,
projection, viewport, &objx, &objy, &objz );
cout << objx << " , " << objy << " , " << objz << "\n";
}
void processNormalKeys(unsigned char key, int x, int y) {
if (key == 27)//escape key ascii value
exit(0);
}
void processSpecialKeys(int key, int x, int y) {
}
void changeSize(int w, int h) {
// Prevent a divide by zero, when window is too short
// (you cant make a window of zero width).
if(h == 0)
h = 1;
float ratio = 1.0* w / h;
// Reset the coordinate system before modifying
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
// Set the viewport to be the entire window
glViewport(0, 0, w, h);
// Set the correct perspective.
gluPerspective(45,ratio,1,1000);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void renderScene(void) {
glClear(GL_COLOR_BUFFER_BIT);
glTranslatef(0,0,-300);
glBegin(GL_LINES);
glVertex3f(-100.0,0.0,0.0);
glVertex3f(100.0,0.0,0.0);
glVertex3f(0.0,-100.0,0.0);
glVertex3f(0.0,100.0,0.0);
glVertex3f(0.0,0.0,-100.0);
glVertex3f(0.0,0.0,100.0);
glEnd();
glFlush();
}
int main(int argc, char **argv) {
glClearColor(0,0,0,0);
glEnable(GL_DEPTH_TEST);//Enable depth testing
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA);
glutInitWindowPosition(100,100);
glutInitWindowSize(320,320);
glutCreateWindow("glut");
glutDisplayFunc(renderScene);
glutReshapeFunc(changeSize);
glutKeyboardFunc(processNormalKeys);
glutSpecialFunc(processSpecialKeys);
glutMouseFunc(processMouse);
glutMainLoop();
}
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
by: ikeworkPosted on 2009-10-15 at 09:02:04ID: 25581936
Hi sassek,
I ran your app here and the coordinates look good so far.
What excactly is wrong and what do you expect it to be?
ike