В настоящее время я работаю над реализацией освещения для своего проекта с OpenGL. Все еще работала над базовой реализацией (правильно отображая индикаторы), и я столкнулся с какой-то странной проблемой. Когда вы пытаетесь создать прожектор с отсечкой (ограниченный угол, на который влияет свет), я получаю очень жесткие края, почти как лестницы, как видно на рисунке:Как создать гладкие окантованные прожекторы в OpenGL?
Нет окружающего света (с использованием glLightModel(GL_LIGHT_MODEL_AMBIENT, colorToFloatBuffer(new Color(0.0f, 0.0f, 0.0f, 1.0f)))
), и я также отключил (указывает, как свет распространяется в конусе) и все аттенуации, чтобы сделать эффект более ясным, а фон - большим белым изображением (сделанным черным из-за отсутствия окружающего света, мне также интересно, почему мне даже нужно использовать изображение вообще, чтобы увидеть свет).
Вот как настроить свет:
glEnable(GL_LIGHTING);
glEnable(GL_COLOR_MATERIAL);
glLight(glLightID, GL_AMBIENT, colorToFloatBuffer(Color.blue));
glLight(glLightID, GL_DIFFUSE, colorToFloatBuffer(Color.black));
glLight(glLightID, GL_SPECULAR, colorToFloatBuffer(Color.black));
glLight(glLightID, GL_POSITION, floatBuffer.put(position.x).put(position.y).put(0.0f).put(1.0f));
glLight(glLightID, GL_SPOT_DIRECTION, otherFloatBuffer.put(1.0f, 0.0f, 0.0f));
glLightf(glLightID, GL_SPOT_EXPONENT, 0);
glLightf(glLightID, GL_SPOT_CUTOFF, 22.5f);
glLightf(glLightID, GL_CONSTANT_ATTENUATION, 1.0f);
glLightf(glLightID, GL_LINEAR_ATTENUATION, 0.0f);
glLightf(glLightID, GL_QUADRATIC_ATTENUATION, 0.0f);
На другой ноте я также масштабировать контекст перед применением любого из этих эффектов (я использую вид в перспективе для некоторых визуальных эффектов и все же хотите поддерживать орфографические координаты), если это какая-то помощь.
Если бы я знал это только 5 дней назад;) Удивительно долгое время, чтобы понять, что один из них и понять, как это основано на вершинах. Теперь я понимаю. Урок, который вы связали, действительно * действительно * действительно хорош, я использовал его, и он (почти) полностью работает сейчас. – 1337