OpenGL中关于glOrtho的有关问题,
OpenGL中关于glOrtho的问题,高手进~~
这个问题一晚上了,没解决:
首先先说一下我对正投影视图的理解:
要想物体显示在屏幕上,必须保证两点:
1、物体各个顶点的坐标值经过坐标变换后必须介于调用glOrtho()函数中提供参数的范围内,即对于任何物体点的坐标x, y, z在经过变换后需满足 left <= x ' <= right, bottom <= y ' <= top, zNear <= z ' <= zFar;
2、单单第一点还不够,同时必须保证摄像机(眼睛)在朝glOrtho定义的立体空间中看,不然眼睛朝别的地方看,肯定不会显示在屏幕上了,可以调用gluLookAt设置眼睛的看向。
只要保证以上两点,就能是出于立体空间中的定点显示在屏幕上了,前提是glViewport的调用正常,一般是glViewport(0, 0, width, height),其中width和height分别为屏幕的宽度和高度,以像素为单位。
以上是我的理解。
现在我的具体问题如下,从一个文件中读入点云文件,在读入的过程中取得所有点云的包围盒,在具体的Render的时候代码如下:
/*
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(m_pbox-> GetXMin(), m_pbox-> GetXMax, m_pbox-> GetYMin(), m_pbox-> GetYMax(), m_pbox-> GetZMin(), m_pbox-> GetZMax());
/*m_pbox为指向包围盒的指针,GetXMin为取得最小的x值*/
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt((m_pbox-> GetXMin() + m_pbox-> GetXMax()) / 2.0,
(m_pbox-> GetYMin() + m_pbox-> GetYMax()) / 2.0,
m_pbox-> GetZMax() + 10.0,
(m_pbox-> GetXMin() + m_pbox-> GetXMax()) / 2.0,
(m_pbox-> GetYMin() + m_pbox-> GetYMax()) / 2.0,
(m_pbox-> GetZMin() + m_pbox-> GetZMax()) / 2.0,
0.0, 1.0, 0.0);
/*即将摄像机移动到正视于立体空间外*/
// render point clound vertext
*/
现在的问题是什么也显示不到,请问是什么原因?
谢谢
------解决方案--------------------
先用透时投影看看,透视投影比较好理解,首先排除其它因素。
------解决方案--------------------
你还没有设置视图函数glViewport,试图函数的设置要和glOrtho的设置保持形状的相似
我的QQ38230896
------解决方案--------------------
http://www.physdev.com/phpbb/cms_view_article.php?aid=25
以上文章,看看对你是否有帮助。
我个人认为,你用了glOrtho(),就不必再用gluLookAt()了。默认眼睛是在原点,看向Z的负轴
这个问题一晚上了,没解决:
首先先说一下我对正投影视图的理解:
要想物体显示在屏幕上,必须保证两点:
1、物体各个顶点的坐标值经过坐标变换后必须介于调用glOrtho()函数中提供参数的范围内,即对于任何物体点的坐标x, y, z在经过变换后需满足 left <= x ' <= right, bottom <= y ' <= top, zNear <= z ' <= zFar;
2、单单第一点还不够,同时必须保证摄像机(眼睛)在朝glOrtho定义的立体空间中看,不然眼睛朝别的地方看,肯定不会显示在屏幕上了,可以调用gluLookAt设置眼睛的看向。
只要保证以上两点,就能是出于立体空间中的定点显示在屏幕上了,前提是glViewport的调用正常,一般是glViewport(0, 0, width, height),其中width和height分别为屏幕的宽度和高度,以像素为单位。
以上是我的理解。
现在我的具体问题如下,从一个文件中读入点云文件,在读入的过程中取得所有点云的包围盒,在具体的Render的时候代码如下:
/*
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(m_pbox-> GetXMin(), m_pbox-> GetXMax, m_pbox-> GetYMin(), m_pbox-> GetYMax(), m_pbox-> GetZMin(), m_pbox-> GetZMax());
/*m_pbox为指向包围盒的指针,GetXMin为取得最小的x值*/
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt((m_pbox-> GetXMin() + m_pbox-> GetXMax()) / 2.0,
(m_pbox-> GetYMin() + m_pbox-> GetYMax()) / 2.0,
m_pbox-> GetZMax() + 10.0,
(m_pbox-> GetXMin() + m_pbox-> GetXMax()) / 2.0,
(m_pbox-> GetYMin() + m_pbox-> GetYMax()) / 2.0,
(m_pbox-> GetZMin() + m_pbox-> GetZMax()) / 2.0,
0.0, 1.0, 0.0);
/*即将摄像机移动到正视于立体空间外*/
// render point clound vertext
*/
现在的问题是什么也显示不到,请问是什么原因?
谢谢
------解决方案--------------------
先用透时投影看看,透视投影比较好理解,首先排除其它因素。
------解决方案--------------------
你还没有设置视图函数glViewport,试图函数的设置要和glOrtho的设置保持形状的相似
我的QQ38230896
------解决方案--------------------
http://www.physdev.com/phpbb/cms_view_article.php?aid=25
以上文章,看看对你是否有帮助。
我个人认为,你用了glOrtho(),就不必再用gluLookAt()了。默认眼睛是在原点,看向Z的负轴