[osg-users] [OSG 3.6.3 Core Profile GL 3+] Weird clipping behaviour in Fragment Shader

Dan johansson johansson_dan at hotmail.com
Thu Sep 12 06:17:45 PDT 2019


New user here, doing a fairly simple program test so far with core profile settings. 

I'm rendering the program through Qt's QOpenGLWidget, even though i don't think this is causing any particular issues.

I'm setting up my Cube model and personal shaders like this 


    modelPAT_ = new osg::PositionAttitudeTransform;
    modelGeode_ = CubeCreator::buildCube();

    osg::StateSet* stateset = modelGeode_->getOrCreateStateSet();
    osg::ref_ptr<osg::Program> shaderProgram = new osg::Program;
    osg::Shader* vShader = osgDB::readShaderFile(osg::Shader::VERTEX, "../VertexShader.glsl");
    osg::Shader* fShader = osgDB::readShaderFile(osg::Shader::FRAGMENT, "../FragmentShader.glsl");

    if (!vShader && !fShader)
        osg::notify(osg::NOTICE) << "Effect Not Supported !" << std::endl;

    //wireframe mode

    stateset->setAttributeAndModes(shaderProgram, osg::StateAttribute::OVERRIDE|osg::StateAttribute::ON);
    stateset->setMode(GL_CLIP_PLANE0, osg::StateAttribute::ON);
    stateset->setMode(GL_BLEND, osg::StateAttribute::ON);

    auto lightColor = osg::Vec3f(0.5f, 0.2f, 0.35f);
    auto lightSourcePosition = osg::Vec3f(1.2f, 1.0f, 2.0f);
    // add uniforms

    osg::ref_ptr<osg::Uniform> uniformLightColor = new osg::Uniform(osg::Uniform::FLOAT_VEC3, "UlightColor");
    osg::ref_ptr<osg::Uniform> uniformLightSourcePosition = new osg::Uniform(osg::Uniform::FLOAT_VEC3, "UlightPosition");

    uniformLightColor->setElement(0, lightColor);
    uniformLightSourcePosition->setElement(0, lightSourcePosition);

    //adds normal vectors to the model
    modelGeode_->accept(geodeNormals); //Node Visitor
    modelGeode_->addChild(geodeNormals.toNormalsGeomtery(osg::Vec4(1.0f, 0.0f, 0.0f, 1.0f)));


where i activate the first clip plane GL_CLIP_PLANE0 for the shader. The uniforms are parsed for future implementation of lightning effects.

For experiment, i wanted to pass the vertex position for the fragment shader but for some reason the model is clipped at x = 0. This can be removed by not enable CLIP_PLANE0 but i don't understand why this effect occurs as i havent specified the clip plane and do no calculation for gl_ClipDistance[0]. 

Following is my vertex and fragment shader


#version 330 core

out vec4 ourPosition;
out vec3 ourNormal;

//lightsource uniforms
uniform vec3 UlightColor;
uniform vec3 UlightPosition;

out vec3 lightResult;

void main (void)
    ourNormal   = gl_NormalMatrix * gl_Normal;
    ourPosition = gl_ModelViewMatrix *  gl_Vertex;
    gl_Position = gl_ProjectionMatrix  * ourPosition;


#version 330 core

//object color
vec3 objectColor = vec3(1.0f, 0.5f, 0.31f);
in vec4 ourPosition;

void main(void)
    gl_FragColor = vec4(ourPosition.xyz, 1.0f);

Any leads to why this is happening and what i can do to solve it would be appreciated. Thanks for reading, i will supply more details if necessary. 

Best regards Dan

Read this topic online here:

More information about the osg-users mailing list