我已经按照我在https://learnopengl.com/上找到的指南进行操作,并设法在窗口上渲染了一个三角形,但整个过程对我来说似乎过于复杂。一直在互联网上搜索,发现了很多类似的问题,但它们似乎都过时了,而且没有一个给出满意的答案。
我已经阅读了上面提到的网站上的指南Hello Triangle,其中有一张解释图形管道的图片,由此我了解了为什么在屏幕上绘制三角形这样看似简单的任务需要如此多的步骤。
我还阅读了同一站点的坐标系统指南,它告诉我什么是 OpenGL 使用的“奇怪的(对我来说)坐标”(NDC)以及它为什么使用它。

(这是上面提到的指南中的图片,我认为它对于描述我的问题很有用。)
我想要的只是进行一些 2D 渲染(无 z 轴)并且屏幕尺寸已知(固定),因此我不明白为什么我应该使用标准化坐标系而不是绑定到屏幕的特殊坐标系。
例如:在 320x240 屏幕上,(0,0)代表左上角像素,(319,239)代表右下角像素。它不需要完全像我所描述的那样,其想法是每个整数坐标 = 屏幕上的相应像素。
我知道可以设置这样一个坐标系供我自己使用,但是坐标会四处变换并最终返回到屏幕空间 -这就是我首先拥有的。所有这些对我来说似乎都是浪费工作,而且坐标转换时不会导致精度损失吗?
引用坐标系指南(上图):
- 坐标位于视图空间后,我们希望将它们投影到剪辑坐标。剪辑坐标被处理为 -1.0 和 1.0 范围,并确定哪些顶点将最终出现在屏幕上。
因此,考虑在 1024x768 屏幕上,我将剪辑坐标定义为 (0,0) 到 (1024,678),其中:
(0,0)--------(1,0)--------(2,0)
| | |
| First | |
| Pixel | |
| | |
(0,1)--------(1,1)--------(2,1) . . .
| | |
| | |
| | |
| …Run Code Online (Sandbox Code Playgroud)