【发布时间】:2021-05-24 10:56:28
【问题描述】:
关于 reshape 方法(GLEventListener)的openGL初始化代码:
public void reshape(GLAutoDrawable glautodrawable, int x, int y, int width, int height) {
final GL2 gl = glautodrawable.getGL().getGL2();
//gl.glFrontFace(GL2.GL_CW);
gl.glEnable(GL2.GL_DEPTH_TEST);
gl.glDepthMask(true);
gl.glClearDepth(1.0);
gl.glDepthFunc(GL2.GL_ALWAYS);
gl.glColorMask(true, true, true, true);
gl.glPixelStorei(GL.GL_UNPACK_ALIGNMENT, 1);
gl.glClearColor(0.0f, 1.0f, 0.0f, 0.5f);
//build Buffers, program and extra;
}
没有清除颜色缓冲区的显示方法。我用的是 FPS Animator。
public void display( GLAutoDrawable drawable ) {
final GL2 gl = drawable.getGL().getGL2();
gl.glClear(GL2.GL_DEPTH_BUFFER_BIT);
float time = (float)(System.currentTimeMillis() - startTime) / 1000.0f;
System.out.println("Time: " + time);
gl.glUniform1f(0, time);
gl.glDrawArrays(GL.GL_TRIANGLE_STRIP, 0, 4);
}
清除缓冲区的显示方法:
public void display( GLAutoDrawable drawable ) {
final GL2 gl = drawable.getGL().getGL2();
gl.glClear(GL2.GL_DEPTH_BUFFER_BIT | GL2.GL_COLOR_BUFFER_BIT);
float time = (float)(System.currentTimeMillis() - startTime) / 1000.0f;
System.out.println("Time: " + time);
gl.glUniform1f(0, time);
gl.glDrawArrays(GL.GL_TRIANGLE_STRIP, 0, 4);
}
所以我想,结果应该是一样的,因为我清除了缓冲区然后画了一个正方形。但正如您在上面的结果中看到的那样,只有绿色透明色。
统一位置 0 是片段着色器中的浮点变量“时间”,它影响正方形中星星的亮度。但它并没有像我预期的那样随着时间而改变。 但是只有第一次调用 glUniform1f() 是这样应用的(gl.glUniform1f(0, 20)):
有趣的是,当我在互联网上使用 glClear(GL_COLOR_BUFFER_BIT) 尝试示例时,它工作正常。
public void display( GLAutoDrawable drawable ) {
final GL2 gl = drawable.getGL().getGL2();
gl.glClear(GL2.GL_DEPTH_BUFFER_BIT | GL2.GL_COLOR_BUFFER_BIT);
gl.glBegin( GL2.GL_TRIANGLES );
gl.glColor3f( 1.0f, 0.0f, 0.0f ); // Red
gl.glVertex3f( 0.5f,0.7f,0.0f ); // Top
gl.glColor3f( 0.0f,1.0f,0.0f ); // blue
gl.glVertex3f( -0.2f,-0.50f,0.0f ); // Bottom Left
gl.glColor3f( 0.0f,0.0f,1.0f ); // green
gl.glVertex3f( 0.5f,-0.5f,0.0f ); // Bottom Right
gl.glEnd();
gl.glFlush();
}
我的代码有什么问题?还是版本问题或错误?为什么示例工作正常但我的不是?
或者有没有办法检查实际发生了什么/调试?
【问题讨论】:
标签: java graphics fragment-shader jogl