Эффективность перспективной проекции по сравнению с трассировкой лучей/кастингом лучей

У меня очень общий вопрос. Я хочу определить граничные точки ряда объектов (состоящих из 30-50 замкнутых многоугольников (z), каждый из которых имеет около 300 точек (x, y, z)). Я работаю с фиксированным окном просмотра, которое вращается вокруг осей x, y и z (альфа, бета, гамма) относительно начала системы координат для многоугольников.

На мой взгляд, есть две возможности: перспективная проекция или трассировка лучей. Казалось бы, перспективная проекция требует большого количества матричных операций для каждой точки, чтобы определить ее положение внутри или вне области просмотра. Или, учитывая большое количество точек, мне лучше трассировать пиксели области просмотра к объекту? то есть определить, есть ли пересечение, а затем, происходит ли пересечение внутри или без объекта (ов). В любом случае я запишу этот результат как 0 (снаружи) или 1 (внутри) до 200x200 целочисленной матрицы, представляющей область просмотра.

Спасибо в ожидании


person mark g    schedule 08.10.2009    source источник


Ответы (2)


Перспективная проекция (а затем преобразование полигонов в координаты изображения) будет намного быстрее.

Преобразование матрицы, которое требуется в случае перспективной проекции (по сути, матрица мира в камеру), требуется точно так же, как и при трассировке лучей. Однако при перспективной проекции вы преобразуете только угловые точки, тогда как при трассировке лучей вы преобразуете все точки на изображении.

person Martin B    schedule 08.10.2009
comment
Спасибо за быстрый ответ: однако мне все еще нужно как-то определить подмножество угловых точек - предположительно максимальное расстояние, перпендикулярное оси объектива камеры? - person mark g; 08.10.2009
comment
Под угловыми точками я подразумеваю вершины многоугольника. Я предполагаю, что ваш многоугольник определяется списком вершин. (Если это не так, то как определяются ваши многоугольники?) Чтобы выполнить перспективную проекцию многоугольника, достаточно спроецировать вершины; это связано с тем, что перспективная проекция всегда отображает прямую линию в пространстве на прямую линию на изображении. - person Martin B; 08.10.2009
comment
уверен, что эти (вершины) - это 50 * 300 (x, y, z) точек: я был немного медленным! Спасибо еще раз! - person mark g; 08.10.2009

Вы должны иметь возможность использовать перспективную проекцию и матрицу перспективной проекции для вычисления положения вершин в пространстве экрана? Трудно понять, что вы хотите сделать на самом деле. Если вы хотите создать изображение этой 3D-сцены, то с несколькими полигонами было бы трудно увидеть какую-либо разницу между трассировкой лучей и растеризацией, если ваш код оптимизирован (вам все равно нужно будет использовать структуру ускорения для подхода трассировки лучей). ), однако да, растеризация, вероятно, в любом случае будет быстрее.

Теперь, если вам нужно вычислить расстояние между глазом (началом камеры) и геометрией, видимой через вид камеры, я не понимаю, почему вы не можете использовать значение глубины любого образца для любого пикселя в изображении. и используйте обратную матрицу перспективной проекции, чтобы найти ее расстояние в пространстве камеры.

Почему скорость является проблемой в вашей задаче? В противном случае действительно используйте RT.

Большую часть этой информации можно найти на сайте www.scratchapixel.com.

person user18490    schedule 29.12.2014