Hello everyone,
I tried texturing a cube by using shaders, but failed. I already tried all the
way I could think about, but the rendered cube is still totally black if I use
shaders. Could someone help me on this?
Here is mycode:
cpp file:
osg::ref_ptr<osg::Image> image =
osgDB::readImageFile("Images/reflect.rgb");
osg::ref_ptr<osg::Node> node = createNode(); //create the cube
osg::StateSet* squareState = node->getOrCreateStateSet();
osg::Program* squareProgramObject = new osg::Program;
osg::Shader* squareVertexObject = new osg::Shader( osg::Shader::VERTEX );
osg::Shader* squareFragmentObject = new osg::Shader(
osg::Shader::FRAGMENT );
squareProgramObject->addShader( squareFragmentObject );
squareProgramObject->addShader( squareVertexObject );
squareVertexObject->loadShaderSourceFromFile(
"shaders/cubeRender.vert");
squareFragmentObject->loadShaderSourceFromFile("shaders/cubeRender.frag");
squareState->setAttributeAndModes(squareProgramObject,
osg::StateAttribute::ON);
osg::ref_ptr<osg::Texture2D> texture = new osg::Texture2D();
texture->setImage(image.get());
texture->setFilter(osg::Texture::MIN_FILTER,osg::Texture::NEAREST_MIPMAP_NEAREST);
//choose the nearest texture unit value
texture->setFilter(osg::Texture::MAG_FILTER,osg::Texture::LINEAR);
//choose the average of the nearest 4 pixel values as texture
osg::Uniform* myTextureU = new osg::Uniform("myTexture",texture.get());
squareState->addUniform(myTextureU);
viewer->setSceneData(node.get());
vertex shader:
void main()
{
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
gl_TexCoord[0] = gl_MultiTexCoord0;
}
fragment shader:
uniform sampler2D myTexture;
void main()
{
vec4 color = texture2D(myTexture, gl_TexCoord[0].st);
gl_FragColor = color;
}
Thanks a lot!
Cheers,
ying[/b]
------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=60540#60540
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org