我知道OpenGL中的相机被定义为在负Z方向上看。因此,在一个简单的例子,我想象的要呈现我的顶点,他们必须定义类似以下内容:OpenGL:任何顶点Z坐标都必须为负数吗?
rawverts = {
0.0f, 0.0f, -1.0f,
0.0f, 0.5f, -1.0f,
0.5f, 0.0f, -1.0f,
};
但是,绝对没有导游会告诉我答案。无论我看到什么,“Hello三角形”示例都是在z坐标保持为0的情况下制作的,每当定义更复杂的网格时,甚至不显示坐标。我仍然不知道他们的坐标可能被绘制到屏幕上。举个例子,GLM ::观点:
glm::mat4 projectionMatrix = glm::perspective(
FoV, // The horizontal Field of View, in degrees : the amount of "zoom". Think "camera lens". Usually between 90° (extra wide) and 30° (quite zoomed in)
4.0f/3.0f, // Aspect Ratio. Depends on the size of your window. Notice that 4/3 == 800/600 == 1280/960, sounds familiar ?
0.1f, // Near clipping plane. Keep as big as possible, or you'll get precision issues.
100.0f // Far clipping plane. Keep as little as possible.
);
但是,如何才能裁剪平面与任何积极值定义?相机朝向-Z方向!此外,如果我在-1和-4等创建近/远裁剪平面,现在是否使任何大于-1或小于-4的Z坐标无效?或者,原始的z坐标只能在0和-1之间有效(同样,z坐标绝对不能是正数?)..?
但让我们假设实际发生的事情是,OpenGL(或glm)采用剪切平面值并暗中否定它们。所以,我的-1到-4变成1到4.现在这是否会使任何小于1且超过4的Z坐标无效,因此0.0f, 0.0f, -1.0f
将不会被绘制在屏幕上?
在这个阶段,我会把答案视为一本书的指针或一些有关此问题的资料。
近和远总是被定义为距相机的距离,而不是空间中的某些点。否则,在移动相机时剪切平面会遍布整个地方。恰恰相反,相机在默认情况下沿着-z查看。 – weltensturm