查看: 2939|回复: 5

怎么得到glviewport()确定的视区别换矩阵?

[复制链接]

该用户从未签到

发表于 2008-11-19 22:05:20 | 显示全部楼层 |阅读模式
怎么得到glviewport()确定的视区别换矩阵?

我试验了一下
  glViewport(0, 0, 1, 1);
  GLdouble projectiont[16];

glGetDoublev(GL_VIEWPORT,projectiont);

得到结果如下
0
0
1
1
-9.25596e+061
-9.25596e+061
-9.25596e+061
-9.25596e+061
-9.25596e+061
-9.25596e+061
-9.25596e+061
-9.25596e+061
-9.25596e+061
-9.25596e+061
-9.25596e+061
-9.25596e+061

以上结果是错误的

按计算机图形学书本上的推导,在这种情况下应该是
0.5
0
0
0
0
0.5
0
0
0
0
0.5
0
0.5
0.5
0.5
0


请问应该怎么才能得到正确的视区变换矩阵?

该用户从未签到

发表于 2008-11-20 00:13:47 | 显示全部楼层
事实上这不是一个OpenGL的论坛和讨论区。不过您的问题我有一点疑惑:
glGetDoublev(GL_VIEWPORT,projectiont);
这是否是笔误?GL_VIEWPORT得到的只有视口相关的四个值,x,y,宽,高;
您似乎是想用4x4的projectiont数组取得投影矩阵的数据,这样的话请使用 GL_PROJECTION_MATRIX 枚举量

该用户从未签到

发表于 2008-11-20 01:35:17 | 显示全部楼层
  1. glGetDoublev( GL_MODELVIEW_MATRIX, modelview );
  2. glGetDoublev( GL_PROJECTION_MATRIX, projection );
  3. glGetIntegerv( GL_VIEWPORT, viewport );
复制代码
楼主把这些函数搞混搅了吧~~~~~~

该用户从未签到

 楼主| 发表于 2008-11-20 15:46:28 | 显示全部楼层
事实上这不是一个OpenGL的论坛和讨论区。不过您的问题我有一点疑惑:
glGetDoublev(GL_VIEWPORT,projectiont);
这是否是笔误?GL_VIEWPORT得到的只有视口相关的四个值,x,y,宽,高;
您似乎是想用4x4的projectiont数组取得投影矩阵的数据,这样的话请使用 枚举量
-----------
多谢,虽然不是opengl,不过osg也是在opengl的基础上吧

世界坐标--投影坐标--然后再规范化---再到视口坐标

GL_PROJECTION_MATRIX 得到的是规范化后的投影矩阵

那么规范化后的投影矩阵需要向视口转换,这就需要一个视口转换矩阵
当然如果不用opengl里面的函数,我可以自己推导出来.
现在请问,这个投影坐标再向视口转换的矩阵怎么直接用opengl里面的函数得到?

该用户从未签到

发表于 2008-11-20 16:45:03 | 显示全部楼层
您想得到计算变换用的VPW矩阵的话,可以直接用ModelViewMatrix * ProjectionMatrix * WindowMatrix,前两者无论OSG还是OpenGL都很容易得到,窗口矩阵可以理解成单位阵放大到(w/2,h/2)之后再平移(x,y,0)得到的矩阵。

这之后,计算世界坐标任意点 v 在视口中位置 v',有 v' = v * VPW
至于是否有直接的OpenGL函数可以得到,这个我想并不重要。

该用户从未签到

 楼主| 发表于 2008-11-20 17:06:39 | 显示全部楼层
您想得到计算变换用的VPW矩阵的话,可以直接用ModelViewMatrix * ProjectionMatrix * WindowMatrix,前两者无论OSG还是OpenGL都很容易得到,窗口矩阵可以理解成单位阵放大到(w/2,h/2)之后再平移(x,y,0)得到的矩阵。

这之后,计算世界坐标任意点 v 在视口中位置 v',有 v' = v * VPW
至于是否有直接的OpenGL函数可以得到,这个我想并不重要。
------------
多谢,这样的话,我想应该是不能直接得到窗口矩阵的,那就直接推导了

结贴!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表