cylinder impostor в GLSL

Я разрабатываю небольшой инструмент для 3D-визуализации молекул. Для своего проекта я решил сделать что-то вроде того, что сделал г-н «Брэд Ларсон» со своим программным обеспечением Apple «Molecules». Ссылка, по которой вы можете найти небольшую презентацию используемой техники: Презентация программного обеспечения Брэда Ларссона

Для выполнения моей работы я должен вычислить импостер сферы и импостер цилиндра .

На данный момент мне удалось сделать «Сферический самозванец» с помощью другого учебника Ложь и самозванцы

для подведения итогов вычислений сферы-самозванца: сначала мы отправляем «положение сферы» и "радиус сферы" в "вершинный шейдер", который создаст в пространстве камеры квадрат, который всегда обращен к камере, после чего мы отправляем наш квадрат во фрагментный шейдер, где мы используем простую трассировку лучей, чтобы найти, какой фрагмент квадрата включен в сферу, и, наконец, мы вычисляем нормаль и положение фрагмента для вычисления освещения. (другое дело, мы также пишем gl_fragdepth для придания хорошей глубины нашей сфере импостера!)

Но теперь я заблокирован в вычислении импостера цилиндра, я пытаюсь провести параллель между импостером сферы и импостером цилиндра, но я ничего не нахожу, моя проблема в том, что для сферы это было несколько легко, потому что сфера всегда одна и та же, независимо от того, как мы ее видим, мы всегда будем видеть одно и то же: «круг», и другое дело, что сфера Сфера была идеально определена математикой, тогда мы можем легко найти положение и нормаль для вычисления освещения и создать наш самозванец.

Для цилиндра это не одно и то же, и мне не удалось найти намек на моделирование формы, которую можно было бы использовать в качестве «импостора цилиндра», потому что цилиндр показывает много разных форм в зависимости от угла, под которым мы его видим!

Поэтому моя просьба спросить вас о решении или указании на мою проблему с «самозванцем цилиндра».

6
задан marcin 27 May 2016 в 19:01
поделиться