c++ - 哪些 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)
右上角的片段?
解决方案
“在顶点着色器之前”顶点数据不会发生任何事情。什么都不会发生,因为 OpenGL 不知道顶点属性的含义。它不知道属性 2 指的是什么;它不知道什么是位置、法线、纹理坐标或任何东西。就 OpenGL 而言,这一切都只是数据。赋予该数据意义的是您的顶点着色器。并且仅以您的顶点着色器定义的方式。
缓冲区对象的数据按照您的 VAO 指定的格式读取,并提供给处理这些顶点的顶点着色器调用。
推荐阅读
- php - Laravel如何使用auth:user()返回选定的列
- angular - 在构造函数中订阅服务主题的 Jasmine 单元测试角度组件给出无法读取未定义的属性订阅
- python - Python:我们应该什么时候命名我们传递的参数?
- android - 联系 API 时出错,com.google.android.gms.tasks.RuntimeExecutionException:com.google.android.gms.api.ApiException: 13: 错误
- c++ - 尽管注释掉了所需的头文件,为什么这个 C++ 程序仍能编译和运行?
- angular - Angular 6 子组件不会在 LayoutComponent 中打开
- visual-studio-2017 - Visual Studio 2017 ClickOnce 证书签名已禁用
- c# - 获取所有 Google 电子表格
- ruby-on-rails - 如何为可以是主机、客户或两者兼有的用户建模?导轨
- c# - Unity3D 脚本运行时版本更改给出了奇怪的错误