Форум программистов, компьютерный форум, киберфорум
OpenGL
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
1229 / 596 / 74
Регистрация: 01.10.2012
Сообщений: 2,844
1

GlVertexAttribPointer - как различить вершины, координаты, нормали, цвета

12.09.2016, 09:17. Просмотров 793. Ответов 5
Метки нет (Все метки)


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

Рефакторю старый OpenGL код, и появились квешнзы

1) glVertexPointer, glTexCoordPointer, glNormalPointer, glColorPointer - как я понял это сейчас obsolete/deprecated (хотя код работает). Сейчас грамотно/современно использовать glVertexAttribPointer и связанные с ним вызова API

2) Ну ладно, надо glVertexAttribPointer - так надо. Но меня смутило что нигде нет (или я не нашел) "чему" соответствует атрибут. Т.е. зарядив glVertexAttribPointer нигде не указывается "а что это" (напр вертексы или нормали или UV). Выходит это сейчас решается в самом вертексном шейдере?

Верно ли я понял?

С уважением
Игорь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.09.2016, 09:17
Ответы с готовыми решениями:

Куб - вершины, нормали, текстуры - как задать
В игре, которую я делаю, нужно нарисовать куб, задав вершины, индексы и все параметры вручную. Это...

Как найти координаты третьей вершины треугольника, зная все стороны и две вершины?
Добрый день, подскажите как найти координаты третьей вершины треугольника? Известны координаты...

Раскрасить вершины графа, чтобы смежные вершины были окрашены в различные цвета
Добрый день. Прошу вашей помощи от безысходности. 4 дня назад выдана задача, которую требуется...

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

5
2460 / 1272 / 213
Регистрация: 26.02.2009
Сообщений: 5,409
Записей в блоге: 5
12.09.2016, 11:05 2
Igor3D, на сколько я знаю, в OpenGL 3.3 и выше в режиме core profile(без совместимости со старыми версиями) в шейдерах больше нет gl_Vertex, gl_Normal и прочих build in атрибут. Соответственно ф-ии glVertexPointer и прочии бесполезны.
Вместо этого программист сам определяет названия и смысл переданных атрибут. Надо лишь указать index/location к которому необходимо привязать VBO. Этот индекс можно получить через glGetAttribLocation. Либо явно прописать в шейдере:
C++
1
2
3
layout(location = 0) in vec4 position;
layout(location = 1) in vec2 UV;
layout(location = 2) in vec3 normal;
А потом указать этот индекс в первом параметре GlVertexAttribPointer. Но в последнем случае OpenGL должен быть не ниже 4.1 или проверить поддерживает ли старый GL это расширение (GL_ARB_explicit_attrib_location)

Так же существует ещё один способ "индексации атрибут" перед линковкой программы самому прописать в коде индексы через glBindAttribLocation.

https://www.youtube.com/watch?v=mL6BvXVtd9Y
0
1229 / 596 / 74
Регистрация: 01.10.2012
Сообщений: 2,844
12.09.2016, 11:47  [ТС] 3
Цитата Сообщение от snake32 Посмотреть сообщение
Вместо этого программист сам определяет названия и смысл переданных атрибут.
А как определяется смысл? Например
C++
1
2
3
attribute vec3 position;
attribute vec3 normal;
attribute vec4 color;
Так position, normal и color - это всего лишь имена. Если в вертексном шейдере я напишу
C++
1
gl_Posituon = some_matrix * color;
, то у меня будет атрибут color использоваться как позиции вертексов?
0
2460 / 1272 / 213
Регистрация: 26.02.2009
Сообщений: 5,409
Записей в блоге: 5
12.09.2016, 11:59 4
Цитата Сообщение от Igor3D Посмотреть сообщение
то у меня будет атрибут color использоваться как позиции вертексов?
Да, можно и так. Только кто кроме вас потом поймёт этот код? Да и сами наверное забудете через месяцок, что там и как. Особенно если кода не пару строк.

Добавлено через 1 минуту
Если хотите стать незаменимым программистом, то названия без смысла - отличный способ. Главное самому потом на эти грабли не наступить
0
22 / 24 / 2
Регистрация: 04.08.2015
Сообщений: 590
12.09.2016, 18:08 5
Суть шейдеров в том что вы сами решаете как должны использоваться позиционные данные, как цветовые, а как текстурные. Да, вы можете написать что вместо позиционных данных будут использоваться данные цвета, и результатом будет позиция в пределах от 0 до 1 в координатах openGL.
Как уже здесь ранее писалось, мостом соединяющим шейдер и массивы вершинных атрибутов служит location в шейдере и первая переменная функции glVertexAttribPointer().
То есть первая переменная функции glVertexAttribPointer() говорит в какой области хранить данные массивов, а location шейдера определяет из какой области эти данные получать.

Различие вершин цвета, нормалей, и позиционных данных, в их назначении и следовательно в использовании. А как они будут использоваться вы задаете сами в шейдере.
0
1229 / 596 / 74
Регистрация: 01.10.2012
Сообщений: 2,844
13.09.2016, 11:32  [ТС] 6
Цитата Сообщение от snake32 Посмотреть сообщение
Да, можно и так.
Ага, значит понял верно. Спасибо
Цитата Сообщение от snake32 Посмотреть сообщение
Только кто кроме вас потом поймёт этот код?
Глупые примеры запоминаются гораздо легче
Цитата Сообщение от koker007 Посмотреть сообщение
Как уже здесь ранее писалось, мостом соединяющим шейдер и массивы вершинных атрибутов служит location в шейдере и первая переменная функции glVertexAttribPointer().
Наверное это мост между шейдером и приложением на С++ или др языке
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.09.2016, 11:32

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

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

Заданы координаты трех вершин прямоугольника, необходимо определить координаты четвертой вершины
Заданы координаты трех вершин прямоугольника. Необходимо определить координаты четвертой вершины....

Пусть даны координаты трех вершин прямоугольника. Определите координаты четвертой вершины
Пусть даны координаты трех вершин прямоугольника. Определите координаты четвертой вершины. Сделайте...

Найти координаты всех вершин параллелограмма, если известны координаты одной вершины и уравнения двух его сторон
Найти координаты всех вершин параллелограмма, если известны координаты одной вершины А=(12;-7) и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.