Не нашел актуального примера, как на libgdx вывести треугольник в 3d, но, вроде бы, больше ошибок не нашел. Однако при запуске валится с NullPointerException при попытке скомпилить вершинный шейдер и дальше glCreateShader отладчик не идет. Можно как-то получить последнее сообщение об ошибке аналогично GLgetProgramiv в C? Шейдеры:
uniform mat4 combined;
attribute vec4 pos1;
void main()
{
gl_Position = pos1 * combined;
}
void main()
{
gl_FragColor = vec4(1.0,0.0,0.0,1.0);
}
package com.syjgin.spacecheckers;
import com.badlogic.gdx.ApplicationListener;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.PerspectiveCamera;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.Texture.TextureFilter;
import com.badlogic.gdx.math.Vector3;
import com.badlogic.gdx.graphics.Mesh;
import com.badlogic.gdx.graphics.glutils.ShaderProgram;
import com.badlogic.gdx.graphics.VertexAttribute;
public class Spacecheckers implements ApplicationListener {
private PerspectiveCamera camera;
private Texture texture;
private Mesh sphere;
private ShaderProgram ourCheckers;
@Override
public void create() {
float w = Gdx.graphics.getWidth();
float h = Gdx.graphics.getHeight();
float fov = 0.45f;
Vector3 pos = new Vector3(0.0f,2.0f,-2.0f);
camera = new PerspectiveCamera(fov,w,h);
camera.lookAt(0, 0, 0);
camera.translate(pos);
ourCheckers = new ShaderProgram(Gdx.files.internal("data/vertex.glsl"),Gdx.files.internal("data/fragment.glsl"));
sphere = new Mesh(true,3,3,VertexAttribute.Position());
sphere.setVertices(new float[]
{-0.5f, -0.5f, 0.0f,
0.5f, -0.5f, 0.0f,
0.5f, 0.5f, 0.0f});
sphere.setIndices(new short[] {0, 1, 2});
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
}
@Override
public void dispose() {
ourCheckers.dispose();
sphere.dispose();
texture.dispose();
}
@Override
public void render() {
ourCheckers.begin();
ourCheckers.setUniformMatrix("combined", camera.combined);
sphere.render(ourCheckers, GL20.GL_TRIANGLES);
ourCheckers.end();
}
@Override
public void resize(int width, int height) {
}
@Override
public void pause() {
}
@Override
public void resume() {
}
}