OpenGL communityФорумУроки по OpenGL

Урок 4 - Свет, камера, материал! Часть 1 (комментарии)

Страницы: 1 2 3 4 Следующая »
#0
20:43, 26 окт 2010

Урок 4 - Свет, камера, материал! Часть 1 (комментарии)

Это сообщение сгенерировано автоматически.

#1
20:43, 26 окт 2010

Дублирую http://code.google.com/p/gl33lessons/wiki/Lesson04

#2
1:47, 27 окт 2010

Можешь прокомментировать функцию LookAT в особенности, что такое dot?

#3
9:54, 27 окт 2010

RigoN
> что такое dot?

А ты ещё хотел чтобы в уроке понапиханы мат формулы были... :)
dot это скалярное произведение - косинус угла между двумя векторами (конечно если вектора нормализовать)...
Арккосинус этого числа даст угол в радианах...

#4
10:07, 27 окт 2010

Executor
> dot это скалярное произведение
я уточняю...
А у тебя lookat так же считается? Имеется ввиду алгоритм получения матрицы.

#5
10:35, 27 окт 2010

RigoN
> А у тебя lookat так же считается? Имеется ввиду алгоритм получения матрицы.

Обычно я пользуюсь функцией которая строит мне матрицу, но и транслейт + ротейт применяю, например в той же статье про шадоумапы, насколько мне помнится я сделал вращение камеры с помощью ротейтов и транслейтов...

#6
11:41, 27 окт 2010

RigoN
> А у тебя lookat так же считается? Имеется ввиду алгоритм получения матрицы.
Этот алгоритм из доки по DirectX, ибо в доке к glLookAt кривой алгоритм.

Кстати не помню чтобы у меня там использовалась эта функция, я ее в этом уроке оставил без внимания.

#7
12:49, 27 окт 2010

KpeHDeJIb
> Этот алгоритм из доки по DirectX, ибо в доке к glLookAt кривой алгоритм.
Я это заметил..., поэтому и спрашиваю, почему ты решил использовать именно этот вариант?
Так как и в документации к glu, откуда берет корни данная функция и в wiki и в исходниках glu используется другой алгоритм. Этот же алгоритм я использую у себя. KpeHDeJIb
> Кстати не помню чтобы у меня там использовалась эта функция, я ее в этом уроке
> оставил без внимания.
Видовую матрицу ты же создаешь и умножаешь её на матрицу проекции.
Executor
> Обычно я пользуюсь функцией которая строит мне матрицу, но и транслейт + ротейт
> применяю,
А никто и не спорит в том, что это две стороны одной медали - модельно-видовых преобразований. Вопрос не глобальный, а вопрос в реализации создания видовой матрицы ака LookAt.

#8
12:55, 27 окт 2010

RigoN
> Так как и в документации к glu, откуда берет корни данная функция и в wiki и в
> исходниках glu используется другой алгоритм. Этот же алгоритм я использую у
> себя

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

#9
14:46, 27 окт 2010

KpeHDeJIb
Зачем «Чтение: Всем зарегистрированным»? Открой доступ.

#10
14:51, 27 окт 2010

wat
> Зачем «Чтение: Всем зарегистрированным»? Открой доступ.

Открыл.

#11
3:56, 28 окт 2010

KpeHDeJIb
> Ну я же сказал, взял из DX-а алгоритм потому что он мне больше понравился,
> никакого тайного умысла тут нет.
Я не про тайный умысел я про алгоритм вычисления
мне не понятно вот в этом коде:

inline const mat4 GLLookAt(const vec3 &position, const vec3 &center, const vec3 &up)
{
        const vec3 f = normalize(position - center);
        const vec3 s = normalize(cross(up, f));
        const vec3 u = normalize(cross(f, s));

        return mat4(s.x, s.y, s.z, -dot(s, position),
                    u.x, u.y, u.z, -dot(u, position),
                    f.x, f.y, f.z, -dot(f, position),
                    0, 0, 0, 1);
}

что ты вычисляешь используя -dot(s, position) исходя из коментов выше косинус угла причем еще и с минусом, проясни плиз
в исходниках gluLookAt сделано иначе. Что матрицы у тебя строчные мы определились ранее, то после транспонирования твои доты лягут в четвертую строку, верно?
У себя я делал по анологии с исходниками glu.
вот так в glu

void GLAPIENTRY
gluLookAt(GLdouble eyex, GLdouble eyey, GLdouble eyez, GLdouble centerx,
    GLdouble centery, GLdouble centerz, GLdouble upx, GLdouble upy,
    GLdouble upz)
{
    float forward[3], side[3], up[3];
    GLfloat m[4][4];

    forward[0] = centerx - eyex;
    forward[1] = centery - eyey;
    forward[2] = centerz - eyez;

    up[0] = upx;
    up[1] = upy;
    up[2] = upz;

    normalize(forward);

    /* Side = forward x up */
    cross(forward, up, side);
    normalize(side);

    /* Recompute up as: up = side x forward */
    cross(side, forward, up);

    __gluMakeIdentityf(&m[0][0]);
    m[0][0] = side[0];
    m[1][0] = side[1];
    m[2][0] = side[2];

    m[0][1] = up[0];
    m[1][1] = up[1];
    m[2][1] = up[2];

    m[0][2] = -forward[0];
    m[1][2] = -forward[1];
    m[2][2] = -forward[2];

    glMultMatrixf(&m[0][0]);
    glTranslated(-eyex, -eyey, -eyez);
}
#12
8:11, 28 окт 2010

RigoN
Эта функция откуда? У него же в примере нет никакого lookat...

#13
9:00, 28 окт 2010

Executor
> Эта функция откуда? У него же в примере нет никакого lookat...
а это

#14
9:25, 28 окт 2010

Ну так эта функция в примере же никак не фигурирует, соответственно для чего её в примере объяснять?
Или я чего не понял?

Страницы: 1 2 3 4 Следующая »
OpenGL communityФорумУроки по OpenGL

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