OpenGL, пытаясь отображать треугольник, один пиксель отображается в центре экрана (JOGL)JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 OpenGL, пытаясь отображать треугольник, один пиксель отображается в центре экрана (JOGL)

Сообщение Anonymous »

Я новичок в OpenGL, и я пытаюсь отобразить треугольник, но после многих попыток переделать мой код и шаг за шагом, он просто не работает, и я не понимаю, почему?import com.jogamp.opengl.GL;
import com.jogamp.opengl.GL3;
import com.jogamp.opengl.GLAutoDrawable;
import com.jogamp.opengl.GLEventListener;
import java.io.File;
import java.nio.FloatBuffer;

public class EventListener implements GLEventListener{
private int shaderProgram;
private int vertexShader;
private int fragmentShader;

private File vertexShaderFile = new File("shaders\\vertex.vert");
private File fragmentShaderFile = new File("shaders\\fragment.frag");
int[] vao = new int[1], vbo = new int[1];

private String[][] shaderSources = {
{ShaderLoader.ShaderLoader.getShaderContents(vertexShaderFile)},
{ShaderLoader.ShaderLoader.getShaderContents(fragmentShaderFile)}
};
private float[] vertexes = {
-0.5f, -0.5f, 0,
0, 0.5f, 0,
0.5f, -0.5f, 0
};

@Override
public void display(GLAutoDrawable glA) {
GL3 gl = glA.getGL().getGL3();
gl.glClearColor(0, 0, 0, 1f);
gl.glClear(GL.GL_COLOR_BUFFER_BIT);

gl.glUseProgram(shaderProgram);
gl.glBindVertexArray(vao[0]);
gl.glDrawArrays(0, 3, GL.GL_TRIANGLES);
}

@Override
public void dispose(GLAutoDrawable glA) {
}

@Override
public void init(GLAutoDrawable glA) {
GL3 gl = glA.getGL().getGL3();

shaderProgram = gl.glCreateProgram();
vertexShader = gl.glCreateShader(GL3.GL_VERTEX_SHADER);
fragmentShader = gl.glCreateShader(GL3.GL_FRAGMENT_SHADER);

gl.glShaderSource(vertexShader, 1, shaderSources[0], null);
gl.glShaderSource(fragmentShader, 1, shaderSources[1], null);

gl.glCompileShader(vertexShader);
gl.glCompileShader(fragmentShader);

gl.glAttachShader(shaderProgram, vertexShader);
gl.glAttachShader(shaderProgram, fragmentShader);

gl.glLinkProgram(shaderProgram);

gl.glDeleteShader(vertexShader);
gl.glDeleteShader(fragmentShader);

gl.glGenVertexArrays(1, vao, 0);
gl.glGenBuffers(1, vbo, 0);

gl.glBindVertexArray(vao[0]);
gl.glBindBuffer(GL.GL_ARRAY_BUFFER, vbo[0]);

gl.glBufferData(GL.GL_ARRAY_BUFFER, vertexes.length * Float.BYTES, FloatBuffer.wrap(vertexes), GL.GL_STATIC_DRAW);

gl.glVertexAttribPointer(0, 3, GL.GL_FLOAT, false, 3 * Float.BYTES, 0);
gl.glEnableVertexAttribArray(0);

gl.glBindVertexArray(0);
gl.glBindBuffer(GL.GL_ARRAY_BUFFER, 0);
}

@Override
public void reshape(GLAutoDrawable glA, int x, int y, int w, int h) {
GL3 gl = glA.getGL().getGL3();
gl.glViewport(x, y, w, h);
}

}
< /code>
vertex shader: < /p>
#version 330 core
layout (location = 0) in vec3 aPos;

void main()
{
gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);
}
< /code>
фрагментный шейдер: < /p>
#version 330 core
out vec4 color;

void main()
{
color = vec4(1.0f, 0, 0, 1.0f);
}
< /code>
Результат: один красный пиксель, нарисованный в центре экрана.>

Подробнее здесь: https://stackoverflow.com/questions/797 ... nter-of-th
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»