Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / OpenGL 4.5 проблема с vertexarray и с индексами.

OpenGL 4.5 проблема с vertexarray и с индексами.

ronnikoЗабаненwww18 мая 20189:31#0
Win 7 64 bit. AMD HD 7950

Первый вопрос. Когда мы создаем vbo и индекс буфер, а потом vertexarray, то индекс буфер автоматом не крепится ли к vertexarray ?


Второй вопрос. Правильно ли я понимаю, что надо установить нужный vertexarray затем для него нужный индекс буфер ?


Почему я создал эту тему. У меня какая то фигня происходит.
Я рендерю анимацию персонажей в FBO которая для shadowmap. Ставлю vertexarrayPers1 и для него индекс буфер и sbo1 матриц костей, потом vertexarrayPers2 и для него индекс буфер и sbo2 матриц костей.
Затем меняю vertexarray на другие сетки. Вывожу частицы и простые сетки типа деревья.

Потом выставляю опять vertexarray для анимации персонажей и sbo1\sbo2 матриц костей, что бы рендерить персонажей с тенями и тут я могу ставить или не ставить индекс буфера и все равно рендерит персонажей !

И проблема в том что на одном персонаже проявляется глюк в виде лишних растянутых вершин, словно часть вершин не получила матрици анимации и осталась в позиции 0,0,0.
И эта проблема проявляется так.
Гружу модель зомби, потом скелета и опять тот же зомби. И вот на втором зомби глюк.
Если гружу зомби, зомби и последним скелета, то все выглядят правильно !

Правка: 18 мая 2018 9:38

ronnikoЗабаненwww18 мая 20189:43#1
Вот скрин на котором 1-й зомби и скелет правильно выглядят а последний зомби нет.
+ Показать

Правка: 18 мая 2018 9:45

DampireУчастникwww18 мая 20189:44#2
ronniko
Ванга умерла еще в 96, ты не в курсе?
Но я все же повангую и скажу, что у тебя сохраняется количество индексов при рисовании, откуда и берутся мусорные вершины.
void glDrawElements(GLenum mode,  GLsizei count,  GLenum type,  const GLvoid * indices);
ronnikoЗабаненwww18 мая 20189:47#3
Да нет. glDrawElements берет разное число индексов для отрисовки, у каждого перса свое число индексов для отрисовки.
То есть glDrawElements , для зомби и для скелета и для второго зомби.
Только что проверил. Вывожу число рисуемых индексов.
Дает 39072(зомби1),25040(скелет),39072(зомби2).
Зомби1 и Зомби2 одинаковые модели.

Правка: 18 мая 2018 9:57

DampireУчастникwww18 мая 20189:57#4
Тем не менее у тебя явно мусорные вертексы и кривые индексы, поскольку пропадают отдельные треугольники. Явно ломается индексный буфер.
К вопросу из ОП-поста, да индекcный буфер часть VAO-state. Кода я не вижу, так что сорян, ванговалка дальше не идет.
ronnikoЗабаненwww18 мая 201810:04#5
Привожу псевдокод. Чтобы быстро и понятно было.
LoadBinFile Zombi1
Create VBOZombi1
Create IndexBufferZombi1
Create VertexArrayZombi1
Create SBOMatrixAnimationKeysZombi1

LoadBinFile Skelet
Create VBOSkelet
Create IndexBufferSkelet
Create VertexArraySkelet
Create SBOMatrixSkelet

LoadBinFile Zombi1
Create VBOZombi2
Create IndexBufferZombi2
Create VertexArrayZombi2
Create SBOMatrixAnimationKeysZombi2

SetFBOShadowMap
SetShaderShadow
SetVertexArrayZombi1
SetIndexBufferZombi1
SetSBOMatrixAnimationKeysZombi1
glDrawElementsInstanced(GL_TRIANGLES,Zombi1IndxNum, GL_UNSIGNED_INT, 0,1);

SetVertexArraySkelet
SetIndexBufferSkelet
SetSBOMatrixSkelet
glDrawElementsInstanced(GL_TRIANGLES,SkeletIndxNum, GL_UNSIGNED_INT, 0,1);

SetVertexArrayZombi2
SetIndexBufferZombi2
SetSBOMatrixAnimationKeysZombi2
glDrawElementsInstanced(GL_TRIANGLES,Zombi2IndxNum, GL_UNSIGNED_INT, 0,1);

SetFBO,NULL
Потом частицы, деревья
И снова рисую так же как и для теней персонажей.

Правка: 18 мая 2018 10:07

DampireУчастникwww18 мая 201810:18#6
Чот ты порядок мало-мало перепутал
Загрузка
GenVAO
BindVAO
GenVBO
BindVBO
UploadVBO
SetAttributes
GenEBO
BindEBO
UploadEBO

Отрисовка
BindVAO
DrawElements*

Правка: 18 мая 2018 10:18

ronnikoЗабаненwww18 мая 201810:24#7
Может и перепутал. Я могу :)
Тем более я еще нуб в OpenGL. Недавно начал учить.
Daniil PetrovЗабаненwww18 мая 201810:33#8
ronniko
> Тем более я еще нуб в OpenGL. Недавно начал учить.
Мы тебе скинемсо на учебники )))
Great V.Постоялецwww19 мая 201814:24#9
Хорошая, годная тема!
Как в первый раз заглянул - сразу взялся писать ответ и пояснять за жизнь.
Но потом понял, что есть кое какие пробелы в знаниях и некоторые нюансы я тупо не помню.
Погуглил и прифигел от того, сколько всего прошло мимо меня. Сижу и перепиливаю рендер.
Корочи, спасибо Роника!
ZiltopЗабаненwww19 мая 201814:30#10
Great V.
Не спиши меня благодарить !
Ты еще не раз будешь переписывать движок.

Там столько проблем может быть. И дрова. Чудеса АМД дров я уже увидел на OpenGL.
Я тоже думал что OpenGL будет очень просто.
Но ошибся.

Dampire написал как ты говорил в https://gamedev.ru/code/forum/?id=235999#m6
Но таже фигня. Зомби2 все равно с таким же  багом и остался.
У меня есть отрисовка через MultiDrawInderect обычных 3д сеток(один большой VAO в нем 20 разных моделей. Камни, папорот ник, пеньки), не может ли он как то мешать ?


PS: В гугле хром словил спам-рекламу которая сразу переходит на другой сайт. Ни Ublock и не Block Site не помогают. Вот пишу под другим ником и через Мозилу.

Правка: 19 мая 2018 14:41

/ Форум / Программирование игр / Графика

2001—2018 © GameDev.ru — Разработка игр