2016-03-27 3 views
0

я буфер нормальных данных в VBO, а затем указать на него с помощью glVertexAttribPointer:При использовании glVertexAttribPointer какой индекс следует использовать для атрибута gl_Normal?

glVertexAttribPointer(<INDEX?>, 3, GL_FLOAT, GL_FALSE, 0, NULL); 

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

Я использую карту NVidia, и здесь я читаю https://www.opengl.org/sdk/docs/tutorials/ClockworkCoders/attributes.php, что gl_Normal всегда имеет индекс 2 для этих типов карт. Но откуда я знаю, что gl_Normal относится к этому индексу для других карт?

Кроме того, использование индекса 2 не работает, и данные gl_Normal в шейдере - все (0,0,0).

Мне известно о glGetAttribLocation и glBindAttribLocation, однако в документации указано, что функция будет вызывать ошибку, если попытается использовать один из встроенных атрибутов вершин, которые начинаются с «gl_».

EDIT: Использование OpenGL 3.0 с GLSL 130.

ответ

4

Вы не делаете. При использовании профиля ядра и VAO, ни один из атрибутов вершины фиксированной функции не существует.

Определите свой собственный атрибут вершины для нормалей в вашем шейдере:

in vec3 myVertexNormal; 

Получить местоположение атрибута (или bind it to a location of your choice):

normalsLocation = glGetAttribLocation(program, "myVertexNormal"); 

Затем использовать glVertexAttribPointer с местоположением:

glVertexAttribPointer(normalsLocation, 3, GL_FLOAT, GL_FALSE, 0, NULL); 

В основном профиле вы также должны делать это для позиций, t экстренные координаты и т. д. OpenGL на самом деле не заботится о том, каковы данные, если ваш вершинный шейдер присваивает что-то gl_Position, а ваш шейдер фрагментов присваивает что-то его выводам.

Если вы настаиваете на использовании устаревших атрибутов фиксированной функции и gl_Normal, используйте вместо этого glNormalPointer.

+0

Эй. Я использую glsl 130, я, наверное, должен был упомянуть, и все ключевые слова «in» и «out» не существуют («Мой плохо!»). Это все еще аналогичный процесс? – ipe369

+0

@ ipe369 Заменить 'in'' атрибутом' в вершинном шейдере. –

+0

А, ладно. Отлично, спасибо человеку! – ipe369

Смежные вопросы