Войти
OpenGL communityФорумУроки по OpenGL

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

Страницы: 1 2 3 4 Следующая »
#15
9:33, 28 окт. 2010

Если автор разделяет видовую и модель матрицы и задействует камеру, то логично использовать данную функцию, к тому же она присутствует в модуле. Но у меня реализация иная, вот я и уточняю, а ты у себя как lookat считаешь?


#16
9:38, 28 окт. 2010

RigoN
> Но у меня реализация иная, вот я и уточняю, а ты у себя как lookat считаешь?

Я считаю так:

  inline mat4 lookAtLH(const vec3 &eye, const vec3 &center, const vec3 &up)
  {
    vec3 vforward = normalize(center - eye);
    vec3 vright = normalize(cross(up, vforward));
    vec3 vup = normalize(cross(vforward, vright));
    return mat4(vec4(vright.x, vup.x, vforward.x, 0.0f),
                vec4(vright.y, vup.y, vforward.y, 0.0f),
                vec4(vright.z, vup.z, vforward.z, 0.0f),
                vec4(-dot(vright, eye), -dot(vup, eye), -dot(vforward, eye), 1.0f));
  }
  
  inline mat4 lookAtRH(const vec3 &eye, const vec3 &center, const vec3 &up)
  {
    vec3 vforward = normalize(center - eye);
    vec3 vright = normalize(cross(up, vforward));
    vec3 vup = normalize(cross(vforward, vright));
    return mat4(vec4(-vright.x, vup.x, -vforward.x, 0.0f),
                vec4(-vright.y, vup.y, -vforward.y, 0.0f),
                vec4(-vright.z, vup.z, -vforward.z, 0.0f),
                vec4(dot(vright, eye), -dot(vup, eye), dot(vforward, eye), 1.0f));
  }

Почему автор не заюзал лукат функцию не знаю...

#17
9:55, 28 окт. 2010

У тебя похожая реализация, как у автора
скажи, какой угол ты вычисляешь - dot(vright, eye) для чего он нужен ?

#18
10:46, 28 окт. 2010

RigoN
> Что матрицы у тебя строчные мы определились ранее, то после транспонирования
> твои доты лягут в четвертую строку, верно?

Блин, не будет никакого транспонирования, dot'ы в шейдере будут в последнем столбце :)
Эти dot'ы это ничто иное как смещение на position в сторону каждого из векторов. Просто задаем так смещение камеры.

#19
11:57, 28 окт. 2010

RigoN
Доты просто замена умножения на транслейт матрицу, с дотами типа быстрее...

#20
14:00, 28 окт. 2010

Итак как я понял это замена транслейта по eye. Так хорошо, тогда объясните к примеру транслейтить надо на (100.0, 100.0, 100), какие значения вернет dot....? Что-то мне подсказывает, что значение от 0 до 1, или я неправ? Совсем другой транслейт получается. Проясните плиз, в чем "великое колдунство" этого алгоритма. Глушный алгоритм мне понятен и ясен, а здесь эти дот'ы смущают.

#21
14:22, 28 окт. 2010

RigoN
> Итак как я понял это замена транслейта по eye. Так хорошо, тогда объясните к
> примеру транслейтить надо на (100.0, 100.0, 100), какие значения вернет
> dot....? Что-то мне подсказывает, что значение от 0 до 1, или я неправ? Совсем
> другой транслейт получается. Проясните плиз, в чем "великое колдунство" этого
> алгоритма. Глушный алгоритм мне понятен и ясен, а здесь эти дот'ы смущают.

Я конечно понимаю что тебе лень на листочке посчитать, но попробуй, сразу все станет понятно, обещаю!

#22
14:28, 28 окт. 2010

KpeHDeJIb
> Я конечно понимаю что тебе лень на листочке посчитать, но попробуй, сразу все
> станет понятно, обещаю!
На листочке действительно лень, доберусь домой сверюсь...

Прошло более 6 месяцев
#23
0:59, 7 мая 2011

Ребят, подскажите, в уроке под расчета камеры используется функция CameraSetup, одним из параметров которой является модельная матрица меша, которая в свою очередь считается как произведение матриц поворота меша на матрицу трансляции меша.
Собственно вопрос, а если я вывожу ленты ландшафта(gl_triangle_strip) то как мне собственно для каждой ленты рассчитывать матрицу трансляции?? 

#24
8:33, 7 мая 2011

Так же. Матрица одинаковая не зависимо от того, как ты рендеришь, стрипами, треугольниками, квадами или линиями, ничего не меняется.

Прошло более 1 года
#25
14:07, 5 ноя. 2012

А как быть, если нужно отрисовать объекты с текстурой и без одним шейдером?
На данный момент я ввел лишний униформ и через него указываю необходимость учета текстуры.
На сколько это годно?
Или правильнее использовать для этого различные шейдеры? (смущает необходимость дублирования кода)
Формат вершин при этом для всех объектов один.

Кстати что посоветуете для редактирования кода шейдеров?

Спасибо!

#26
21:42, 20 янв. 2013

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

#27
21:56, 20 янв. 2013

Pixar
Не, ищи ошибку у себя. Не может быть такого, что просто не рендерится.

#28
22:06, 20 янв. 2013

Sergio
> Не, ищи ошибку у себя. Не может быть такого, что просто не рендерится.
убрал всего 2 строчки:
glEnableVertexAttribArray(normLocation);
glVertexAttribPointer(normLocation, 3, GL_FLOAT, 0, sizeof(Vector3D), 0);

и меш с экрана исчез.

Лог пустой. Значит OPENGL_CHECK_FOR_ERRORS() ошибок не обнаружил.
Кстати, использую #version 330.

===

У меня есть гипотеза, что OpenGL считает, что все out атрибуты должны получать какое-то значение.

Прошло более 9 месяцев
#29
14:29, 31 окт. 2013

В статье код шейдеров либо кривой, либо несовместим с openGL 3.1.
Ругается на вершинный шейдер:
ERROR: 0:7: 'location' : syntax error

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

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