Войти
ПрограммированиеФорумВеб

WebGL перемещение объекта, изменение вершин в VAO

#0
(Правка: 23:06) 23:05, 26 мар. 2019

Всем добрый вечер. Можете подсказать, постараюсь как можно яснее описать свой вопрос.
Я рисую кубик, перемещаю его, например по оси z верх. Тут у меня сложностей нет, использую матрицу модели, передаю ее в шейдер как иниформу. Весь кубик перемещается вверх.

Я захотел сделать перемещение не всего кубика, а поднять только одно его ребро, или изменить только 1 вершину. И не понимаю как это сделать.

this.attribs = {
  vertexs: [-1.0, -1.0, 1.0, 1.0, -1.0, 1.0, 1.0, 1.0, 1.0, .....],
  colors: [1.0,0.0,0.0 , 1.0,0.0,0.0 , 1.0,0.0,0.0 , .....],
  texcoord: [0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0, .....],
  indices: [0, 1, 2, 0, 2, 3, 4, 5, 6, 4, 6, 7, 8, 9, 10, .....],
};

Перед началом отрисовки, я прохажусь по всему этому, создаю vbo и все записываю в vao.
Вот как мне сделать, что при клике на кнопку менялась только одна верщина.

this.attribs.vertexs[0] = -2 //первый клик
this.attribs.vertexs[0] = -3 //второй клик
// и т.д.

Я пробовал при отрисовке кажого кадра заново создавать vao и vbo, работает, но производительность в таком случае падает просто ниже плинтуса. Можно ли как-то изменить vao?

Пробовал смотреть через консоль, но все что получаю.

console.dir(obj.vao);
VM553:1 WebGLVertexArrayObject

Решил записать видео, там 2 минуты, наглядно показываю что я имею ввиду https://yadi.sk/i/PcG5WKdk8bBpVg

Заранее всем спасибо за помощь.


#1
7:20, 27 мар. 2019

https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingCo… bufferSubData

#2
11:27, 27 мар. 2019

SkyWeb
то, что ты хочешь, прямым образом делается через апдейт буфера. однако, применимость у такого способа очень ограничена в полевых условиях, потому что если у тебя модель на 100К вершин, то тебе едва ли захочется каждый кадр обновлять их. к тому же меш обычно один на несколько игровых объектов и подобные изменения повлияют на все объекты. возможно, тебе нужна скелетная анимация — это типичный способ создания анимированных моделей, где каждая вершина привязывается с определёнными весами к нескольким костям. вершин много, костей достаточно мало(обычно несколько десятков), поэтому положения костей обновляют каждый кадр.

#3
(Правка: 15:44) 15:37, 27 мар. 2019

Suslik
> меш обычно один на несколько игровых объектов
чойта ? O_o

аа, ты видимо про то, что физически меш один, но может быть отрисован несколько раз с разными трансформациями,
и по этому модифицировав сетку она изменится в нескольких местах.
ПрограммированиеФорумВеб