Hi Brett,

problem seems to be that lighting was on in your RTT camera. See attached. I added

geode->getOrCreateStateSet()->setMode( GL_LIGHTING, osg::StateAttribute::OFF);

Also be aware of the way OSG blends your RTT texture with your final geometry. OSG defaults to GL_MODULATE. Search

http://news.gmane.org/gmane.comp.graphics.openscenegraph.user

for

"GL_MODULATE" or "GL_DECAL" and you'll find some things. Also look at

http://www.opengl.org/resources/faq/technical/texture.htm

rgds
jp

Brett Thomas Lee wrote:
Hi,

I have attached my expected and current output.Just remove the quotes for

        osg::ref_ptr<osg::Vec4Array> c = new osg::Vec4Array;
        geom->setColorBinding( osg::Geometry::BIND_PER_VERTEX );
        c->push_back( osg::Vec4( 1.f, 0.f, 0.f, 1.f ) );
        c->push_back( osg::Vec4( 0.f, 1.f, 0.f, 1.f ) );
        c->push_back( osg::Vec4( 0.f, 0.f, 1.f, 1.f ) );
        c->push_back( osg::Vec4( 1.f, 1.f, 1.f, 1.f ) );

and check once.Thanks again.

--
This message is subject to the CSIR's copyright terms and conditions, e-mail legal notice, and implemented Open Document Format (ODF) standard. The full disclaimer details can be found at http://www.csir.co.za/disclaimer.html.

This message has been scanned for viruses and dangerous content by MailScanner, and is believed to be clean. MailScanner thanks Transtec Computers for their support.

#include<iostream>
#include<osg/Camera>
#include<osg/Geode>
#include<osg/Geometry>
#include<osg/Image>
#include<osg/MatrixTransform>
#include<osg/Material>
#include <osgDB/ReadFile>
#include <osg/ShapeDrawable>
#include<osg/StateSet>
#include<osg/StateAttribute>
#include<osg/ShadeModel>
#include<osg/Texture2D>
#include <osgGA/TrackballManipulator>
#include <osgViewer/Viewer>

#include <osgDB/Registry>
#include <osgDB/WriteFile>
#include <osg/Notify>

using namespace std;
using namespace osg;

#define ImageWidth 64
#define ImageHeight 64
GLubyte checkImage[64*64][4];

osg::ref_ptr<osg::Image> image;
osg::Texture2D *rendTexture;
osg::ref_ptr<osg::Camera> mPreRenderCamera;
void makeCheckImage(void);
osg::ref_ptr<osg::Node> createSceneGraph(void);
void createTexture(const unsigned int,const unsigned int);
void textureCamera();	



int main()
{

	osgViewer::Viewer viewer;
//	renderTexture();
	//osg::ref_ptr<osg::Node> scene=createSceneGraph();
	//createTexture(ImageWidth,ImageHeight);
	textureCamera();
	osg::ref_ptr<osg::Group> root=new osg::Group;
	osg::ref_ptr<osg::MatrixTransform> mTransform=new osg::MatrixTransform ;
	osg::ref_ptr<osg::Geode> geode=new osg::Geode;
	osg::ref_ptr<osg::Geometry> geom=new osg::Geometry;


	osg::ref_ptr<osg::Vec3Array> ary=new osg::Vec3Array;
	ary->push_back(osg::Vec3(-100.0,0.0,-100.0));
	ary->push_back(osg::Vec3(100.0,0.0,-100.0));
	ary->push_back(osg::Vec3(100.0,0.0,100.0));
	ary->push_back(osg::Vec3(-100.0,0.0,100.0));
	geom->setVertexArray(ary.get());

	osg::ref_ptr<osg::Vec4Array> col=new osg::Vec4Array;
	geom->setColorBinding(osg::Geometry::BIND_PER_VERTEX);
	col->push_back(osg::Vec4(1.0,1.0,1.0,1.0));
	col->push_back(osg::Vec4(1.0,1.0,1.0,1.0));
	col->push_back(osg::Vec4(1.0,1.0,1.0,1.0));
	col->push_back(osg::Vec4(1.0,1.0,1.0,1.0));
	geom->setColorArray(col.get());

	osg::ref_ptr<osg::Vec3Array> n=new osg::Vec3Array;
	geom->setColorBinding(osg::Geometry::BIND_OVERALL);
	n->push_back(osg::Vec3(0.0,-1.0,0.0));
	geom->setNormalArray(n.get());

    osg::ref_ptr<osg::StateSet> ss1=geode->getOrCreateStateSet();

	osg::ref_ptr<osg::Vec2Array> tex1=new osg::Vec2Array;
	tex1->push_back(osg::Vec2(0.0,0.0));
	tex1->push_back(osg::Vec2(1.0,0.0));
	tex1->push_back(osg::Vec2(1.0,1.0));
	tex1->push_back(osg::Vec2(0.0,1.0));
	geom->setTexCoordArray(0,tex1.get());

    
		/*int c;
		for (int i = 0; i < ImageHeight; i++) 
		for (int j = 0; j < ImageWidth; j++) 
		{	
			c = (((i&0x8)==0)^((j&0x8)==0))*255;
			checkImage[i][j][0] = (GLubyte) c;
			checkImage[i][j][1] = (GLubyte) c;
			checkImage[i][j][2] = (GLubyte) c;
			checkImage[i][j][3] = (GLubyte) 255;
			}
	


	//osg::ref_ptr<osg::Image> image=new osg::Image;
	//image->setImage(64,64,1,4,GL_RGBA,GL_UNSIGNED_BYTE,(unsigned char*)checkImage,osg::Image::USE_NEW_DELETE);
    
*/
	//osg::ref_ptr<osg::Image> image = osgDB::readImageFile( "texture.jpg" );
// Attach the image in a Texture2D object
	//osg::ref_ptr<osg::Texture2D> tex = new osg::Texture2D;
	//tex->setImage( image.get() );
	
	ss1->setTextureAttributeAndModes( 0,rendTexture,osg::StateAttribute::ON);
	cout<<"Texture width"<<rendTexture->getTextureWidth()<<endl;
    cout<<"Texture Height"<<rendTexture->getTextureHeight()<<endl;
    
    /*
    osg::DrawElementsUInt* t1 = 
      new osg::DrawElementsUInt(osg::PrimitiveSet::TRIANGLES, 0);
    t1->push_back(0);
    t1->push_back(1);
    t1->push_back(2);
    geom->addPrimitiveSet(t1);

    osg::DrawElementsUInt* t2 = 
      new osg::DrawElementsUInt(osg::PrimitiveSet::TRIANGLES, 0);
    t2->push_back(2);
    t2->push_back(3);
    t2->push_back(1);
    geom->addPrimitiveSet(t2);
	geode->addDrawable(geom.get());
    */
    geom->addPrimitiveSet(new osg::DrawArrays( osg::PrimitiveSet::QUADS, 0, 4 ));
	geode->addDrawable(geom.get());

    ss1->setMode( GL_BLEND, osg::StateAttribute::ON);
    ss1->setMode( GL_LIGHTING, osg::StateAttribute::OFF);
    ss1->setMode( GL_LIGHT1, osg::StateAttribute::OFF);
    ss1->setMode( GL_NORMALIZE, osg::StateAttribute::ON );
    osg::ref_ptr<osg::Light> light1 = new osg::Light;
    light1->setAmbient( osg::Vec4(0.8,0.8,0.0,1.0));
    light1->setDiffuse( osg::Vec4( 1.0,1.0,0.0,1.0 ));
    light1->setSpecular( osg::Vec4(1.0,1.0,0.0,1.0 ));
    light1->setPosition( osg::Vec4( 0.0,120.0,0.0,1.0));
    light1->setDirection( osg::Vec3( 0.f, -1.f, 0.f ));
			//light->setSpotCutoff(25.f );

    osg::ref_ptr<osg::Material> ma1= new osg::Material;
    ma1->setAmbient(osg::Material::FRONT,osg::Vec4(1.0,1.0,0.0,1.0 ));
    ma1->setDiffuse( osg::Material::FRONT,osg::Vec4(0.8000001,0.8000001,0.0,1.0 ) );
    ma1->setSpecular( osg::Material::FRONT,osg::Vec4( 0.854902,0.6470588,0.0,1.0 ) );
    ma1->setShininess( osg::Material::FRONT, 96.f );
    ss1->setAttribute( ma1.get() );

	osg::ref_ptr<osg::LightSource> ls = new osg::LightSource;
    mTransform->addChild( ls.get() );
    ls->setLight( light1.get() );
    
	mTransform->addChild(geode.get());
	root->addChild(mTransform.get());

    root->addChild(mPreRenderCamera.get());

	if (!root.valid())
 osg::notify(osg::FATAL) <<"Failed in createSceneGraph()." << endl;
 bool result = osgDB::writeNodeFile(*(root.get()), "Simple.osg" );
if ( !result )
osg::notify(osg::FATAL) <<
"Failed in osgDB::writeNodeFile()." << endl;


	viewer.setSceneData( root.get());
   
   // viewer.getCamera()->setProjectionMatrixAsOrtho(0,ImageWidth,0,ImageHeight,0,ImageHeight);
    viewer.setCameraManipulator(new osgGA::TrackballManipulator());
    viewer.realize();

    while( !viewer.done() )
    {
      viewer.frame();
    } 
//    tex->setUnRefImageDataAfterApply( true );
    return 0;



}
void textureCamera()
{	

	
	createTexture(ImageWidth,ImageHeight);
	osg::ref_ptr<osg::Node> scene=createSceneGraph();

	mPreRenderCamera=new osg::Camera();
	mPreRenderCamera->setRenderTargetImplementation(osg::Camera::FRAME_BUFFER_OBJECT);
	mPreRenderCamera->setClearColor(osg::Vec4f(1.0,0.0,0.0,1.0));
	mPreRenderCamera->setClearMask(GL_DEPTH_BUFFER_BIT|GL_COLOR_BUFFER_BIT);
	//mPreRenderCamera->setComputeNearFarMode(osg::Camera::DO_NOT_COMPUTE_NEAR_FAR);
    mPreRenderCamera->setProjectionMatrixAsOrtho2D(0,ImageWidth,0,ImageHeight);
	mPreRenderCamera->setReferenceFrame(osg::Transform::ABSOLUTE_RF);
    //mPreRenderCamera->setProjectionMatrixAsOrtho(0,ImageWidth,0,ImageHeight,0,ImageHeight);
	mPreRenderCamera->setViewport(0.0,0.0,ImageWidth,ImageHeight);
    //mPreRenderCamera->setProjectionMatrixAsPerspective(30.0, 40.0/30.0, 50.0, 2000.0);
	mPreRenderCamera->setRenderOrder(osg::Camera::PRE_RENDER);

	
	mPreRenderCamera->addChild(scene.get());
    mPreRenderCamera->attach(osg::Camera::COLOR_BUFFER,rendTexture);
	

}

void createTexture(const unsigned int imageWidth,const unsigned int imageHeight)

{
	rendTexture = new osg::Texture2D();
	rendTexture->setTextureSize(imageWidth, imageHeight);
	//rendTexture->setInternalFormat(GL_RGBA);
	rendTexture->setFilter(osg::Texture2D::MIN_FILTER, osg::Texture2D::LINEAR);
	rendTexture->setFilter(osg::Texture2D::MAG_FILTER, osg::Texture2D::LINEAR);
    rendTexture->setSourceFormat(GL_RGBA);
	rendTexture->setInternalFormat(GL_RGBA);
	rendTexture->setSourceType(GL_UNSIGNED_BYTE);

}



osg::ref_ptr<osg::Node> createSceneGraph()
{
	// Create an object to store geometry in.
	osg::ref_ptr<osg::Geometry> geom = new osg::Geometry;
	// Create an array of four vertices.
	osg::ref_ptr<osg::Vec3Array> v = new osg::Vec3Array;

    /*
	v->push_back( osg::Vec3( 0.f,0.f ,0.f) );
	v->push_back( osg::Vec3( ImageWidth,0.0,0.0) );
	v->push_back( osg::Vec3( ImageWidth,0.f,ImageHeight) );
	v->push_back( osg::Vec3( 0.f,0.f,ImageHeight  ) );

    */
	v->push_back( osg::Vec3( 0.f,0.f ,0.f) );
	v->push_back( osg::Vec3( ImageWidth,0.0,0.0) );
	v->push_back( osg::Vec3( ImageWidth,ImageHeight,0) );
	v->push_back( osg::Vec3( 0.f,ImageHeight,0  ) );

	geom->setVertexArray( v.get() );

	// Create an array of four colors.
	osg::ref_ptr<osg::Vec4Array> c = new osg::Vec4Array;
	geom->setColorBinding( osg::Geometry::BIND_PER_VERTEX );
	c->push_back( osg::Vec4( 1.f, 0.f, 0.f, 1.f ) );
	c->push_back( osg::Vec4( 0.f, 1.f, 0.f, 1.f ) );
	c->push_back( osg::Vec4( 0.f, 0.f, 1.f, 1.f ) );
	c->push_back( osg::Vec4( 1.f, 1.f, 1.f, 1.f ) );

	//geom->setColorBinding( osg::Geometry::BIND_OVERALL);
    //c->push_back( osg::Vec4( 1.f, 0.f, 0.f, 1.f ) );

	geom->setColorArray( c.get() );

	// Create an array for the single normal.
	osg::ref_ptr<osg::Vec3Array> n = new osg::Vec3Array;
	n->push_back( osg::Vec3( 0.f, 0.f, 1.f ) );
	geom->setNormalArray( n.get() );
	geom->setNormalBinding( osg::Geometry::BIND_OVERALL );
	// Draw a four-vertex quad from the stored data.
	geom->addPrimitiveSet(new osg::DrawArrays( osg::PrimitiveSet::QUADS, 0, 4 ) );

	// Add the Geometry (Drawable) to a Geode and
	// return the Geode.
	osg::ref_ptr<osg::Geode> geode = new osg::Geode;
	geode->addDrawable( geom.get() );

    geode->getOrCreateStateSet()->setMode( GL_LIGHTING, osg::StateAttribute::OFF);
	return geode.get();
}
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to