Я пытаюсь сделать изображение похожим на левое и у меня проблемы с тенями и отражениями.
Прямо сейчас, только теневой код открыт для показа проблемы.
Как вы можете видеть, красный шар должен быть затенен рядом с зеленым, но пиксели все перепутаны по какой-то странной причине. Когда я закрываю теневую часть кода, он обычно отображает красный шар без теней.
Я думаю, что корень этой проблемы также влияет на размышления. надеюсь, вы, ребята, можете дать мне несколько советов; Я теряю это.
Учитывая, что ваше левое изображение показывает рак, это классический случай попадания теневого луча в объект, от которого он был отражен. Когда вы проводите проверку теневого луча, вам нужно исключить поверхность, которая генерировала луч. Просто передайте исходный объект в вашу теневую функцию и игнорируйте его.
Этот метод работает только для выпуклых форм. Если у вас есть фигуры, которые создают тень для себя (например, тор), вы должны быть более общими. Обычный подход заключается в определении эпсилон (устойчивость к ошибкам с плавающей точкой) и игнорировать любые точки пересечения, которые находятся ближе, чем это.
Другой подход заключается в обнаружении того, какие боковая сторона поверхности вы ударили. Вы не должны создавать тень на сфере, поскольку луч излучается в том же направлении, что и нормаль поверхности (т.е. скалярное произведение исходящего луча и нормали поверхности положительное) — это не должно рассматриваться как тень.
Решено:
Была алгоритмическая проблема, которую нелегко объяснить,
Другой метод: в основном я делаю проверку, если угол косинуса больше, чем 0,0001, если он больше, то я не затеню его