3D 좌표를 화면 좌표로 변환하는 데 문제가 있습니다. 구의 중심을 화면 좌표로 변환해야합니다. 내 코드는 여기에 있습니다 :OpenGL에서 3D 좌표를 화면 좌표로 변환
// OpenGL problem
#ifdef __APPLE__
# include <GLUT/glut.h>
#else
# include <GL/glut.h>
#endif
void passive(int,int);
void reshape(int,int);
void init(void);
void display(void);
void camera(void);
int cursorX,cursorY,width,height;
double centerX,centerY,centerZ;
//GLfloat modelviewMatrix[16],projectionMatrix[16];
GLdouble modelviewMatrix[16],projectionMatrix[16];
GLint viewport[4];
int main (int argc,char **argv) {
glutInit (&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGBA);
glutInitWindowSize(1364,689);
glutInitWindowPosition(0,0);
glutCreateWindow("Sample");
init();
glutDisplayFunc(display);
glutIdleFunc(display);
glutPassiveMotionFunc(passive);
glutReshapeFunc(reshape);
glutMainLoop();
return 0;
}
void display() {
glClearColor (0.0,0.0,0.0,1.0);
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// Render 3D content
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60,(GLfloat)width/(GLfloat)height,1.0,100.0); // create 3D perspective projection matrix
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
camera();
glTranslatef(-6,-2,0);
glColor3f(1,0,0);
glutSolidSphere(5,50,50);
glPopMatrix();
glGetDoublev(GL_MODELVIEW_MATRIX, modelviewMatrix);
glGetDoublev(GL_PROJECTION_MATRIX, projectionMatrix);
glGetIntegerv(GL_VIEWPORT, viewport);
// get 3D coordinates based on window coordinates
gluProject(-6, -2, 0, modelviewMatrix, projectionMatrix, viewport, ¢erX, ¢erY, ¢erZ);
// Render 2D content
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0, width,height, 0); // create 2D orthographic projection matrix
glMatrixMode(GL_MODELVIEW);
glColor3f(1,1,1);
glBegin(GL_LINES);
glVertex2f(centerX,centerY); // coordinate of center of the sphere in orthographic projection
glVertex2f(cursorX,cursorY);
glEnd();
glutSwapBuffers();
}
void camera(void) {
glRotatef(0.0,1.0,0.0,0.0);
glRotatef(0.0,0.0,1.0,0.0);
glTranslated(0,0,-20);
}
void init(void) {
glEnable (GL_DEPTH_TEST);
glEnable (GL_BLEND);
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_COLOR_MATERIAL);
}
void reshape(int w, int h) {
width=w; height=h;
}
void passive(int x1,int y1) {
cursorX=x1; cursorY=y1;
}
내 코드에서 centerX와 centerY 좌표가 화면 밖으로 나옵니다. 구의 중심과 마우스 포인터 사이에 선을 그려야합니다. 코드를 수정하면 제대로 작동합니까?
어떻게 이런 일에서 어떤 다른 [질문의 해상도를 확인하기위한 내 기능 당신은 지난 달에 물었다?] (http://stackoverflow.com/questions/9926763/mapping-coordinates-from-3d-perspective-projection-to-2d-orthographic-projection) –
그 스레드에 단 하나의 대답이있었습니다. 그것을 시도했지만 작동시키지 못했습니다. 해당 스레드에서 제안 된 내용을 포함하도록 코드가 수정되었습니다. 아직도 이상한 결과를 얻고 있습니다. –
당신은 좋은 대답을 얻지 못했기 때문에 똑같은 질문을 계속하지 않습니다. –