Update 04-07 and 09 chapters

This commit is contained in:
Mouse
2019-12-27 16:44:15 +08:00
parent 9c0958eb78
commit 41f0fcf136
5 changed files with 8 additions and 51 deletions

View File

@@ -30,7 +30,8 @@ public class Mesh {
vboId = glGenBuffers();
glBindBuffer(GL_ARRAY_BUFFER, vboId);
glBufferData(GL_ARRAY_BUFFER, verticesBuffer, GL_STATIC_DRAW);
glBufferData(GL_ARRAY_BUFFER, verticesBuffer, GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, false, 0, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
@@ -79,11 +80,9 @@ public void render(Mesh mesh) {
// 绘制
glBindVertexArray(mesh.getVaoId());
glEnableVertexAttribArray(0);
glDrawArrays(GL_TRIANGLES, 0, mesh.getVertexCount());
// 还原状态
glDisableVertexAttribArray(0);
glBindVertexArray(0);
shaderProgram.unbind();
@@ -232,11 +231,11 @@ FloatBuffer colourBuffer = memAllocFloat(colours.length);
colourBuffer.put(colours).flip();
glBindBuffer(GL_ARRAY_BUFFER, colourVboId);
glBufferData(GL_ARRAY_BUFFER, colourBuffer, GL_STATIC_DRAW);
memFree(colourBuffer);
glEnableVertexAttribArray(1);
glVertexAttribPointer(1, 3, GL_FLOAT, false, 0, 0);
```
请注意`glVertexAttribPointer`方法的调用第一个参数现在是“1”这是着色器期望数据的位置。当然因为增加了一个VBO所以我们需要在`cleanUp`方法中释放它。
请注意`glVertexAttribPointer`方法的调用第一个参数现在是“1”这是着色器期望数据的位置。当然,由于增加了一个VBO我们需要在`cleanUp`方法中释放它。可以看到我们需要在渲染期间启用位置1处的VAO属性
接下来是修改着色器。顶点着色器现在需要两个参数坐标位置0和颜色位置1。顶点着色器将只输出接收到的颜色以便片元着色器可以对其进行处理。
@@ -271,26 +270,7 @@ void main()
最后要做的是修改渲染代码以使用第二个数据数组:
```java
public void render(Window window, Mesh mesh) {
clear();
if ( window.isResized() ) {
glViewport(0, 0, window.getWidth(), window.getHeight());
window.setResized(false);
}
shaderProgram.bind();
// 绘制网格
glBindVertexArray(mesh.getVaoId());
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
glDrawElements(GL_TRIANGLES, mesh.getVertexCount(), GL_UNSIGNED_INT, 0);
// ...
```
在渲染过程中你可以看到我们需要启用位于位置1的VAO属性。现在可以将如下所示颜色数组传给`Mesh`类,给正方形添加点颜色。
我们现在可以将如下所示的颜色数组传递给`Mesh`类,为正方形添加一些颜色。
```java
float[] colours = new float[]{