假设存在一个彩色渲染纹理,其宽度为1000像素,高度为500像素。然后在顶点着色器中不进行任何变换的情况下,在四个角(-1, -1, 0)
,(1, -1, 0)
,(-1, 1, 0)
,(1, 1, 0)
处绘制一个顶点为顶点的四边形。
默认情况下,假设在此唯一的draw命令之前未调用其他任何GL功能,默认情况下是否会始终覆盖整个纹理的表面?
哪些OpenGL功能(修改顶点位置)可能导致该四边形不再占据屏幕?
(我试图了解如何在顶点着色器之前将顶点弄乱,所以我可以避免或使用正确的函数来始终映射它们,因此NDC (-1, -1)
至(1, 1)
代表了整个表面)。
edit:如果位置没有改变,那么我也想知道在顶点着色器之前如何修改它们到渲染缓冲区的映射。例如,(-1, -1, 0)
是否可靠地引用渲染缓冲区左下角的片段,(0, 0, 0)
指向中间,(1, 1, 0)
指向右上角?
答案 0 :(得分:3)
“在顶点着色器之前”,顶点数据没有任何反应。什么也没发生,因为OpenGL不知道顶点属性 mean 是什么。它不知道属性2是指什么。它不知道什么是位置,法线,纹理坐标或其他任何内容。就OpenGL而言,全都是数据。使该数据有意义的是您的顶点着色器。而且只能按照您的顶点着色器定义的方式。
按照VAO指定的格式读取缓冲区对象中的数据,并将其提供给处理这些顶点的顶点着色器调用。