mirror of
https://github.com/mouse0w0/lwjglbook-CN-Translation.git
synced 2025-08-23 04:35:29 +08:00
Update 04-07 and 09 chapters
This commit is contained in:
@@ -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[]{
|
||||
|
Reference in New Issue
Block a user