Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.02.2014, 21:41   #1
gunsoy
Форумчанин
 
Регистрация: 30.12.2010
Сообщений: 280
Вопрос VBO VAO и несколько GL_ELEMENT_ARRAY_BUFFER

Здравствуйте.

Запутался с VBO, VAO. Вот способ с которым я работал и всё было нормально. Есть 4 массива данных (GL_ARRAY_BUFFER) и один массив (GL_ELEMENT_ARRAY_BUFFER) которые я запихиваю в VBO, который привязан к VAO.

При отрисовке модели, появилась необходимость менять текстуры и поэтому индексы которые у меня находились в GL_ELEMENT_ARRAY_BUFFER были разбиты на несколько частей, для которых должны использоваться всё те же 4 массива данных GL_ARRAY_BUFFER. Только вот в VAO должен быть лишь один массив элементов GL_ELEMENT_ARRAY_BUFFER. Это мне придётся для каждого массива индексов GL_ELEMENT_ARRAY_BUFFER создавать свои VAO и VBO в которых находятся одни и те же данные за исключением индексов или есть другой способ?

Вот для наглядности, код сокращён

Код:
// создаем VAO
glGenVertexArrays(1, &meshVAO);
// сделаем VAO активным
glBindVertexArray(meshVAO);
glGenBuffers(5, meshVBO);
// получим индекс вершинного атрибута 'position' из шейдерной программы
positionLocation = glGetAttribLocation(shaderProgram, "Vertex");
if (positionLocation != -1)
{
    glBindBuffer(GL_ARRAY_BUFFER, meshVBO[0]);
    glBufferData(GL_ARRAY_BUFFER, VerticesSize * sizeof(float),
    Vertices, GL_STATIC_DRAW);
    // укажем параметры вершинного атрибута для текущего активного VBO
    glVertexAttribPointer(positionLocation, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), 0);
    // разрешим использование вершинного атрибута
    glEnableVertexAttribArray(positionLocation);
}

//Тут еще 3 элемента VBO

// начинаем работу с индексным буфером
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, meshVBO[4]);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, IndecesSize * sizeof(int),Indeces, GL_STATIC_DRAW);
glBindVertexArray(0);
gunsoy вне форума Ответить с цитированием
Старый 12.02.2014, 12:36   #2
gunsoy
Форумчанин
 
Регистрация: 30.12.2010
Сообщений: 280
По умолчанию

По другому задам вопрос, вот так я записываю данные в буфер видеокарты

Код:
glBindBuffer(GL_ARRAY_BUFFER, meshVBO[0]);
glBufferData(GL_ARRAY_BUFFER, VerticesSize * sizeof(float),
Vertices, GL_STATIC_DRAW);
А есть ли возможность использовать этот же буфер для другого VAO?
gunsoy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
несколько апдейтов denis_stell Microsoft Office Access 1 07.08.2013 22:23
1) как перетащить несколько модулей с одной книги на другую одним скопом? 2)можно ли открыть несколько книг сразу? БАХТИ Microsoft Office Excel 17 26.09.2011 18:11
VBO OpenGL jec Общие вопросы C/C++ 1 05.10.2010 03:14
Раздача Ин-та на несколько ПК Alexei91 Компьютерное железо 1 29.09.2010 07:52
Несколько ComboBox WhistleR Компоненты Delphi 10 05.10.2009 09:24