Part of the Khronos Group
OpenGL.org

The Industry's Foundation for High Performance Graphics

from games to virtual reality, mobile phones to supercomputers

Results 1 to 2 of 2

Thread: Problems with Normals

  1. #1
    Junior Member Newbie
    Join Date
    Jun 2013
    Posts
    6

    Problems with Normals

    Allright, I've got a problem. From what I can gather all the xml object that I use have a "normal" parameter. This is used whenever an object is scaled, this way the lightning on the object is appropriate and not. It was done properly in this tutorial:
    http://arcsynthesis.org/gltut/Illumi...formation.html

    Here's how I render in my .cpp:
    //Back Wall_4
    {
    glutil::PushStack push(modelMatrix);
    glUseProgram(UniformColorTint.theProgram);

    modelMatrix.Scale(glm::vec3(10.0f, 1.0f, g_fParthenonBaseHeight));
    modelMatrix.Translate(glm::vec3(-1.2925f, 14.5f, -12.15f ));

    glUniformMatrix4fv(UniformColorTint.modelToWorldMa trixUnif, 1, GL_FALSE, glm::value_ptr(modelMatrix.Top()));
    glm::mat3 normMatrix(modelMatrix.Top());
    normMatrix = glm::transpose(glm::inverse(normMatrix));

    glUniformMatrix4fv(UniformColorTint.modelToWorldMa trixUnif, 1, GL_FALSE, glm::value_ptr(modelMatrix.Top()));
    glUniform4f(UniformColorTint.baseColorUnif, 0.5f, 0.9f, 0.9f, 0.9f);

    glm::mat4 invTransform = glm::inverse(modelMatrix.Top());
    glm::vec4 lightPosModelSpace = invTransform * worldLightPos;
    glUniform3fv(UniformColorTint.modelSpaceLightPosUn if, 1, glm::value_ptr(lightPosModelSpace));


    g_pCubeMesh->Render();
    glUseProgram(0);
    }
    And here's my vertex shader:
    #version 330

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

    smooth out vec4 interpColor;

    out vec3 vertexNormal;
    out vec3 modelSpacePosition;

    uniform mat4 worldToCameraMatrix;
    uniform mat4 modelToWorldMatrix;
    uniform mat3 normalModelToCameraMatrix;
    uniform vec3 dirToLight;
    uniform vec4 lightIntensity;
    uniform vec4 ambientIntensity;
    uniform vec4 baseColor;

    uniform mat4 cameraToClipMatrix;


    void main()
    {

    vertexNormal = normal;
    vec3 normCamSpace = normalize(normalModelToCameraMatrix * vertexNormal);

    //vec3 dirToLight = normalize(dirToLight);

    float cosAngIncidence = dot(normCamSpace, dirToLight);
    cosAngIncidence = clamp(cosAngIncidence, 0, 1);
    modelSpacePosition.x = position.x;
    modelSpacePosition.y = position.y;
    modelSpacePosition.z = position.z;

    vec4 temp = modelToWorldMatrix * position;
    temp = worldToCameraMatrix * temp;
    gl_Position = cameraToClipMatrix * temp;

    interpColor = ((lightIntensity * cosAngIncidence) + (ambientIntensity)) * baseColor;

    }
    My version doesn't work at all, I tried some minor edits, but nothing fixes it. The normals don't seem to exist. What's the problem?

  2. #2
    Advanced Member Frequent Contributor
    Join Date
    Apr 2010
    Posts
    752
    This is used whenever an object is scaled, this way the lightning on the object is appropriate and not.
    Maybe I'm misreading this, but normals have nothing to do with scaling. However, they are used to calculate lighting.

    My version doesn't work at all, I tried some minor edits, but nothing fixes it.
    That does not tell us much. What does not work, what have you tried without success? Please review the Forum Posting Guidelines for suggestions how to ask good questions (especially, use [code],[/code] around source snippets).

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •