Как я могу сделать шар света в openGL?
Я пытаюсь сделать шар света (как солнце), но я не могу сделать его видимым вообще. Я дам вам некоторые фрагменты кода, который у меня есть. Он в Java LWJGL, поэтому он может выглядеть немного иначе.
private float lightAmbient[] = { 0.0f, 1.0f, 1.0f, 1.0f }; // Ambient Light Values ( NEW )
private float lightDiffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f }; // Diffuse Light Values ( NEW )
private float lightPosition[] = { 0.0f, 0.0f, -5.0f, 1.0f }; // Light Position ( NEW )
float lightSpecular[] = { 0f, 0f, 0.5f, 1.0f }; // highlight
а также
ByteBuffer temp = ByteBuffer.allocateDirect(16);
temp.order(ByteOrder.nativeOrder());
GL11.glLight(GL11.GL_LIGHT1, GL11.GL_AMBIENT, (FloatBuffer)temp.asFloatBuffer().put(lightAmbient).flip()); // Setup The Ambient Light
GL11.glLight(GL11.GL_LIGHT1, GL11.GL_DIFFUSE, (FloatBuffer)temp.asFloatBuffer().put(lightDiffuse).flip()); // Setup The Diffuse Light
GL11.glLight(GL11.GL_LIGHT1, GL11.GL_POSITION,(FloatBuffer)temp.asFloatBuffer().put(lightPosition).flip()); // Position The Light
GL11.glLight(GL11.GL_LIGHT1, GL11.GL_SPECULAR,(FloatBuffer)temp.asFloatBuffer().put(lightSpecular).flip()); // Position The Light
GL11.glEnable(GL11.GL_LIGHT1);
Что еще я должен сделать, чтобы сделать свет видимым?
3 ответа
Огни никогда не видны.
Однако их влияние на материалы других объектов не вызывает. Поэтому важно, чтобы у всех объектов в сцене были установлены соответствующие свойства материала.
Возможно, вас заинтересует эта статья, в которой упоминаются все распространенные ошибки, которые допускаются при освещении сцен.
Вам нужно поискать функции glColorMaterial, так как они являются наиболее простым способом задания свойств материала.
Как сказал Фрэнк, источники света невидимы, они просто используются в качестве входных данных для уравнения освещения, используемого системой рендеринга (аппаратное / программное обеспечение) для расчета окончательных цветов геометрии.
Если вы хотите, чтобы что-то было похоже на свет, вам нужно имитировать эффекты, которые вы привыкли видеть при взгляде на яркий источник света. Для солнца одним из самых заметных эффектов является легкое цветение.
Для получения информации о создании легкого цветения прочитайте это Учебное пособие по цветению OpenGL, и здесь приведен пример кода на Java с использованием GLSL для создания эффекта цветения.
В зависимости от того, хотите ли вы использовать эффекты стиля полного цветения (если так, посмотрите на ответ Джоша Перри) или просто не темный объектный объект, который, кажется, излучает свет, вы можете рассмотреть этот простой подход.
- Визуализируйте сцену без действительной "солнечной" сетки, но с точечным освещением в центре вашего "солнца".
- Отключить GL Lighting.
- Сделайте сферу или используйте рекламный щит, чтобы отобразить изображение вашего солнца в соответствующем месте.
- Повторно включите GL Lighting, прежде чем отобразить следующий кадр.
Поскольку вы отключили освещение, солнце будет отображаться "полностью ярким" без каких-либо расчетов затенения или освещения.