我最近在 OpenGL 中完成了一些示例,这导致我在空间中绘制了一些三角形-1 >= x <= 1
,-1 >= y <= 1
. 我需要做什么才能移动到正交视图?我需要执行哪些转换?我假设生成的变换将作为统一变量设置到顶点着色器中,然后应用于任何传入的顶点。
使用像素作为视图的比例(即 1024x768)还是使用逻辑单位(例如像素 x1000)是否明智?
我最近在 OpenGL 中完成了一些示例,这导致我在空间中绘制了一些三角形-1 >= x <= 1
,-1 >= y <= 1
. 我需要做什么才能移动到正交视图?我需要执行哪些转换?我假设生成的变换将作为统一变量设置到顶点着色器中,然后应用于任何传入的顶点。
使用像素作为视图的比例(即 1024x768)还是使用逻辑单位(例如像素 x1000)是否明智?
我需要做什么才能移动到正交视图?我需要执行哪些转换?
您必须应用正交投影。请注意,到目前为止您使用的恒等变换已经是正交的。
将转换过程分解为投影和模型视图转换是一个好主意。每个都由一个 4×4 矩阵描述,你说得对,它作为制服传递给顶点着色器。
典型的顶点着色器布局看起来像
#version 120 /* or something later */
attribute vec4 position;
uniform mat4 proj;
uniform mat4 mv;
varying vec4 vert_pos; // for later versions of GLSL replace 'varying' with 'out'
void main()
{
// order matters, matrix multiplication is not
vert_pos = proj * mv * position; commutative */
}
投影矩阵本身必须由您提供。您可以查看较旧的固定功能 OpenGL 规范,了解它们是如何实现的。或者您使用一些现成的图形数学库,例如→GLM或(自我广告)→linmath.h
模型视图变换用于设置视点和绘制到场景中的几何图形的位置。一般来说,模型视图通常因绘制的每个模型而异。Modelview 本身可以分解为模型和视图。该视图是某些人使用某种“lookAt”功能设置的。模型是几何放置部分。
投影是 OpenGL 的“镜头”,负责“正交”或“透视”或任何外观。
如上所述,要使用的特定投影是用户定义的,但通常遵循典型的转换矩阵,如旧 OpenGL 规范或图形数学库中的转换矩阵。只需查看一些较旧的 OpenGL 规范(比如 OpenGL-1.5 左右)来定义正交和截锥矩阵(它们可以在固定函数 glOrtho 和 glFrustum 中找到)。