着色器 Java OpenGL 代码中没有错误,但 window 中没有渲染任何内容
No errors inside shader Java OpenGL code, but nothing is rendered inside window
我试图找出我的代码中做错了什么。我正在使用 JOGL。
我想在给定对象内创建两个 VBO,一个用于顶点,另一个用于索引。
init(GLAutoDrawable glAutoDrawable)
函数内部没有错误,但是运行程序display(GLAutoDrawable glAutoDrawable)
没有显示我的对象。
我哪里出错了?谢谢你的帮助。
我的代码:
public class Test1 implements GLEventListener {
private int program;
IntBuffer vao = IntBuffer.allocate(1);
private IntBuffer buffers = IntBuffer.allocate(2);
private float[] vertices = {
-0.853250f, -0.136293f, -0.188932f,
-0.129650f, 0.416492f, 0.336788f,
-1.129635f, 0.416492f, 0.661708f,
-1.747674f, 0.416492f, -0.188932f,
-1.129635f, 0.416492f, -1.039572f,
-0.129650f, 0.416492f, -0.714652f,
-0.576865f, 1.310922f, 0.661708f,
-1.576849f, 1.310922f, 0.336788f,
-1.576849f, 1.310922f, -0.714652f,
-0.576865f, 1.310922f, -1.039572f,
0.041175f, 1.310922f, -0.188932f,
-0.853250f, 1.863707f, -0.188932f
};
有相当多的错误。
- 你的顶点着色器很明显是片段着色器的代码。我不知道你从哪里复制的,但你需要修复它。
gluPerspective
旨在与固定功能管道一起使用。当您使用可编程着色器时,它不起作用。您需要在顶点着色器中为投影矩阵放置一个制服,然后将该矩阵手动传递给 GL。
- 大多数 Java OpenGL 包装器要求它们的缓冲区是 "Directly Allocated",这意味着后备内存是本地分配的,而不是 Java-分配的。最简单的方法是使用
ByteBuffer.allocateDirect(sizeInBytes);
,其中 returns 一个 ByteBuffer
然后可以使用 asFloatBuffer
转换为 IntBuffer
或 FloatBuffer
和 asIntBuffer
.
我试图找出我的代码中做错了什么。我正在使用 JOGL。
我想在给定对象内创建两个 VBO,一个用于顶点,另一个用于索引。
init(GLAutoDrawable glAutoDrawable)
函数内部没有错误,但是运行程序display(GLAutoDrawable glAutoDrawable)
没有显示我的对象。
我哪里出错了?谢谢你的帮助。
我的代码:
public class Test1 implements GLEventListener {
private int program;
IntBuffer vao = IntBuffer.allocate(1);
private IntBuffer buffers = IntBuffer.allocate(2);
private float[] vertices = {
-0.853250f, -0.136293f, -0.188932f,
-0.129650f, 0.416492f, 0.336788f,
-1.129635f, 0.416492f, 0.661708f,
-1.747674f, 0.416492f, -0.188932f,
-1.129635f, 0.416492f, -1.039572f,
-0.129650f, 0.416492f, -0.714652f,
-0.576865f, 1.310922f, 0.661708f,
-1.576849f, 1.310922f, 0.336788f,
-1.576849f, 1.310922f, -0.714652f,
-0.576865f, 1.310922f, -1.039572f,
0.041175f, 1.310922f, -0.188932f,
-0.853250f, 1.863707f, -0.188932f
};
有相当多的错误。
- 你的顶点着色器很明显是片段着色器的代码。我不知道你从哪里复制的,但你需要修复它。
gluPerspective
旨在与固定功能管道一起使用。当您使用可编程着色器时,它不起作用。您需要在顶点着色器中为投影矩阵放置一个制服,然后将该矩阵手动传递给 GL。- 大多数 Java OpenGL 包装器要求它们的缓冲区是 "Directly Allocated",这意味着后备内存是本地分配的,而不是 Java-分配的。最简单的方法是使用
ByteBuffer.allocateDirect(sizeInBytes);
,其中 returns 一个ByteBuffer
然后可以使用asFloatBuffer
转换为IntBuffer
或FloatBuffer
和asIntBuffer
.