Страница 1 из 1

Урок 174. OpenGL. Модель

Добавлено: 16 фев 2016, 06:00
damager82
В этом уроке:
- перемещаем отдельный объект


Click here to read this article!

Re: Урок 174. OpenGL. Модель

Добавлено: 16 фев 2016, 17:54
MaestroVS
Спасибо большое! Радует, что статьи появляются как раз по мере моего освоения openGL =)

Re: Урок 174. OpenGL. Модель

Добавлено: 16 фев 2016, 20:31
Draz1w
Отличный урок, вот этого материала как раз не хватает. Когда сам разбирался пришлось долго методом тыка осваивать.

Re: Урок 174. OpenGL. Модель

Добавлено: 20 фев 2016, 15:17
danek130995
Спасибо за отличный урок!

Re: Урок 174. OpenGL. Модель

Добавлено: 21 фев 2016, 14:14
potykion
Здравствуйте, как перемещать одну из вершин объекта, а не объект полностью?

Re: Урок 174. OpenGL. Модель

Добавлено: 21 фев 2016, 18:46
Draz1w
potykion писал(а):Здравствуйте, как перемещать одну из вершин объекта, а не объект полностью?
так стараются не делать, потому что это достаточно дорогостоящая операция.
Вам придется по новой сформировать буферы вершин.
А обычно трансформации делают над всем объектом.

Можно конечно выкрутиться на на уровне шейдера еще попоробовать сделать.
С помощью дополнительного массива данных для каждой вершины.
Например у нас есть 4 вершины квадрата,
для каждой вершины мы задаем дополнительный массив
из 0 или 1 для каждой вершины, в зависимости от того хотим мы ее трансформировать или нет.
attribute float aNeedTransform;
vec4 displacement= vec4(1.0,1.0,1.0,1.0);
и в вершинном шейдере сместить нужные вершины. (при умножении на 1 - будет смещение, при умножении на 0 соостветственно не будет)
gl_Position = mvp * (aPosition+aNeedTransform*displacement);

Re: Урок 174. OpenGL. Модель

Добавлено: 22 фев 2016, 02:13
potykion
Draz1w писал(а): так стараются не делать, потому что это достаточно дорогостоящая операция.
А во всяких 3D-редакторах модели разве не так делаются?

Re: Урок 174. OpenGL. Модель

Добавлено: 22 фев 2016, 08:29
Draz1w
potykion писал(а):
Draz1w писал(а): так стараются не делать, потому что это достаточно дорогостоящая операция.
А во всяких 3D-редакторах модели разве не так делаются?
в 3d редакторе делаешь модель как тебе нужно потом ее экспортируешь всю.
Вот какую сделал, такая и будет у тебя в движке. Потом над ней трансформации делаешь, scale, rotate, translate.
отдельно повершинно не трансформируют.

А анимацию персонажей например делают двумя способами:
1 - покадровая ( как спрайты, но только моделями). Т.е. делают 10 разных моделей для разных положений персонажа и просто ее меняют. Минус способа - затраты памяти (нужно 10 моделей вместо одной хранить).
2 - скелетная. В 3Д редакторе делают у модели так называемые кости - скелет и выгружают в свой движок, и используют специальный шейдер вершинный, которые трансформирует модель в шейдере в соостветствии с параметрами костей. Минус способа - очень затратные вычисления.

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

Re: Урок 174. OpenGL. Модель

Добавлено: 27 фев 2017, 04:46
chego
зачем каждый раз делать процессором multiplyMM трех матриц?
Как можно передать все матрицы (projection view model) отдельно (без multiplyMM) в шейдер что бы там их складывать?

Re: Урок 174. OpenGL. Модель

Добавлено: 19 июл 2018, 15:31
Kruger71
Добырй день,сомневаюсь.что кто то ответи,но попытка не пытка. Опираясь на код представленный в курсе,как можно используя функцию public void setModelMatrix() {Matrix.translateM(mModelMatrix, 0, x, y, 0);} перемещать объекты,после их создания. То есть я создал объект,и хочу при нажатии его переместить,как я это могу делать,причем нужно именно ,чтобы перерисовывался сам объект,а не удалялся.а затем создавался новый с новми координатами.