Подтвердить что ты не робот

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

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

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

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

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

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

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

#version 110

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

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

#version 110

void main()
{
    gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
4b9b3361

Ответ 1

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

Vertex shader:

#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.

В вершинном шейдере "атрибут" теперь "находится" и "переменный" теперь "вышел". В шейдере фрагмента "переменная" теперь "находится" и "gl_FragColor" определяется переменной "out". Я считаю, что gl_FragColor все еще действует, но теперь можно использовать переменную out для определения цвета.

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