Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.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 局部光OpenGL_Java_C++_Opengl_Shader_Lwjgl - Fatal编程技术网

Java 局部光OpenGL

Java 局部光OpenGL,java,c++,opengl,shader,lwjgl,Java,C++,Opengl,Shader,Lwjgl,我正在使用一些OpenGL,似乎无法让一些代码正常工作。我知道如何使用OpenGL调整场景的环境光,但我似乎无法获得局部光,比如一根火柴如何只照亮周围的直接区域,或者聚光灯如何工作。这是我的照明代码,它仅包含环境光和聚光灯: private float[] lightPosition0; public float[] light_ambient0 = {0.4f, 0.4f, 0.4f, 0.0f}; private float[] light_diffuse0 = {0.0f, 0.0f,

我正在使用一些OpenGL,似乎无法让一些代码正常工作。我知道如何使用OpenGL调整场景的环境光,但我似乎无法获得局部光,比如一根火柴如何只照亮周围的直接区域,或者聚光灯如何工作。这是我的照明代码,它仅包含环境光和聚光灯:

private float[] lightPosition0;
public  float[] light_ambient0 = {0.4f, 0.4f, 0.4f, 0.0f}; 
private float[] light_diffuse0 = {0.0f, 0.0f, 0.0f, 0.0f};
private float[] light_specular0 = {0.0f, 0.0f, 0.0f, 0.0f};

private float[] light_ambient1 = {0.0f, 1.0f, 0.0f, 0.0f};
private float[] light_specular1 = {1.0f, 1.0f, 1.0f, 1.0f};
private float[] light_specref1 = {1.0f, 1.0f, 1.0f, 1.0f};
private float[] light_spot_direction = {0.0f, 1.0f, 0.0f, 0.0f};

@SubscribeEvent()
public void onWorldRender(RenderWorldEvent.Pre event)
{
   render();
}

private void render() 
{
   //glPushMatrix();

    glEnable(GL_LIGHTING);
    glShadeModel(GL_SMOOTH);
    glEnable(GL_DEPTH_TEST);
    glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE);

    glEnable(GL_CULL_FACE);

   lightPosition0 = new float[]{(float)thePlayer.getPlayerCoordinates().posX + 2, (float)thePlayer.getPlayerCoordinates().posY + 2, (float)thePlayer.getPlayerCoordinates().posZ + 2, 1.0f}; // not sure what the last value does

  // LIGHT 0
  glLight(GL_LIGHT0, GL_POSITION, BufferTools.asFlippedFloatBuffer(lightPosition0));
  glLight(GL_LIGHT0, GL_AMBIENT, BufferTools.asFlippedFloatBuffer(light_ambient0));
  glLight(GL_LIGHT0, GL_DIFFUSE, BufferTools.asFlippedFloatBuffer(light_diffuse0));
  glLight(GL_LIGHT0, GL_SPECULAR, BufferTools.asFlippedFloatBuffer(light_specular0));

  // Light 1
  glLight(GL_LIGHT1, GL_DIFFUSE, BufferTools.asFlippedFloatBuffer(light_ambient1));
  glLight(GL_LIGHT1, GL_SPECULAR, BufferTools.asFlippedFloatBuffer(light_specular1));
  glLight(GL_LIGHT1, GL_POSITION, BufferTools.asFlippedFloatBuffer(lightPosition0));
  glLightf(GL_LIGHT1, GL_SPOT_CUTOFF, 60.0f);
  glLightf(GL_LIGHT1, GL_SPOT_EXPONENT, 100.0f);

  glEnable(GL_LIGHT0);
   glEnable(GL_LIGHT1);

//glPopMatrix();
}
我正试图让聚光灯指向球员前方的几个单位。另外,我不知道我是否应该使用GL_LIGHT_MODEL_LOCAL_VIEWER或GL_LIGHT_MODEL_AMBIENT,或者为什么我的代码不起作用。我不喜欢使用固定管道,也不喜欢使用着色器,如果这样做更容易,我很乐意这样做

我甚至不知道我该如何去做一个发射光,它不会无限发光。我肯定有一个GL方法,但我似乎不明白

我渲染这些灯光的世界是由相同大小的立方体组成的,如果这是重要信息的话