Hi, after I am now able to create fragshaders, they don't even look that bad, thx for help


But now I have been wondering about the vertexshader for about 13 hours

I just don't get why vec4(aVertex,0,1)* uModelMatrix != vec4(aVertex,0,1)
In my opinion uModelMatrix is an identity matrix so it should work.
I expected a red field, the mesh coords are set weird because I just would like to see a red pixel.
What I get:
Nothing, absolutely nothing is rendered

There's the code, you could compile and test it yourself if you want

+ downloadlink if you don't wanna grab the libs yourself:
http://www.file-upload.net/download-7008284/ErrorShader.rar.html1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
| import com.badlogic.gdx.ApplicationListener; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.backends.lwjgl.LwjglApplication; import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.GL10; import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.Mesh; import com.badlogic.gdx.graphics.OrthographicCamera; import com.badlogic.gdx.graphics.VertexAttribute; import com.badlogic.gdx.graphics.VertexAttributes.Usage; import com.badlogic.gdx.graphics.glutils.ShaderProgram; import com.badlogic.gdx.math.Matrix4;
public class ErrorShader implements ApplicationListener { MeshHelper meshHelper;
public static void main(String[] args) { LwjglApplicationConfiguration cfg = new LwjglApplicationConfiguration(); cfg.title = "Error"; cfg.useGL20 = true; cfg.width = 500; cfg.height = 500; cfg.resizable = false; new LwjglApplication(new ErrorShader(), cfg); } @Override public void create() { meshHelper = new MeshHelper(); meshHelper.createMesh(new float[] { -100.0f, -100.0f, 230.0f, 100.0f, 100f, 156.0f }); }
@Override public void resize(int width, int height) { }
@Override public void render() { Gdx.graphics.getGL20().glClearColor(0.2f, 0.2f, 0.2f, 1); Gdx.graphics.getGL20().glClear(GL10.GL_COLOR_BUFFER_BIT); Gdx.graphics.getGL20().glEnable(GL20.GL_BLEND); meshHelper.drawMesh(); }
@Override public void pause() { }
@Override public void resume() { }
@Override public void dispose() { meshHelper.dispose(); } }
class MeshHelper { private Mesh mesh; private ShaderProgram redShader; private OrthographicCamera cam; private Matrix4 modelMatrix;
public MeshHelper() { createShader(); modelMatrix = new Matrix4(); cam = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); for(int i =0; i< modelMatrix.getValues().length; i++){ System.out.println("values "+ i+": " + modelMatrix.getValues()[i]); } }
public void createMesh(float[] vertices) { mesh = new Mesh(true, vertices.length, 0, new VertexAttribute(Usage.Position, 2, "aVertex")); mesh.setVertices(vertices); }
public void drawMesh() { if (mesh == null) throw new IllegalStateException("drawMesh called before a mesh has been created."); redShader.begin(); redShader.setUniformMatrix("uModelMatrix", modelMatrix); mesh.render(redShader, GL20.GL_TRIANGLES); redShader.end(); }
private void createShader() { String vertexShader = "attribute vec2 aVertex; \n" + "uniform mat4 uViewProjMatrix; \n" + "uniform mat4 uModelMatrix; \n" + "void main() \n" + "{ \n" + " gl_Position = vec4(aVertex,0,1)* uModelMatrix; \n" + "} \n"; String fragmentREDShader = "#ifdef GL_ES\n" + "#define LOWP lowp\n" + "precision mediump float;\n" + "#else\n" + "#define LOWP \n" + "#endif\n" + "\n" + "void main() {\n" + " gl_FragColor = vec4(1.0,0.0,0.0, 1.0);\n" + "}"; redShader = new ShaderProgram(vertexShader, fragmentREDShader); if (redShader.isCompiled() == false) throw new IllegalStateException(redShader.getLog()); } public void dispose() { mesh.dispose(); redShader.dispose(); } } |
thx for help,
best regards