ПрограммированиеФорумГрафика

Трассировка криволинейных поверхностей.

Страницы: 1 2 Следующая »
#0
2:08, 24 дек 2009

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

#1
2:28, 24 дек 2009

Стандартно раз в неделю такой вопрос поднимается.
Поищи в этом разделе форума.

#2
7:16, 24 дек 2009

Trin
Нет. Есть огромный пласт различных поверхностей, заданных формулой, для которых эту задачу аналитически невозможно решить...

Например, как у меня с блобами: http://www.gamedev.ru/code/forum/?id=126484

В этом случае тебе необходимо находить эту точку итеративно. Про это почитай тут: http://iquilezles.org/www/articles/terrainmarching/terrainmarching.htm

При фиксированном шаге поиска скорость тебя не порадует ^_^ Но есть простое решение которое значительно увеличивает скорость. Тебе надо брать шаг немного меньше или примерно равный наименьшему радиусу сферы, которая не пересекала бы поверхность или проходила через нее лишь по касательной. Про это читаешь тут: http://iquilezles.org/www/material/nvscene2008/nvscene2008.htm

#3
7:25, 24 дек 2009

Trin
Точку пересечения легко найти для сферы, цилиндра, тора, конуса

#4
18:50, 24 дек 2009

Madware
Я так понял суть метода состоит в том что бы последовательно перебирать точки на луче, проверяя лежат ли они на поверхности. Как тогда применить такой подход к поверхности Безье?

Может в случае Безье необходимо применять методы поиска минимума функции двух переменых, например симплекс метод? И искать минимум функции, которая считает растояние от луча до точки на поверхности.

#5
19:36, 25 дек 2009

Trin
> Может в случае Безье необходимо применять методы поиска минимума функции двух
> переменых, например симплекс метод? И искать минимум функции, которая считает
> растояние от луча до точки на поверхности.

аппроксимируй поверхность треугольниками и трассируй их

#6
19:48, 25 дек 2009

Направь поверхность безье в тесселятор, поучи вершиы, а по ним построй треугольники

#7
19:51, 25 дек 2009

innuendo
> аппроксимируй поверхность треугольниками и трассируй их

Можно нубский вопрос? Во всех примерах используются сферы, это вроде как быстро, почему бы тогда не рендерить только ее часть - выпуклый/вогнутый треугольник, а из них составлять сложные фигуры. это возможно?)

#8
19:55, 25 дек 2009

Trin
>Я так понял суть метода состоит в том что бы последовательно перебирать точки на луче, проверяя лежат ли они на поверхности
нет... там суть в другом у тебя есть некая поверхность... ты можешь представить ее f(x,y,z) = с. Для отрезка луча проверяется чтобы на одном конце функция дала результат меньше константы с а на другом больше. Дальше идет простой поиск(лучше разновидность бинарного) с каким-то числом итераций для уточнения результата. На выч. мате был метод который работал так как я тут описал только что, но я точно не помню как назывался он(может так и назывался, метод итераций).

Я сделал целых два варианта поиска, один обычный бинарный, другой с ньютоновской итерацией. При бинарном просто делится отрезок пополам, при ньютоновской на части t * (с-с1)/(c2-c1) и t * (1 - (с-с1)/(c2-c1))

#9
20:06, 25 дек 2009

Вообще, если понимаешь marching cubes, то можно сказать и этот метод ты тож понимаешь. Токо тут марчин рейс))))

#10
20:17, 25 дек 2009

rAmpArk
> Можно нубский вопрос? Во всех примерах используются сферы, это вроде как
> быстро, почему бы тогда не рендерить только ее часть - выпуклый/вогнутый

> треугольник, а из них составлять сложные фигуры. это возможно?)

почему только сферы  ?  а как по твоему трассируют ray на heightMap в физиксе ?

#11
20:39, 25 дек 2009

innuendo
> почему только сферы ?
я не сказал только сферы, вопрос был в том что пересечение со сферой это самый простой и быстрый вариант, и все начинают с этого; и что можно ли выводить не всю сферу, а только ее часть - выпуклый многоугольник.

#12
21:26, 25 дек 2009

rAmpArk
мне кажется это будет странная хрень. Лучше честно найти, или же, как уже говорили, аппроксимировать обычными трианглами.

Насчет можно ли: можно все

#13
15:04, 26 дек 2009

innuendo
> аппроксимируй поверхность треугольниками и трассируй их
В таком случае не будет нормального отражения/преломления. А если и будет то для этого нужно громадное количество треугольников.

rAmpArk
> Можно нубский вопрос? Во всех примерах используются сферы, это вроде как
> быстро, почему бы тогда не рендерить только ее часть - выпуклый/вогнутый
> треугольник, а из них составлять сложные фигуры. это возможно?)
И как из таких треугольников сложить беспрерывную и беспрерывно гладкую поверхность?

Madware
> не помню как назывался он
Назывался он "метод золотой середины". Есть еще пара подобных методов, но они используют производные 1-го и/или 2-го порядка. Но всеравно к Безье они  не применимы. Безье это же f(u,v)=point.

#14
15:24, 26 дек 2009

Trin
Ну, тогда хз) в этом случае действительно легче треугольниками аппроксимировать наверное)

Страницы: 1 2 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.