PDA

View Full Version : Gluunproject returning wrong coordinates



shanedudddy2
12-17-2002, 08:18 PM
I programed this code as example code for later use on my modeller andyway.
The code says to move the polygon where to the mouse clicks.

Oviously I had to implement GluUnproject command anyway I did and it moves to where I click but it moves some but not to the position of the mouse pointer any way heres my code PLEASE HELP!!


GLfloat rtri; // Angle For The Triangle ( NEW )
GLfloat rquad; // Angle For The Quad ( NEW )
GLfloat tranX;

double tempX, tempY, tempZ;
static int w, h, S_x1, S_x2, S_y1, Sy2;
#define TRIANGLE 1
#define CUBE 2
#define AXIS 3
#define zPos 0.1
#define FEED_BUFF_SIZE 4096

int m_num_vertices;
int m_num_triangles;
int id,count;
int test;
GLdouble CurentModelMatrix [16];
GLdouble CurentProjMatrix [16];
char cMessage[64];

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); // Declaration For WndProc

GLvoid ReSizeGLScene(GLsizei width, GLsizei height) // Resize And Initialize The GL Window
{
if (height==0) // Prevent A Divide By Zero By
{
height=1; // Making Height Equal One
}

w = width;
h = height;
glViewport(0,0,width,height); // Reset The Current Viewport

glMatrixMode(GL_PROJECTION); // Select The Projection Matrix
glLoadIdentity(); // Reset The Projection Matrix

// Calculate The Aspect Ratio Of The Window
gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);

glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix
glLoadIdentity(); // Reset The Modelview Matrix
}

int InitGL(GLvoid) // All Setup For OpenGL Goes Here
{
glShadeModel(GL_SMOOTH); // Enable Smooth Shading
glClearColor(0.0f, 0.0f, 0.0f, 0.5f); // Black Background
glClearDepth(1.0f); // Depth Buffer Setup
glEnable(GL_DEPTH_TEST); // Enables Depth Testing
glDepthFunc(GL_LEQUAL); // The Type Of Depth Testing To Do
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Really Nice Perspective Calculations
return TRUE; // Initialization Went OK


}

int DrawGLScene(GLvoid) // Here's Where We Do All The Drawing
{

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear Screen And Depth Buffer
glLoadIdentity(); // Reset The Current Modelview Matrix

glMatrixMode(GL_MODELVIEW);
glPushMatrix();

glInitNames();
glPushName(0);

glLoadIdentity(); // Reset The Current Modelview Matrix
glPushMatrix();
glTranslatef(tempX,0.0f,-7.0f);
glBegin(GL_QUADS);
glColor3f(1.0f,0.0f,1.0f); // Set The Color To Violet
glVertex3f( 1.0f, 1.0f,-1.0f); // Top Right Of The Quad (Right)
glVertex3f( 1.0f, 1.0f, 1.0f); // Top Left Of The Quad (Right)
glVertex3f( 1.0f,-1.0f, 1.0f); // Bottom Left Of The Quad (Right)
glVertex3f( 1.0f,-1.0f,-1.0f);
glEnd();
glPopMatrix();
}

GLvoid ProcessSelection(int xPos, int yPos)
{
GLuint selectBuff[64];
GLint hits, viewport[4];

// Select buffer parameters
glSelectBuffer(64, selectBuff);
glGetIntegerv(GL_VIEWPORT, viewport);

// Enter to selection mode
glDisable(GL_LIGHTING);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glRenderMode(GL_SELECT);
glLoadIdentity();
// Set-up pick matrix
gluPickMatrix(xPos,viewport[3]-yPos,5,5,viewport);


// Set our perpective transformation matrix
gluPerspective(45.0f, (GLfloat)w/(GLfloat)h, 1.0, 425.0);

glMatrixMode(GL_MODELVIEW);

// Render all scene and fill selection buffer
DrawGLScene();

// Get hits and go back to normal rendering
hits = glRenderMode(GL_RENDER);

// Get first model, in selection buffer stack

glMatrixMode(GL_PROJECTION);

glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glGetDoublev (GL_MODELVIEW_MATRIX, CurentModelMatrix);
glGetDoublev (GL_PROJECTION_MATRIX, CurentProjMatrix);
gluUnProject ((GLdouble) xPos,
(GLdouble) yPos,
(GLdouble) zPos,
CurentModelMatrix,
CurentProjMatrix,
viewport,
&tempX,
&tempY,
&tempZ);


}
PLZ Help!! This is URGENT AAGHGHH

Bob
12-17-2002, 10:47 PM
You have different projection matrices when drawing and picking. Check out the two calls to gluPerspective.

shanedudddy2
12-18-2002, 12:50 PM
Changed both the gluperspective commands to the same but the problem is still the same.
Anybody got anyideas!! PlZ