Hi,

I can you give you some pointers tomorrow. Basically it boils down to the use of shaders and mixing the textures there. Also generating texture coordinates should be done in the vertex shader.

Cheers
Sebastian
Hello dear osg masters,

I am not very expirienced yet with osg and trying to do a simple example of 
projection a texture on another texture, but somehow it is not working, seems 
that some settings are wrong. Could you please have a look at the code:
        osg::Geode* geode = new osg::Geode;

        // set up the texture of the base.
        osg::StateSet* stateset = new osg::StateSet();
        osg::Image* image = osgDB::readImageFile("Images/lz.rgb");
        if (image)
        {
                osg::Texture2D* texture = new osg::Texture2D;
                texture->setImage(image);
                stateset->setTextureAttributeAndModes(0, texture, 
osg::StateAttribute::ON);
        }

        geode->setStateSet(stateset);


        osg::HeightField* grid = new osg::HeightField;
         ...
        geode->addDrawable(new osg::ShapeDrawable(grid));
osg::TexEnv *texenv = new osg::TexEnv;
        texenv->setMode(osg::TexEnv::DECAL);

        int tex_width = 1024;
        int tex_height = 1024;

         //Geometry which has to be projected
        osg::Geode* geode2 = new osg::Geode;
        osg::ref_ptr<osg::Vec3Array> vertices = new osg::Vec3Array;
        vertices->push_back(center);
        vertices->push_back(osg::Vec3(center.x(), center.y() + 10, center.z()));
        vertices->push_back(osg::Vec3(center.x() + 10, center.y() + 10, 
center.z()));
        vertices->push_back(osg::Vec3(center.x() + 10, center.y(), center.z()));
        osg::ref_ptr<osg::Vec3Array> normals = new osg::Vec3Array;
        normals->push_back(osg::Vec3(0.0f, 0.0f, 1.0f));

        osg::ref_ptr<osg::Vec4Array> colors = new osg::Vec4Array;
        colors->push_back(osg::Vec4(1.0f, 0.0f, 0.0f, 1.0f));//red
osg::ref_ptr<osg::Geometry> quad = new osg::Geometry;
        quad->setVertexArray(vertices.get());
        quad->setNormalArray(normals.get());
        quad->setNormalBinding(osg::Geometry::BIND_OVERALL);
        quad->setColorArray(colors.get());
        quad->setColorBinding(osg::Geometry::BIND_OVERALL);
        quad->addPrimitiveSet(new osg::DrawArrays(GL_QUADS, 0, 4));
        geode2->addDrawable(quad.get());


        osg::Texture2D* texture2 = new osg::Texture2D;
        texture2->setTextureSize(tex_width, tex_height);
        texture2->setInternalFormat(GL_RGBA);
        texture2->setFilter(osg::Texture2D::MIN_FILTER, osg::Texture2D::LINEAR);
        texture2->setFilter(osg::Texture2D::MAG_FILTER, osg::Texture2D::LINEAR);

        stateset->setTextureAttributeAndModes(1, texture2, 
osg::StateAttribute::ON);
        stateset->setTextureAttribute(0, texenv);
        stateset->setTextureAttribute(1, texenv);



        osg::Camera* camera = new osg::Camera;

        float znear = 10;
        float zfar = 30;
        float proj_top = 0.25f*znear;
        float proj_right = 0.5f*znear;
        camera->setProjectionMatrixAsFrustum(-proj_right, proj_right, 
-proj_top, proj_top, znear, zfar);

        camera->setViewMatrixAsLookAt(osg::Vec3(0.0f, 0.0f, 0.0f) - 
osg::Vec3(0.0f, 2.0f, 0.0f) * 10, osg::Vec3(0.0f, 0.0f, 0.0f), osg::Vec3(0.0f, 
0.0f, 1.0f));
        camera->setViewport(0, 0, tex_width, tex_height);
        //camera->setClearColor(osg::Vec4(1.0f, 1.0f, 1.0f, 0.0f));
        camera->setClearMask(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        camera->setRenderOrder(osg::Camera::PRE_RENDER);

        camera->setRenderTargetImplementation(osg::Camera::FRAME_BUFFER_OBJECT);
        camera->attach(osg::Camera::COLOR_BUFFER, texture2);
        camera->setReferenceFrame(osg::Camera::ABSOLUTE_RF);
        camera->addChild(geode2);

        osg::Group* group = new osg::Group;
        group->addChild(geode);
        group->addChild(camera);




Thank you!

Cheers,
Ekaterina

------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=70116#70116





_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to