【发布时间】:2015-12-20 15:53:58
【问题描述】:
我正在尝试了解我应该将相机位置放置在观察函数(或模型矩阵中的对象)中多远,才能在顶点着色器中传递像素完美的坐标。
这对于正交投影矩阵来说实际上很简单,但我无法想象数学如何用于透视投影。
这是我正在使用的透视矩阵:
glm::mat4 projection = glm::perspective(45.0f, (float)SCR_WIDTH / (float)SCR_HEIGHT, 0.1f, 10000.0f);
着色器中的顶点乘法很简单:
gl_Position = projection * view * model * vec4(position.xy, 0.0f, 1.0);
我基本上是想在屏幕上显示一个需要旋转的四边形并显示透视效果(因此我不能使用正交投影),但我想在像素坐标中指定它的位置和大小应该出现在屏幕上。
【问题讨论】:
-
你真正想要达到什么目的?以像素坐标指定梯形的四个角,并且您想要对整个事物进行透视校正插值?如果是这样,专注于投影矩阵有点误导(当然可以将任意单应性放入投影矩阵,但经典的
perspective函数在这种情况下没有帮助)。 -
我试图弄清楚如何在屏幕像素中表达顶点坐标,以在屏幕上以给定的像素位置和像素大小显示四边形,这样一旦旋转它,我仍然可以实现效果我用普通投影矩阵得到的透视所以基本上是的,这不是关于透视,也不是关于距离,我只是想找到一种方法来指定屏幕像素中的坐标并仍然达到那种效果
-
所以,如果我没猜错的话,您只想在像素坐标中指定一个 不失真 矩形,然后再将其旋转(进入深度)?
-
是的,我想在 vbo 中使用像素坐标指定顶点属性,但仍然能够旋转/缩放/平移对象,而透视效果仍然适用。再说一次,我想在像素坐标中指定它的开始位置和宽度/高度,一旦我设置了一个视图矩阵并将它与投影矩阵结合使用,我不知道该怎么做
标签: c++ opengl matrix glm-math