собственная реализация подсветки Фонга с raycasting

Я пытаюсь написать программу на java с нуля, которая визуализирует сферу с помощью техники raycasting и фонговой подсветки, но я немного потерялся.

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

Итак, скажем, я хочу отобразить сферу в середине экрана, и у меня есть ее положение и радиус, поэтому (cx, cy, r). С чего конкретно мне начать сейчас? как именно я могу получить значения вектора? моя идея заключается в следующем (псевдокод)

int cx = window width/2
int cy = window height/2
int r = 30;
for(i = 0 -> window height) {
    for(j = 0 -> window width) {
        if( (j-cx)^2 + (i-cy)^2 < r^2) {
            //point inside
            Color c = phong(arguments..)
            draw pixel j,i with color c
        }

    }
}

но я понятия не имею, правильно это или нет, и если да, то как мне получить векторные значения, для начала, Нормальный?

не могли бы вы указать мне в правильном направлении? Я пытался много гуглить, но безуспешно, заранее спасибо


person asdt11    schedule 19.01.2013    source источник
comment
Несколько лет назад я написал очень простой трассировщик лучей на Java: github.com/gkopff/stingray - возможно, это вдохновит вас.   -  person Greg Kopff    schedule 20.01.2013


Ответы (1)


Векторы для вычисления нормали обычно берутся из тесселяции (аппроксимации) реального геометрического объекта. Итак, вы разбиваете сферу, скажем, на треугольники. Тогда каждый треугольник (p1,p2,p3) имеет свой собственный вектор нормали ((p2-p1)(p3-p1).

Метод затенения Фонга представляет собой интерполяцию, которая затем (в идеале) размывает линии, которые выдают тот факт, что вы рисуете треугольники, а не правду. em> сфера. Однако это не помогает с углами по бокам. :(

Для тесселяции одним из способов является аппроксимация сферы с помощью участков поверхности Безье, которые затем можно разделить на подходящие маленькие размеры и упростить до треугольников. Мой вопрос здесь посвящен выполнению этой работы по рисованию чайник (в основном поверхности вращения, мало чем отличающиеся от сфер).

person luser droog    schedule 17.02.2013