Как выглядят шейдеры GLSL по умолчанию? для версии 330

Как по умолчанию выглядят шейдеры GLSL вершин, фрагментов и геометрии для версии №330?

Я буду использовать #version 330 GLSL Version 3.30 NVIDIA через компилятор Cg, потому что это то, что поддерживает моя видеокарта.

Под шейдерами по умолчанию я имею в виду те шейдеры, которые делают то же самое, что и графическая карта, когда программа шейдеров выключена.

Я не могу найти хороший пример для #version 330 . Гуглил весь день. Не уверен, что термин шейдер по умолчанию называется чем-то еще, например, тривиальным или базовым, и если поэтому я не могу его найти.

Любые рекомендации для книги с версией 330 или ссылка на простой учебник для начинающих с версией 330 также будут хороши.

пример тривиального вершинного шейдера в # версии 110, выполняет преобразование вершин по умолчанию

#version 110

void main()
{
    gl_Position = gl_ProjectionMatrix * gl_ModelViewMatrix * gl_Vertex;
}

пример тривиального фрагментного шейдера в # версии 110, превращает цвет в красный

#version 110

void main()
{
    gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
25
задан Alim Ul Gias 26 December 2011 в 03:18
поделиться

1 ответ

В OpenGL нет шейдеров «по умолчанию». Похоже на то, что вам нужен очень простой пример шейдера, который преобразует вершины в пространство клипа и дает им цвет, поэтому вы идете:

Вершинный шейдер:

#version 330

layout(location = 0)in vec4 vert;

uniform mat4 projection;
uniform mat4 view;
uniform mat4 model;

void main()
{
    gl_Position = projection * view * model * vert;
}

Фрагментный шейдер :

#version 330

out vec4 fragColor;

void main()
{
    fragColor = vec4(1.0, 0.0, 0.0, 1.0);
}

Основной профиль OpenGL 3.3 отказывается от поддержки многих старых вещей с фиксированными функциями, таких как матричный стек. От вас ожидается обработка ваших собственных матриц и отправка их вашим шейдерам. Здесь нет ftransform, и gl_Position является практически единственной допустимой переменной gl_ *.

Хотя glBindAttribLocation не считается устаревшим, предпочтительный метод определения местоположения атрибутов вершин - через «layout (location = x)» в GLSL.

В вершинном шейдере «attribute» теперь «in», а «varing» теперь «out». В фрагментном шейдере «varing» теперь «in», а «gl_FragColor» определяется переменной «out». Я считаю, что gl_FragColor все еще действует, но теперь можно использовать переменную out для определения цвета.

Это учебное пособие очень хорошо и учит базовым OpenGL и GLSL 3.30, я бы порекомендовал вам использовать его, чтобы помочь вам узнать больше о GLSL. Также помните, что Справочные страницы GLSL - ваш друг.

36
ответ дан 28 November 2019 в 21:27
поделиться