我试图找出我的代码中做错了什么。我正在使用 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。 - 大多数 OpenGL 的 Java 包装器要求其缓冲区是“直接分配”的,这意味着后备内存是 native 分配的,而不是 Java 分配的。最简单的方法是使用
ByteBuffer.allocateDirect(sizeInBytes);
,它返回ByteBuffer
然后可以转换为IntBuffer
或FloatBuffer
使用asFloatBuffer
和asIntBuffer
.
关于java - 着色器 Java OpenGL 代码内没有错误,但窗口内没有渲染任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47357759/