POVray: Как надежно создавать приятные слияния объектов, просто касаясь поверхности? - PullRequest
2 голосов
/ 29 января 2010

Что я делаю

У меня есть сцена, которая алгоритмически рисует prism с шестиугольным поперечным сечением и n слоев таких призм, окружающих центральный, так что все призмы вместе образуют большую шестиугольную форму.

Теперь каждый ряд призм смещается от следующего на кратное sqrt (3) / 2 (поскольку размеры одной призмы <1, sqrt (3)>, потому что sin (120/2 °) = SQRT (3) / 2).

Я полагаю, что значения с плавающей точкой результирующих позиций по отношению к размерам призм не всегда точно совпадают так, чтобы образовался нулевой зазор между объектами. Следовательно, я не получаю гладкую, однородную форму, когда оборачиваю все это в merge и назначаю ему прозрачный стеклянный материал. В зависимости от значения n, я получаю странную странность по краям внутри объекта слияния, или тени некоторых поверхностей, или обоих.

Это фрагмент из блока комментариев в начале моего кода, который объясняет сцену в искусстве ASCII:

       __
    __/  \__
 __/  \ 1/  \__
/  \13/  \ 6/  \
\17/  \ 2/  \10/
/  \14/  \ 7/  \      #3 is at <0,0,0>
\18/  \ 3/  \11/
/  \15/  \ 8/  \
\19/  \ 4/  \12/
   \16/  \ 9/
      \ 5/

Весь код слишком длинный для вставки, но он доступен здесь . Наверное, читать очень больно, потому что я плохой кодер и потому что POVray не имеет циклов #for.

Мой вопрос (ы)

  • Как я могу учесть непредсказуемость и неточность значений с плавающей точкой при объединении математически расположенных объектов, которые только касаются поверхности, но не перекрываются?
  • Это даже должно работать так, как я хочу в POVray?
  • Я здесь что-то очень глупо делаю?

Ответы [ 2 ]

0 голосов
/ 08 марта 2011

В нашей компании мы столкнулись с такими же проблемами с совпадающими поверхностями . Нашим решением этой проблемы был макрос , который генерировал бы очень маленькое положительное случайное значение. Это гарантирует (1) поверхности никогда не совпадают (2), даже если вы добавите это небольшое значение к обеим поверхностям.

0 голосов
/ 29 января 2010

Я почти уверен, что стандартный подход - сделать так, чтобы ваши фигуры перекрывались больше или не касались вообще. В вашем конкретном случае вы можете сделать свои призмы немного больше или чуть меньше.

У Povray также есть операция "union", которая очень похожа на "merge", но выглядит немного иначе. Вы также можете попробовать его, чтобы увидеть, дает ли он лучшие результаты.

В графике нередко попробовать несколько подходов, чтобы увидеть, что выглядит лучше. : -)

...