Java 无法使用gl.glEnable打开灯
我正在用opengl编写一个java程序,我试图让用户在JMenu中选择一些类似于打开照明的东西,然后打开房屋/谷仓中的照明。。。我有一个名为LightOn的方法,我将gl.glEnablegl.gl_LIGHT0;但是当我从执行的动作中调用它时,它似乎没有打开。。。我的代码中是否缺少一些我应该使用的东西,因为我已经用布尔值尝试过了。。因此,布尔值以false开头,当单击JMenuItem时,actionPerformed将布尔值转换为true并调用方法LightOn。在显示方法中,我知道灯光应该是什么 照明显示方法中的代码片段:Java 无法使用gl.glEnable打开灯,java,opengl,jogl,Java,Opengl,Jogl,我正在用opengl编写一个java程序,我试图让用户在JMenu中选择一些类似于打开照明的东西,然后打开房屋/谷仓中的照明。。。我有一个名为LightOn的方法,我将gl.glEnablegl.gl_LIGHT0;但是当我从执行的动作中调用它时,它似乎没有打开。。。我的代码中是否缺少一些我应该使用的东西,因为我已经用布尔值尝试过了。。因此,布尔值以false开头,当单击JMenuItem时,actionPerformed将布尔值转换为true并调用方法LightOn。在显示方法中,我知道灯光应
float [] whiteLight = {1.0f, 1.0f, 1.0f, 1.0f};
float [] ambientLight = {0.1f, 0.1f, 0.1f, 1.0f}; //default
gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_DIFFUSE, whiteLight,0);
gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_SPECULAR, whiteLight,0);
gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_AMBIENT, ambientLight,0);
float [] lightPosition = {25, 25, 25, 1};
gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_POSITION, lightPosition,0);
float [] diffuse_mp = {1.0f,0.0f,0.0f,1.0f};//red
//gl.glMaterialfv(GL.GL_FRONT_AND_BACK, GL2.GL_SPECULAR, ambientLight,0);
gl.glMaterialfv(GL.GL_FRONT_AND_BACK, GL2.GL_DIFFUSE, diffuse_mp,0);
boolean light = false;
public static void LightOn(GLAutoDrawable drawable)
{
GL2 gl = drawable.getGL().getGL2();
boolean light = true;
//gl.glEnable(GLLightingFunc.GL_LIGHTING);
gl.glEnable(GLLightingFunc.GL_LIGHT0);
}
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand().equals("Lighting On"))
{
light = true;
LightOn(canvas);
System.out.println("Light on");
}
}
您是否尝试过同时启用GL_照明?执行此操作的行在代码中,但当前已注释掉。另外,虽然我不知道这在JOGL中是如何工作的,但您必须确保所有OpenGL调用都是在具有当前OpenGL上下文的线程中进行的。在许多系统/平台上,通常创建单独的渲染线程。如果是这样,从UI线程调用OpenGL将不起作用。是否存在变量阴影问题?局部变量和包保护字段都称为light。请给我们一个完整的例子。你应该避免使用传统的OpenGL