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

Обсуждение уроков
Ответить
Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

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

Сообщение damager82 » 16 фев 2016, 06:00

В этом уроке:
- перемещаем отдельный объект


Click here to read this article!
Последний раз редактировалось damager82 06 июн 2017, 23:10, всего редактировалось 6 раз.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

MaestroVS
Сообщения: 5
Зарегистрирован: 15 фев 2016, 12:15
Откуда: Kiev

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

Сообщение MaestroVS » 16 фев 2016, 17:54

Спасибо большое! Радует, что статьи появляются как раз по мере моего освоения openGL =)

Draz1w
Сообщения: 20
Зарегистрирован: 10 окт 2015, 17:07

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

Сообщение Draz1w » 16 фев 2016, 20:31

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

danek130995
Сообщения: 42
Зарегистрирован: 25 янв 2015, 18:57

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

Сообщение danek130995 » 20 фев 2016, 15:17

Спасибо за отличный урок!

potykion
Сообщения: 2
Зарегистрирован: 21 фев 2016, 14:11

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

Сообщение potykion » 21 фев 2016, 14:14

Здравствуйте, как перемещать одну из вершин объекта, а не объект полностью?

Draz1w
Сообщения: 20
Зарегистрирован: 10 окт 2015, 17:07

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

Сообщение Draz1w » 21 фев 2016, 18:46

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);

potykion
Сообщения: 2
Зарегистрирован: 21 фев 2016, 14:11

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

Сообщение potykion » 22 фев 2016, 02:13

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

Draz1w
Сообщения: 20
Зарегистрирован: 10 окт 2015, 17:07

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

Сообщение Draz1w » 22 фев 2016, 08:29

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

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

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

chego
Сообщения: 3
Зарегистрирован: 18 фев 2017, 04:02

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

Сообщение chego » 27 фев 2017, 04:46

зачем каждый раз делать процессором multiplyMM трех матриц?
Как можно передать все матрицы (projection view model) отдельно (без multiplyMM) в шейдер что бы там их складывать?

Kruger71
Сообщения: 1
Зарегистрирован: 19 июл 2018, 15:28

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

Сообщение Kruger71 » 19 июл 2018, 15:31

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

Ответить