[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
Hi,
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
Code:
OSGModel::OSGModel()
{
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;
}
shaderProgram->addShader(vShader);
shaderProgram->addShader(fShader);
//wireframe mode
//activateWireframeMode(stateset);
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);
stateset->addUniform(uniformLightColor.get());
stateset->addUniform(uniformLightSourcePosition.get());
//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)));
modelPAT_->addChild(modelGeode_);
}
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
Code:
#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;
}
Code:
#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:
http://forum.openscenegraph.org/viewtopic.php?p=76676#76676
More information about the osg-users
mailing list