쉐이더와 OpenGL에 익숙하지 않습니다. 튜토리얼을 읽은 후 LibGDX를 사용하여 첫 번째 셰이더를 만들기로 결정했습니다.Libgdx - 기본 쉐이더가 작동하지 않습니다.
public class Application extends
ApplicationAdapter {
private ShaderProgram mShaderProgram;
private Mesh mMesh;
@Override
public void create() {
this.createMesh();
if (Gdx.graphics.isGL20Available()) {
this.createShaderProgram();
}
this.log("" + this.mShaderProgram.isCompiled()); // outputs "true"
}
private void createMesh() {
this.mMesh = new Mesh(true, 3, 4, VertexAttribute.Position());
this.mMesh.setIndices(new short[] { 0, 1, 2 });
this.mMesh.setVertices(new float[] {
-0.5f, -0.5f, 0,
0f, 0.5f, 0,
0.5f, -0.5f, 0
});
}
private void createShaderProgram() {
final FileHandle fragmentShader = Gdx.files.internal("fragment.txt");
final FileHandle vertexShader = Gdx.files.internal("vertex.txt");
this.mShaderProgram = new ShaderProgram(vertexShader, fragmentShader);
}
@Override
public void dispose() {
this.mMesh.dispose();
if (this.mShaderProgram != null) {
this.mShaderProgram.dispose();
}
}
private void log(final String message) {
Gdx.app.log("", message);
}
@Override
public void render() {
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
if (Gdx.graphics.isGL20Available()) {
this.mShaderProgram.begin();
this.mMesh.render(this.mShaderProgram, GL10.GL_TRIANGLES);
this.mShaderProgram.end();
}
else {
this.mMesh.render(GL10.GL_TRIANGLES);
}
}
}
내 조각 쉐이더 :
void main() {
gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
}
내 버텍스 쉐이더
문제는
내 자바 코드 ... 화면이 완전히 검은 색이다 :
void main() {
gl_Position = ftransform();
}
ftransform()
대신 gl_Vertex
을 사용하면 아무 것도 변경되지 않았습니다.
예 5 분 전에 튜토리얼에서이 기본 코드를 발견했으며 작동합니다. 그러나 GLSL에는 버텍스 쉐이더에서 ** a_position **와 같은 위치 데이터를 보유하는 ** gl_Vertex **와 * fixed * 파이프 라인을 시뮬레이트하는'ftransform()'함수가 내장 된 튜토리얼을 읽었습니다 이전 OpenGL 버전들 ('modelViewMatrix * position'). 새 변수를 만드는 대신 이러한 변수를 사용할 수 있습니까? 그러면 셰이더의 코드가 단순 해집니다. 조각 쉐이더에서 입력 ** gl_Color **에 대해 동일한 질문이 있습니다. – Flawyte
당신은 OpenGL ES와 OpenGL이 다르다는 것과 언어마다 다른 부분을 가지고 있다는 것을 기억해야합니다. 내가 믿는 고정 파이프 라인 기능은 OpenGL ES 1.x에만 유효하고 OpenGL ES 2.0/3.0에는 유효하지 않습니다. 2.0에서는 값을 속성 또는 균일 한 변수로 전달해야합니다. libGDX에서 좀 더 복잡한 예제를 원하면이 답변을 참조하십시오. http://stackoverflow.com/questions/15398184/issue-with-shaders-matrices-cant-see-object/15421977#15421977 – Jyro117
웹 검색 , 나는 GLSL의 새 버전에서'gl_Vertex'와'ftransform()'과 같은 일부 GLSL 내장 속성 및 함수가 사용되지 않을 것이라는 것을 발견했습니다. 나는 지금 너 자신에 의해 위치 & 색 속성을 등록해야한다는 것을 몰랐다. – Flawyte