【发布时间】:2019-05-21 20:03:59
【问题描述】:
假设有一个 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) 指向右上角?
【问题讨论】:
-
您到底观察到了什么?它没有填满整个屏幕或者你什么都看不到?请注意,z 坐标为 0。如果您使用深度测试,这可能会丢弃片段。
-
@Gilles-PhilippePaillé - 没有深度/模板测试,我主要是问这样我才能理解 OpenGL 如何在完全着色器之前修改位置,这样我就可以编写我的相机/绘图代码更多故意地。 (现在主要是“它以某种方式工作”)
-
好的,我明白了。不,没有任何东西可以修改 VBO 和顶点着色器开始之间的顶点坐标。您发送的数据就是您收到的数据。
-
@Gilles-PhilippePaillé - 噢,我明白了!这就说得通了。我已经编辑了这个问题,还询问如何将这些位置绘制到顶点着色器之外的不同片段位置或完全裁剪
-
@AnneQuinn "例如,(-1, -1, 0) 是否会可靠地引用渲染缓冲区左下角的片段,(0, 0, 0)中间,以及 (1, 1, 0) 到右上角?” 标准化设备坐标到帧缓冲区的映射由视口 (
glViewport) 定义。 (-1, -1) 是视口矩形的左下角, (1, 1) 是右上角。
标签: c++ opengl 3d coordinates