LWJGL教程07 - 上色

让顶点拥有颜色

修改Mesh的构造函数,传入一个浮点数组。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public Mesh(float[] vertices,float[] colors, int[] indices) {
[...]

// 颜色
vboId = glGenBuffers();
FloatBuffer colourBuffer = MemoryUtil.memAllocFloat(colors.length);
colourBuffer.put(colors).flip();
glBindBuffer(GL_ARRAY_BUFFER, vboId);
glBufferData(GL_ARRAY_BUFFER, colourBuffer, GL_STATIC_DRAW);
glEnableVertexAttribArray(1);
glVertexAttribPointer(1, 3, GL_FLOAT, false, 0, 0);

[...]

MemoryUtil.memFree(verticesBuffer);
MemoryUtil.memFree(indicesBuffer);
MemoryUtil.memFree(colourBuffer);
}

接着修改着色器。

顶点着色器vertex.vert

1
2
3
4
5
6
7
8
9
10
11
12
#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;
}

片元着色器fragment.frag

最后测试一下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[imports ...]

public class TestLogic implements ILogic {

@Override
public void init() {
[...]

float[] colors = 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,
};

Mesh mesh = new Mesh(vertices, colors, indices);

Engine.scene.addMesh(mesh);
}

[...]
}

运行结果


LWJGL教程07 - 上色
https://panxy02.github.io/2024/07/19/lwjgl-07/
作者
52Hertz
发布于
2024年7月19日
许可协议