我正在关注this教程,学习 OpenGL es 2.0。 这些信息(加上许多其他教程)让我意识到:顶点必须在数组中声明,该数组必须通过 FloatBuffer 操作发送到 GPU 内存,openGL 必须从那里拾取它们。 接下来的内容对我来说有点晦涩难懂。问题是:一旦顶点存在(在 GPU 内存中),java 程序的哪一部分将用来获取这些数据?着色器和 fragment 代码? vertexattrib 数组命令?
最佳答案
OpenGL 在非常基础的层面上工作,在您发出绘制调用(例如 glDrawArrays
或 glDrawElements
)之前,不会发生太多事情。大多数其他调用只是设置绘制调用将使用的状态。状态最重要的部分是您已经看到的:
glVertexAttribArray
和相关调用用于指定用于绘制调用的顶点数据。glUseProgram
,以及之前用于构建程序的所有调用,指定将为您的绘制调用运行哪些着色器。
一旦您设置了所有这些状态并发出绘制调用,您就可以启动整个机器。如果您想了解这里发生的所有事情的详细信息,您应该能够通过“OpenGL 渲染管道”等搜索词或在任何 OpenGL 书籍中找到好的 Material 。大致来说,主要步骤如下:
- 固定功能单元根据您使用
glVertexAttribArray
设置的状态和相关调用来获取顶点数据,并将该数据提供给顶点着色器。 - 您设置的顶点着色器在其
属性
变量中接收此顶点数据,并对其进行处理。 - 顶点着色器生成的经过处理的顶点由固定功能单元进行光栅化,该单元决定需要渲染哪些像素。
- 这些像素(又名 fragment )被输入 fragment 着色器。
- 您设置的 fragment 着色器会处理这些 fragment ,并输出 fragment 的颜色。
- fragment 着色器生成的颜色将写入帧缓冲区。
它的内容比我在这里列出的要多,但我希望这能帮助您了解基础知识。
关于java - OpenGL es 2. Java for Android 中的顶点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23458196/