OpenGl学习笔记3——屏幕坐标(2维)转化为世界坐标(3维)

本文介绍了在OpenGL中遇到的一个问题,即在使用正交投影后无法正确获取3D坐标。通过排查,发现原因是之前使用正交投影绘制的二维纹理导致鼠标位置的深度值始终不变。作者建议在3D游戏中混合使用透视投影与正交投影时需要注意模式的匹配和管理,以避免类似问题。
摘要由CSDN通过智能技术生成

简单环境下的实现代码

一、设置环境

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

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值