Предположим, что ваш глаз находится в точке P1 поверхности объекта A, и есть объект-объект B и есть источник точечного света за объектом B.
Вопрос: Я прав, если я смотрю на источник света и говорю "я в тени", если я не вижу свет из-за объекта B?. Затем я отмечаю, что точка объекта A является "одной из теневых точек B на A".
Если это так, тогда мы можем построить на поверхности A объект "теневой геометрии" (черный цвет), а затем изменить его постоянно из-за движения света, B, A и т.д. в в реальном времени? Допустим, что сфера (A) имеет 1000 вершин, а другая сфера (B) также имеет 1000 вершин, так это означает 1 миллион сравнения? (затеняет, O (N ^ 2) (время) сложность?). Я не уверен в сложности, потому что изменение P1 (глаз) также изменяет видимую точку B (между P1 и точкой источника света). Как насчет теней второго порядка и выше (например, много света отражаются между двумя объектами)?
Я использую java-3D сейчас, но у него нет теневых возможностей, поэтому я думаю о переходе на другие java-совместимые библиотеки.
Спасибо.
Изменить: Мне нужно отключить "камеру" при перемещении камеры, чтобы создать эту тень. Как я могу это сделать? Это плохо влияет на производительность?
Новая идея: java3D имеет встроенное обнаружение конфликтов. Я создам линии (невидимые) от светлой до целевой многоугольной вершины, а затем проверяет наличие столкновения с другим объектом. Если возникает столкновение, добавьте эту вершину corrd. в теневой список, но это будет работать только для точечных огней:(.
Любой, кто снабжает библиотеку реальной тени для java3d, будет очень полезен.
Очень маленькая проба Geomlib shadow/raytracing в java3D была бы лучшей Пример трассировки лучей может быть?
Я знаю, что это немного сложно, но можно было попробовать по меньшей мере сотней человек.
Спасибо.