Java — локальный свет OpenGL

Я работал с некоторым 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, но я не могу понять это.

Мир, в котором я делаю эти огни, состоит из кубов одинакового размера, если это важная информация.

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]