Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法使用gl.glEnable打开灯_Java_Opengl_Jogl - Fatal编程技术网

Java 无法使用gl.glEnable打开灯

Java 无法使用gl.glEnable打开灯,java,opengl,jogl,Java,Opengl,Jogl,我正在用opengl编写一个java程序,我试图让用户在JMenu中选择一些类似于打开照明的东西,然后打开房屋/谷仓中的照明。。。我有一个名为LightOn的方法,我将gl.glEnablegl.gl_LIGHT0;但是当我从执行的动作中调用它时,它似乎没有打开。。。我的代码中是否缺少一些我应该使用的东西,因为我已经用布尔值尝试过了。。因此,布尔值以false开头,当单击JMenuItem时,actionPerformed将布尔值转换为true并调用方法LightOn。在显示方法中,我知道灯光应

我正在用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