0

我最近在 OpenGL 中完成了一些示例,这导致我在空间中绘制了一些三角形-1 >= x <= 1-1 >= y <= 1. 我需要做什么才能移动到正交视图?我需要执行哪些转换?我假设生成的变换将作为统一变量设置到顶点着色器中,然后应用于任何传入的顶点。

使用像素作为视图的比例(即 1024x768)还是使用逻辑单位(例如像素 x1000)是否明智?

4

1 回答 1

3

我需要做什么才能移动到正交视图?我需要执行哪些转换?

您必须应用正交投影。请注意,到目前为止您使用的恒等变换已经是正交的。

将转换过程分解为投影和模型视图转换是一个好主意。每个都由一个 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 中找到)。

于 2012-10-09T13:04:36.663 回答