![]() |
Ответ: OpenGL
Как передать в шейдер множество текстур?
У меня есть большой массив vertexData, в котором хранятся координаты вертексов и координаты текстуры. Рисуется это всё дело за один glDrawArrays(верно ли?). И мне нужно на каждую пару треугольников(квад) наложить свою текстуру. Как это лучше всего сделать? |
Ответ: OpenGL
GL_ARB_BINDLESS_TEXTURE - лучший вариант, но ето только на кеплере и выше. Тут у каждого пикселя может быть своя текстура, что очень круто. Тебе нужно будет лишь добавить к вершине аттрибут - 64битный хэндл текстуры на гпу.
если текстуры одинаковые по формату и размеру - texture array. если разные - пакуй в атлас. вообще последний вариант самый неприхотливый |
Ответ: OpenGL
А как быть с контекстом постарее?
|
Ответ: OpenGL
атлас - хоть на 1.0.
|
Ответ: OpenGL
Код:
gl_Position = vec4(vposition*mat2(cos(angle),-sin(angle),sin(angle),cos(angle)),0.0,1.0); Решил вращать на гапи, передавая в шейдер угол поворота. Матрица проверенная, точно работать должна, однако результат дает очень странный, получается дикое искажение примитива, а не вращение. Как будто используется ещё и z ось. В чем может быть проблема? Про оптимизацию не надо говорить, написал так здесь для краткости кода. |
Ответ: OpenGL
В гапи ожидается screen space матрица, или ты умножаешь на viewport projection матрицу до твоего поворота?
|
Ответ: OpenGL
Нет, больше на матрицы я не умножаю. Можно подробнее? Это вообще необходимо при жестком 2D?
|
Ответ: OpenGL
Ну прежде чем отдавать в шейдере позицию вершины во фрагментный конвеер ты должен её умножить на матрицу камеры (viewproj).
|
Ответ: OpenGL
Цитата:
|
Ответ: OpenGL
Цитата:
Ты пытаешься повернуть вершину уже в скрин-спейсе, и тут два варианта - либо ты в шейдере перед этим множишь на viewproj либо ещё до шейдера это делаешь (на CPU). |
Ответ: OpenGL
Цитата:
Код:
mat2 rotationMat = mat2(cos(angle),-sin(angle),sin(angle),cos(angle)); и вообще вскрой любой движок, так никто не делает. Обычно это на ЦПУ делается. modelMat должен приехать уже с поворотом, а вместо двух projMat, viewMat можно в шейдер отдавать уже перемноженый projViewMat, актуально для батчей, чтоб не перемножать на каждую вершину. |
Ответ: OpenGL
А почему тогда отображение без вращения верно?
И если всё же нужны матрицы, как её рассчитать вручную, без GLM? Просто как-то не ахти подключать дополнительную библиотеку для одного расчета, а гугл явно твердит, что следует использовать GLM. |
Ответ: OpenGL
Цитата:
Можешь еще спросить у HolyDel, он реализовывал без GLM. Только вроде для mat4x4 p.s. если верно без вращения, значит ты уже в скрин спейсе формируешь и отправляешь в шейдер, тогда поворот будет работать относительно не своего центра, а точки 0.0 на экране, это центр зачем тогда вообще на матрицу умножать? вот на, кусок с моего движка Код:
point BatchOpenGL::rotatePoint(float cx, float cy, float angle, point p) |
Ответ: OpenGL
У HolyDel же с 3D, мне оно вообще не нужно и не планируется, поэтому камера всегда будет в одном и том же положении, значит и матрица проекции на камеру тоже всегда будет одна и та же.
|
Ответ: OpenGL
Цитата:
|
Часовой пояс GMT +4, время: 20:38. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot