Я понял, что модели можно загружать разными способами. Некоторые могут не иметь текстур и просто использовать цвета вершин, в то время как другие имеют материалы с текстурами. Теперь у меня есть один шейдер, который используется для рисования 3d моделей с освещением, но как бы я go рассказал о загрузке моделей, которые должны отображаться по-разному, и правильно отображать их в сцене.
Один метод I Мысль о том, что в вершинном шейдере есть жестко определенные указатели атрибутов, и если модель не требует связывания атрибута, то это не обязательно. Я полагаю, что если атрибут не привязан и не используется в вычислениях, он не будет вносить или компенсировать какие-либо значения (особенно если вы выполняете вычисления отдельно и суммируете их в конце (например, вычисляете цвет пиксель для цвета вершины в этом фрагменте и суммируя его для цвета пикселя для текстуры)
Вы можете представить себе вершинный шейдер в следующем виде:
#version 330 core
layout (location = 0) in vec3 aPos; // Vertex positions
layout (location = 1) in vec3 aNormal; // Normals
layout (location = 2) in vec2 aTexCoords; // Optional Texture coordinates
layout (location = 3) in vec3 aColors; // Optional vertex colours
out vec3 FragPos;
out vec3 Normal;
out vec2 TexCoords;
out vec3 Colors;
uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;
void main()
{
FragPos = vec3(model * vec4(aPos, 1.0));
Normal = mat3(transpose(inverse(model))) * aNormal;
TexCoords = aTexCoords;
Colors = aColors;
gl_Position = projection * view * vec4(FragPos, 1.0);
}
Проблема, которую я вижу с этим я не уверен, как я мог бы сказать, использовать ли texCoords или цвета или оба. Возможно использование униформы в качестве флага и сохранение этих данных в объекте модели?
Другим методом было бы определение шейдеров для различных типов методов освещения, а затем определение, какой шейдер вызывается для какой модели. Это мой наименее любимый вариант, поскольку он не учитывает динамические c подходы (т. е. как вершинные цвета, так и текстуры одновременно)
Какой подход был бы использован в профессиональной среде, чтобы можно было загрузить любую модель? Вы попали в сцену с таким же напрасным освещением, как и игровые движки? (Используем прямой рендеринг прямо сейчас, поэтому не нуждаемся в каких-либо концепциях отложенного затенения, так как на данный момент это выше моего paygrade). Я не ищу конкретных c решений, больше знаний экспертов о том, как решить эту проблему.
Также я использую OpenGL 3.3