OpenGL Diffuse Shader, объект не отображается

У меня есть объект из Blender, визуализированный в моей сцене, и нормали загружены правильно. Я использую затенение Gourrad Diffuse, передающее ModelViewProjectionMatrix (CameraToClip * ModelToCamera) шейдеру и версию ModelToCameraMatrix 3×3 для умножения на нормали.

Однако, когда я устанавливаю цвет вывода на DiffuseColor * Angle, весь мой объект (в моем случае куб) просто исчезает (даже черные линии, на сером фоне ничего не появляется). Когда я заменяю coloroutput на

theColor = Vec4(1.0f, 1.0f, 1.0f, 1.0f);

он отображает мой объект в белом цвете без какой-либо штриховки. Мне довольно любопытно, почему я ничего не вижу? Что-то не так с моим шейдером или с тем, как я передаю форму?

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

#version 330

layout(location = 0) in vec4 position;
layout(location = 1) in vec3 normal;

smooth out vec4 theColor;

uniform mat4 modelViewProjectionMatrix;

uniform vec3 lightDir;
uniform mat3 normalModelToCameraMatrix;

void main()
{
gl_Position = modelViewProjectionMatrix * position;

vec3 normCamSpace = normalize(normalModelToCameraMatrix * normal);

vec4 diffuseColor = vec4(0.6f, 0.7f, 0.8f, 1.0f);

float angle = dot(normCamSpace, lightDir);
angle = clamp(angle, 0, 1);

theColor = diffuseColor  * angle;
}

Метод визуализации:

stack.Translate(glm::vec3(0.0f, 0.0f, 3.0f));

glm::vec4 lightDirCameraSpace = stack.Top() * glm::vec4(1.5f, 1.0f, 0.0f, 0.0f);
glUniform3fv(lightDirUnif, 1, glm::value_ptr(lightDirCameraSpace));
glm::mat3 normalMatrix(stack.Top());
glUniformMatrix3fv(normalModelToCameraMatrixUnif, 1, GL_FALSE, glm::value_ptr(normalMatrix));// Draw Blender object
glBindVertexArray(this->load.vertexArrayOBject);

glm::mat4 modelViewProjectionMatrix = cameraToClipMatrix * stack.Top();
glUniformMatrix4fv(modelViewProjectionMatrixUnif, 1, GL_FALSE, glm::value_ptr(modelViewProjectionMatrix));glDrawElements(GL_TRIANGLES, this->load.indicesVec.size(), GL_UNSIGNED_INT, 0);

Я не вижу, что не так с шейдером и частью рендеринга.


Обновить
При использовании glGetError кажется, что я постоянно получаю код ошибки 1285, который, кажется, связан с проблемами «Недостаточно памяти». Тем не менее, я не использую какие-либо текстуры, поэтому я не совсем понимаю, почему это происходит?

0

Решение

Я думаю, что вы:

  1. включение смешивания и / или альфа-теста
  2. умножение вашего angle на альфа-канал
  3. получить значение, которое на самом деле не является тем, что вы хотите для угла, заканчивая 0 для всех важных случаев углов

Таким образом, альфа = 0, многоугольник полностью прозрачен / проверен альфа.

Что вы должны сделать в первую очередь, это убедиться, что альфа всегда 1.f, и только модулировать rgb. Вы также можете отключить смешивание / альфа-тест.

Затем исправьте математику, которая фактически вычисляет переменную угла, как вы хотите.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]