首页 > 解决方案 > 哪些 OpenGL 函数在顶点着色器之前修改顶点位置?

问题描述

假设有一个 1000 像素宽、500 像素高的颜色渲染纹理。我在四个角(-1, -1, 0), (1, -1, 0), (-1, 1, 0),处绘制了一个四边形,(1, 1, 0)在顶点着色器中没有任何变换。

假设在这个唯一的绘制命令之前没有调用其他 GL 函数,这是否会默认覆盖整个纹理的表面?

哪些 OpenGL 函数(修改顶点位置)会导致这个四边形不再填满屏幕?

(我试图了解如何在顶点着色器之前弄乱顶点,所以我可以避免或使用正确的函数来始终映射它们,以便 NDC(-1, -1)表示(1, 1)整个表面)。

编辑: 如果位置没有改变,那么我也想知道如何在顶点着色器之前修改它们到渲染缓冲区的映射。例如,是否会(-1, -1, 0)可靠地引用渲染缓冲区左下角、(0, 0, 0)中间和(1, 1, 0)右上角的片段?

标签: c++opengl3dcoordinates

解决方案


“在顶点着色器之前”顶点数据不会发生任何事情。什么都不会发生,因为 OpenGL 不知道顶点属性的含义。它不知道属性 2 指的是什么;它不知道什么是位置、法线、纹理坐标或任何东西。就 OpenGL 而言,这一切都只是数据。赋予该数据意义的是您的顶点着色器。并且仅以您的顶点着色器定义的方式。

缓冲区对象的数据按照您的 VAO 指定的格式读取,并提供给处理这些顶点的顶点着色器调用。


推荐阅读