Итак, вот скриншот того, что происходит.
Также вот метод, который делает vao
public boolean create(float[] modelData) {
FloatBuffer buffer = BufferUtils.createFloatBuffer(modelData.length);
buffer.put(modelData);
buffer.flip();
vaoID = glGenVertexArrays();
glEnableVertexAttribArray(0);
glBindVertexArray(vaoID);
vboID = glGenBuffers();
glBindBuffer(GL_ARRAY_BUFFER, vboID);
glBufferData(GL_ARRAY_BUFFER, buffer, GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, false, 0, 0);
glDisableVertexAttribArray(0);
glBindVertexArray(0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
vertexCount = modelData.length / 3;
return true;
}
и тот, который добавляет uv-координаты
public void addUV(float[] uv) {
FloatBuffer buffer = BufferUtils.createFloatBuffer(uv.length);
buffer.put(uv);
buffer.flip();
glBindVertexArray(vaoID);
uvCoordLoc = glGetAttribLocation(shade.getProgramID(), "uv");
glEnableVertexAttribArray(uvCoordLoc);
glVertexAttribPointer(uvCoordLoc, 2, GL_FLOAT, false, 0, buffer);
glDisableVertexAttribArray(uvCoordLoc);
glBindVertexArray(0);
}
и, наконец, тот, который отображает.
public void draw(int texID) {
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texID);
int texLoc = glGetUniformLocation(shade.getProgramID(), "tex");
glUniform1i(texLoc, 0);
glBindVertexArray(vaoID);
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(uvCoordLoc);
shade.start();
glDrawArrays(GL_QUADS, 0, vertexCount);
shade.stop();
glDisableVertexAttribArray(0);
glDisableVertexAttribArray(uvCoordLoc);
glBindVertexArray(0);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, 0);
}
И вершинный шейдер моих шейдеров
#version 130
out vec4 theColor;
out vec2 uvCoord;
in vec2 uv;
void main() {
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
theColor = gl_Position;
uvCoord = uv;
}
фрагментный шейдер.
#version 130
in vec4 theColor;
in vec2 uvCoord;
uniform sampler2D tex;
void main() {
gl_FragColor = texture(tex, uvCoord).rgba;
}
Я пробовал возиться с uv-координатами, но это у меня пока получилось.
и данные модели и uv-координаты
Model model = new Model();
model.create(new float[] {
-0.5f,-0.5f,-2f,
-0.5f,0.5f,-2f,
0.5f,0.5f,-2f,
0.5f,-0.5f,-2f
});
model.addUV(new float[] {
0,1,
0,0,
1,0,
1,1
});
любая помощь была бы хороша