Quadrat in OpenGL nicht gerendertJava

Java-Forum
Anonymous
 Quadrat in OpenGL nicht gerendert

Post by Anonymous »

Ich bin ziemlich neu in der Grafik und ich versuche, ein einfaches Spiel in Java mit LWJGL und OpenGL zu programmieren, aber ich kann kein Quadrat zum Fenster rendern. Kann jemand helfen?

Code: Select all

import java.nio.FloatBuffer;
import java.nio.IntBuffer;

import static org.lwjgl.opengl.GL15.*;
import static org.lwjgl.opengl.GL20.*;
import static org.lwjgl.opengl.GL30.glBindVertexArray;
import static org.lwjgl.opengl.GL30.glGenVertexArrays;

public class Render {
private Shader shader;

private float[] vertexArray = {
0.5f, -0.5f, 0.0f,
-0.5f, 0.5f, 0.0f,
0.5f, 0.5f, 0.0f,
-0.5f, -0.5f, 0.0f
};

private int[] elementArray = {
2, 1, 0,
0, 1, 3
};

private int vaoID, vboID, eboID;

public Render() {
this.shader = new Shader("defaultVertexShader.glsl", "defaultFragmentShader.glsl", "src/main/resources/render/shaders/");
}

public void init() {
shader.compile();
shader.link();

vaoID = glGenVertexArrays();
glBindVertexArray(vaoID);

FloatBuffer vertexBuffer = BufferUtils.createFloatBuffer(vertexArray.length);
vertexBuffer.put(vertexArray).flip();

vboID = glGenBuffers();
glBindBuffer(GL_ARRAY_BUFFER, vboID);
glBufferData(GL_ARRAY_BUFFER, vertexBuffer, vboID);

IntBuffer elementBuffer = BufferUtils.createIntBuffer(elementArray.length);
elementBuffer.put(elementArray).flip();

eboID = glGenBuffers();
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, eboID);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, elementBuffer, eboID);

glVertexAttribPointer(0, 3, GL_FLOAT, false, 12, 0);
glEnableVertexAttribArray(0);
}

public void render() {
shader.use();
glBindVertexArray(vaoID);
glEnableVertexAttribArray(0);

glDrawElements(GL_TRIANGLES, elementArray.length, GL_UNSIGNED_INT, 0);

glDisableVertexAttribArray(0);
glBindVertexArray(0);
shader.detach();
}
}
< /code>
Shader -Klasse < /p>
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

import static org.lwjgl.opengl.GL11.GL_FALSE;
import static org.lwjgl.opengl.GL20.*;
import static org.lwjgl.opengl.GL20.glUseProgram;

public class Shader {
private String vertexShaderSrc;
private String fragmentShaderSrc;

private int vertexID, fragmentID, shaderProgram;

public Shader(String vertexShader, String fragmentShader, String root) {
this.vertexShaderSrc = getShader(vertexShader, root);
this.fragmentShaderSrc = getShader(fragmentShader, root);
}

public void compile() {
vertexID = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertexID, vertexShaderSrc);
glCompileShader(vertexID);
int success = glGetShaderi(vertexID, GL_COMPILE_STATUS);
if (success == GL_FALSE) {
int len = glGetShaderi(vertexID, GL_INFO_LOG_LENGTH);
System.out.println("ERROR: Vertex shader compilation failed.");
System.out.println(glGetShaderInfoLog(vertexID, len));
}

fragmentID = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragmentID, fragmentShaderSrc);
glCompileShader(fragmentID);
success = glGetShaderi(fragmentID, GL_COMPILE_STATUS);
if (success == GL_FALSE) {
int len = glGetShaderi(fragmentID, GL_INFO_LOG_LENGTH);
System.out.println("ERROR: Fragment shader compilation failed.");
System.out.println(glGetShaderInfoLog(fragmentID, len));
}
}

public void link() {
shaderProgram = glCreateProgram();
glAttachShader(shaderProgram, vertexID);
glAttachShader(shaderProgram, fragmentID);
glLinkProgram(shaderProgram);
int success = glGetProgrami(shaderProgram, GL_LINK_STATUS);
if (success == GL_FALSE) {
int len = glGetProgrami(shaderProgram, GL_INFO_LOG_LENGTH);
System.out.println("ERROR:  Linking of shaders failed.");
System.out.println(glGetProgramInfoLog(shaderProgram, len));
}
}

public void use() {
glUseProgram(shaderProgram);
}

public void detach() {
glUseProgram(0);
}

private String getShader(String shaderName, String root) {
String data = "";
File shaderFile = new File(root + shaderName);

try (Scanner reader = new Scanner(shaderFile)) {
while (reader.hasNextLine()) {
data += reader.nextLine();
}
} catch (FileNotFoundException e) {
System.out.println("An error occurred.");
e.printStackTrace();
}

return data;
}
}
< /code>
Vertex -Shader < /p>
#version 330 core

layout (location=0) in vec3 pos;

void main() {
gl_Position = vec4(pos, 1.0f);
}
< /code>
Fragment Shader < /p>
#version 330 core

out vec4 color;

void main() {
color = vec4(1.0f, 0.5f, 0.2f, 1.0f);
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post