简单环境下的实现代码
一、设置环境
1、打开深度测试
2、设置为透视投影
这点很重要,我的程序中因为交替使用了透视投影与正交投影,结果怎么也得不到正确的3D坐标,开始以为是网上查到的代码有问题,差点准备好好学下高等数学,自己写一个转换函数了。后来我想先在一个最简单的环境中调试代码,结果发现去掉正交投影的绘制代码后,3D坐标就立刻准确了。
所以在GetSelectRay之前,记得把投影模式设为透视?——但我试了,没有效果,如何在正交投影与透视投影
二、源代码(网上抄的,根据自己的代码改动了点)
void CGLScene::GetSelectRay(void)
{
GLint viewport[4];
GLdouble modelview[16];
GLdouble projection[16];
GLfloat winX, winY, winZ;
GLdouble posX, posY, posZ;
GLdouble Point3f[3]; //
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0,0,0, 0,0,-10, 0,1,0);
glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
glGetDoublev(GL_PROJECTION_MATRIX, projection);
glGetIntegerv(GL_VIEWPORT, viewport);
winX = (float)Mouse.x;
winY = (float)v