Если автор разделяет видовую и модель матрицы и задействует камеру, то логично использовать данную функцию, к тому же она присутствует в модуле. Но у меня реализация иная, вот я и уточняю, а ты у себя как lookat считаешь?
RigoN
> Но у меня реализация иная, вот я и уточняю, а ты у себя как lookat считаешь?
Я считаю так:
inline mat4 lookAtLH(const vec3 &eye, const vec3 ¢er, 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 ¢er, 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)); }
Почему автор не заюзал лукат функцию не знаю...
У тебя похожая реализация, как у автора
скажи, какой угол ты вычисляешь - dot(vright, eye) для чего он нужен ?
RigoN
> Что матрицы у тебя строчные мы определились ранее, то после транспонирования
> твои доты лягут в четвертую строку, верно?
Блин, не будет никакого транспонирования, dot'ы в шейдере будут в последнем столбце :)
Эти dot'ы это ничто иное как смещение на position в сторону каждого из векторов. Просто задаем так смещение камеры.
RigoN
Доты просто замена умножения на транслейт матрицу, с дотами типа быстрее...
Итак как я понял это замена транслейта по eye. Так хорошо, тогда объясните к примеру транслейтить надо на (100.0, 100.0, 100), какие значения вернет dot....? Что-то мне подсказывает, что значение от 0 до 1, или я неправ? Совсем другой транслейт получается. Проясните плиз, в чем "великое колдунство" этого алгоритма. Глушный алгоритм мне понятен и ясен, а здесь эти дот'ы смущают.
RigoN
> Итак как я понял это замена транслейта по eye. Так хорошо, тогда объясните к
> примеру транслейтить надо на (100.0, 100.0, 100), какие значения вернет
> dot....? Что-то мне подсказывает, что значение от 0 до 1, или я неправ? Совсем
> другой транслейт получается. Проясните плиз, в чем "великое колдунство" этого
> алгоритма. Глушный алгоритм мне понятен и ясен, а здесь эти дот'ы смущают.
Я конечно понимаю что тебе лень на листочке посчитать, но попробуй, сразу все станет понятно, обещаю!
KpeHDeJIb
> Я конечно понимаю что тебе лень на листочке посчитать, но попробуй, сразу все
> станет понятно, обещаю!
На листочке действительно лень, доберусь домой сверюсь...
Ребят, подскажите, в уроке под расчета камеры используется функция CameraSetup, одним из параметров которой является модельная матрица меша, которая в свою очередь считается как произведение матриц поворота меша на матрицу трансляции меша.
Собственно вопрос, а если я вывожу ленты ландшафта(gl_triangle_strip) то как мне собственно для каждой ленты рассчитывать матрицу трансляции??
Так же. Матрица одинаковая не зависимо от того, как ты рендеришь, стрипами, треугольниками, квадами или линиями, ничего не меняется.
А как быть, если нужно отрисовать объекты с текстурой и без одним шейдером?
На данный момент я ввел лишний униформ и через него указываю необходимость учета текстуры.
На сколько это годно?
Или правильнее использовать для этого различные шейдеры? (смущает необходимость дублирования кода)
Формат вершин при этом для всех объектов один.
Кстати что посоветуете для редактирования кода шейдеров?
Спасибо!
У меня есть один шейдер, который я использую для нескольких мешей. В большинстве мешей используются нормали, но есть меши без них.
Оказывается, если в шейдере, использующем нормали, для меша их не задать, то он просто не рендерится. Сейчас приходится втыкать заглушку для нормалей, чтобы меши выводились.
Можно ли как-нибудь сделать это по-человечески?
Pixar
Не, ищи ошибку у себя. Не может быть такого, что просто не рендерится.
Sergio
> Не, ищи ошибку у себя. Не может быть такого, что просто не рендерится.
убрал всего 2 строчки:
glEnableVertexAttribArray(normLocation);
glVertexAttribPointer(normLocation, 3, GL_FLOAT, 0, sizeof(Vector3D), 0);
и меш с экрана исчез.
Лог пустой. Значит OPENGL_CHECK_FOR_ERRORS() ошибок не обнаружил.
Кстати, использую #version 330.
===
У меня есть гипотеза, что OpenGL считает, что все out атрибуты должны получать какое-то значение.
В статье код шейдеров либо кривой, либо несовместим с openGL 3.1.
Ругается на вершинный шейдер:
ERROR: 0:7: 'location' : syntax error
Тема в архиве.