From 6b666587b142e15b55301344d2caecf1baf3dbd3 Mon Sep 17 00:00:00 2001 From: Mouse <937279156@qq.com> Date: Sat, 16 Jun 2018 00:04:27 +0800 Subject: [PATCH] Update --- source/05-more-on-rendering.md | 309 +++++++++++++++++++++++++ source/_static/05/coloured_quad.png | Bin 0 -> 20471 bytes source/_static/05/coordinates.png | Bin 0 -> 5325 bytes source/_static/05/dolphin.png | Bin 0 -> 19881 bytes source/_static/05/quad_coordinates.png | Bin 0 -> 8611 bytes source/_static/05/quad_rendered.png | Bin 0 -> 9540 bytes source/index.rst | 1 + 7 files changed, 310 insertions(+) create mode 100644 source/05-more-on-rendering.md create mode 100644 source/_static/05/coloured_quad.png create mode 100644 source/_static/05/coordinates.png create mode 100644 source/_static/05/dolphin.png create mode 100644 source/_static/05/quad_coordinates.png create mode 100644 source/_static/05/quad_rendered.png diff --git a/source/05-more-on-rendering.md b/source/05-more-on-rendering.md new file mode 100644 index 0000000..fc8adb1 --- /dev/null +++ b/source/05-more-on-rendering.md @@ -0,0 +1,309 @@ +# 更多关于渲染的事情(More on Rendering) + +本章中,我们将继续讨论OpenGL如何渲染物体。为了整理代码,我们要创建一个名为`Mesh`的新类,把一个坐标数组作为输入,创建VBO和VAO对象,把VBO和VAO对象加载到显卡中。 + +```java +package org.lwjglb.engine.graph; + +import java.nio.FloatBuffer; +import static org.lwjgl.opengl.GL11.*; +import static org.lwjgl.opengl.GL15.*; +import static org.lwjgl.opengl.GL20.*; +import static org.lwjgl.opengl.GL30.*; +import org.lwjgl.system.MemoryUtil; + +public class Mesh { + + private final int vaoId; + + private final int vboId; + + private final int vertexCount; + + public Mesh(float[] positions) { + FloatBuffer verticesBuffer = null; + try { + verticesBuffer = MemoryUtil.memAllocFloat(positions.length); + vertexCount = positions.length / 3; + verticesBuffer.put(positions).flip(); + + vaoId = glGenVertexArrays(); + glBindVertexArray(vaoId); + + vboId = glGenBuffers(); + glBindBuffer(GL_ARRAY_BUFFER, vboId); + glBufferData(GL_ARRAY_BUFFER, verticesBuffer, GL_STATIC_DRAW); + glVertexAttribPointer(0, 3, GL_FLOAT, false, 0, 0); + glBindBuffer(GL_ARRAY_BUFFER, 0); + + glBindVertexArray(0); + } finally { + if (verticesBuffer != null) { + MemoryUtil.memFree(verticesBuffer); + } + } + } + + public int getVaoId() { + return vaoId; + } + + public int getVertexCount() { + return vertexCount; + } + + public void cleanUp() { + glDisableVertexAttribArray(0); + + // 删除VBO + glBindBuffer(GL_ARRAY_BUFFER, 0); + glDeleteBuffers(vboId); + + // 删除VAO + glBindVertexArray(0); + glDeleteVertexArrays(vaoId); + } +} +``` + +我们将在`DummyGame`类中实例化`Mesh`,从`Renderer`的`init`方法中删除VAO和VBO代码。在`Renderer`类的渲染方法中也将接收一个`Mesh`对象来渲染。`cleanup`方法也被简化,因为`Mesh`类已经提供了一个释放VAO和VBO资源的方法。 + +```java +public void render(Mesh mesh) { + clear(); + + if ( window.isResized() ) { + glViewport(0, 0, window.getWidth(), window.getHeight()); + window.setResized(false); + } + + shaderProgram.bind(); + + // 绘制 + glBindVertexArray(mesh.getVaoId()); + glEnableVertexAttribArray(0); + glDrawArrays(GL_TRIANGLES, 0, mesh.getVertexCount()); + + // 还原状态 + glDisableVertexAttribArray(0); + glBindVertexArray(0); + + shaderProgram.unbind(); +} + +public void cleanup() { + if (shaderProgram != null) { + shaderProgram.cleanup(); + } +} +``` + +值得注意的一点是: + +```java +glDrawArrays(GL_TRIANGLES, 0, mesh.getVertexCount()); +``` + +`Mesh`类通过将坐标数组除以3来计算顶点的数目(因为我们使用X,Y和Z坐标)。现在,我们可以渲染更复杂的形状。来渲染一个四边形吧。一个四边形可以用两个三角形来组成,如图所示。 + +![Quad coordinates](_static/05/quad_coordinates.png) + +正如你所看到的,这两个三角形中的每一个都由三个顶点组成。第一个三角形由顶点V1、V2和V4(橙色的点)组成,第二个三角形由顶点V4,V2和V3(绿色的点)组成。顶点以逆时针顺序连接,因此要传递的浮点数数组应该是[V1, V2, V4, V4, V2, V3]。因此,`DummyGame`的`init`方法将是这样的: + +```java +@Override +public void init() throws Exception { + renderer.init(); + float[] positions = new float[]{ + -0.5f, 0.5f, 0.0f, + -0.5f, -0.5f, 0.0f, + 0.5f, 0.5f, 0.0f, + 0.5f, 0.5f, 0.0f, + -0.5f, -0.5f, 0.0f, + 0.5f, -0.5f, 0.0f, + }; + mesh = new Mesh(positions); +} +``` + +现在你应该可以看到这样一个四边形: + +![Quad rendered](_static/05/quad_rendered.png) + +我们完成了吗?没有。上面的代码仍然存在一些问题。我们使用了重复的坐标来表示四边形。我们传递了两次V2和V4坐标。这是个小形状,它可能不是什么大问题,但想象一个更复杂的3D模型,我们会多次重复传递坐标。记住,我们使用三个浮点数表示顶点的位置,但稍后我们将需要更多的数据来表示纹理等。考虑到在更复杂的形状中,三角形直接共享的顶点数量可以更高,如图所示(其中顶点可以在六个三角形之间共享)。 + +![Dolphin](_static/05/dolphin.png) + +最后,我们需要更多的内存来储存重复的数据,这就是索引缓冲区(`Index Buffer`)发挥作用的地方。为了绘制四边形,我们只需要以这样的方式指定每个顶点:V1, V2, V3, V4。每个顶点在数组中都有一个位置。V1在位置0上,V2在位置1上等。 + +| V1 | V2 | V3 | V4 | +| --- | --- | --- | --- | +| 0 | 1 | 2 | 3 | + +然后,我们通过引用它们的位置来指定这些顶点的顺序: + +| 0 | 1 | 3 | 3 | 1 | 2 | +| --- | --- | --- | --- | --- | --- | +| V1 | V2 | V4 | V4 | V2 | V3 | + +因此,我们需要修改`Mesh`类来接收另一个参数,一个索引数组,现在绘制的顶点数量是该索引数组的长度。 + +```java +public Mesh(float[] positions, int[] indices) { + vertexCount = indices.length; +``` + +在创建了储存坐标的VBO之后,我们需要创建另一个VBO来保存索引。因此,重命名持有坐标的VBO的ID的变量名,并为索引VBO(`idxVboId`)创建一个ID。创建VBO的过程相似,但现在的类型是`GL_ELEMENT_ARRAY_BUFFER`。 + +```java +idxVboId = glGenBuffers(); +indicesBuffer = MemoryUtil.memAllocInt(indices.length); +indicesBuffer.put(indices).flip(); +glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, idxVboId); +glBufferData(GL_ELEMENT_ARRAY_BUFFER, indicesBuffer, GL_STATIC_DRAW); +memFree(indicesBuffer); +``` + +因为我们是在处理整数,所有需要创建一个`IntBuffer`而不是一个`FloatBuffer`。 + +就是这样。现在VAO包含两个VBO,一个储存坐标,另一个储存索引。`Mesh`类的`cleanUp`方法也必须考虑到要释放另一个VBO。 + +```java +public void cleanUp() { + glDisableVertexAttribArray(0); + + // 删除 VBO + glBindBuffer(GL_ARRAY_BUFFER, 0); + glDeleteBuffers(posVboId); + glDeleteBuffers(idxVboId); + + // 删除 VAO + glBindVertexArray(0); + glDeleteVertexArrays(vaoId); +} +``` + +最后,我们需要修改`glDrawArrays`调用的方法: + +```java +glDrawArrays(GL_TRIANGLES, 0, mesh.getVertexCount()); +``` + +改为调用`glDrawElements`方法: + +```java +glDrawElements(GL_TRIANGLES, mesh.getVertexCount(), GL_UNSIGNED_INT, 0); +``` + +方法的参数如下: +* mode: 指定渲染的图元类型,现在是三角形。没有什么变化。 +* count: 指定要渲染的顶点数。 +* type: 指定索引数据的类型。现在是无符号整数型。 +* indices: 指定要开始使用索引渲染的数据偏移量。 + +现在可以使用新的和更有效的方法来绘制复杂的模型了,仅需指定索引。 + +```java +public void init() throws Exception { + renderer.init(); + float[] positions = new float[]{ + -0.5f, 0.5f, 0.0f, + -0.5f, -0.5f, 0.0f, + 0.5f, -0.5f, 0.0f, + 0.5f, 0.5f, 0.0f, + }; + int[] indices = new int[]{ + 0, 1, 3, 3, 1, 2, + }; + mesh = new Mesh(positions, indices); +} +``` + +现在给示例代码增加颜色吧。我们把另一组浮点数传递给`Mesh`类,它储存了四边形中每个顶点的颜色。 + +```java +public Mesh(float[] positions, float[] colours, int[] indices) { +``` + +为了使用该数组,我们需要创建另一个VBO,它将与我们的VAO相关联。 + +```java +// 颜色 VBO +colourVboId = glGenBuffers(); +FloatBuffer colourBuffer = memAllocFloat(colours.length); +colourBuffer.put(colours).flip(); +glBindBuffer(GL_ARRAY_BUFFER, colourVboId); +glBufferData(GL_ARRAY_BUFFER, colourBuffer, GL_STATIC_DRAW); +memFree(colourBuffer); +glVertexAttribPointer(1, 3, GL_FLOAT, false, 0, 0); +``` + +请注意`glVertexAttribPointer`方法的调用,第一个参数现在是“1”。这是着色器希望数据的位置。当然,因为增加了一个VBO,所以我们需要在`cleanUp`方法中释放它。 + +下一步是修改着色器。顶点着色器现在需要两个参数,坐标(位置0)和颜色(位置1)。顶点着色器将只输出接收到的颜色,因此这可以由片元着色器处理。 + +```glsl +#version 330 + +layout (location=0) in vec3 position; +layout (location=1) in vec3 inColour; + +out vec3 exColour; + +void main() +{ + gl_Position = vec4(position, 1.0); + exColour = inColour; +} +``` + +现在,片元着色器输入由顶点着色器处理的颜色,并使用它来生成颜色。 + +```glsl +#version 330 + +in vec3 exColour; +out vec4 fragColor; + +void main() +{ + fragColor = vec4(exColour, 1.0); +} +``` + +最后要做的是修改渲染代码,使其使用第二个数据数组: + +```java +public void render(Window window, Mesh mesh) { + clear(); + + if ( window.isResized() ) { + glViewport(0, 0, window.getWidth(), window.getHeight()); + window.setResized(false); + } + + shaderProgram.bind(); + + // Draw the mesh + glBindVertexArray(mesh.getVaoId()); + glEnableVertexAttribArray(0); + glEnableVertexAttribArray(1); + glDrawElements(GL_TRIANGLES, mesh.getVertexCount(), GL_UNSIGNED_INT, 0); + // ... +``` + +你可以看到,在渲染过程中,我们需要启用位于位置1的VAO属性。现在可以把颜色传递给`Mesh`类,以便给四边形添加颜色。 + +```java +float[] colours = new float[]{ + 0.5f, 0.0f, 0.0f, + 0.0f, 0.5f, 0.0f, + 0.0f, 0.0f, 0.5f, + 0.0f, 0.5f, 0.5f, +}; +``` + +然后会得到这样一个色彩鲜艳的四边形。 + +![Coloured quad](_static/05/coloured_quad.png) + diff --git a/source/_static/05/coloured_quad.png b/source/_static/05/coloured_quad.png new file mode 100644 index 0000000000000000000000000000000000000000..cebeb3e5e7873f9453eec94094607679bf9ba631 GIT binary patch literal 20471 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 literal 0 HcmV?d00001 diff --git a/source/_static/05/coordinates.png b/source/_static/05/coordinates.png new file mode 100644 index 0000000000000000000000000000000000000000..3c4c5cc716361bb0b9d799bea639a4702bdc76d6 GIT binary patch literal 5325 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 literal 0 HcmV?d00001 diff --git a/source/_static/05/dolphin.png b/source/_static/05/dolphin.png new file mode 100644 index 0000000000000000000000000000000000000000..f0965915e88f31e8ad0047e1225dab18f5670553 GIT binary patch literal 19881 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 U=2lV$*BXt!_7$xP4Tp&T14pGXO8@`> literal 0 HcmV?d00001 diff --git a/source/_static/05/quad_coordinates.png b/source/_static/05/quad_coordinates.png new file mode 100644 index 0000000000000000000000000000000000000000..c000e3a7cb41d82723ceaba72724d8599acb5208 GIT binary patch literal 8611 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 Ppa80hS_+l&mWclW3VSt1 literal 0 HcmV?d00001 diff --git a/source/index.rst b/source/index.rst index ef3537c..f73b082 100644 --- a/source/index.rst +++ b/source/index.rst @@ -9,3 +9,4 @@ 02-the-game-loop 03-a-brief-about-coordinates 04-rendering + 05-more-on-rendering \ No newline at end of file