#include "stdafx.h" #include #include #include #include #include #include #include #include #include #include #include osg::ref_ptr createPlane( float length, float width ) { osg::ref_ptr vec = new osg::Vec3Array; vec->resize( 4 ); (*vec)[0] = osg::Vec3f( -2, 0, -2 ); (*vec)[1] = osg::Vec3f( -2, 0, 2 ); (*vec)[2] = osg::Vec3f( 2, 0, 2 ); (*vec)[3] = osg::Vec3f( 2, 0, -2 ); osg::ref_ptr nor = new osg::Vec3Array; nor->push_back( osg::Vec3f( 0.0, -1.0, 0.0 ) ); osg::ref_ptr tex = new osg::Vec2Array; tex->push_back( osg::Vec2f(0.0, 0.0) ); tex->push_back( osg::Vec2f(0.0, 1.0) ); tex->push_back( osg::Vec2f(1.0, 1.0) ); tex->push_back( osg::Vec2f(1.0, 0.0) ); osg::ref_ptr geo = new osg::Geometry; geo->setVertexArray( vec.get() ); geo->setTexCoordArray( 0, tex.get() ); geo->setNormalArray( nor.get() ); geo->setNormalBinding( osg::Geometry::BIND_PER_PRIMITIVE_SET ); geo->addPrimitiveSet( new osg::DrawArrays( osg::PrimitiveSet::QUADS, 0, 4 ) ); return geo; } int main(int, char **) { osgViewer::Viewer viewer; osg::ref_ptr mygeode = new osg::Geode; osg::StateSet* mystate0 = mygeode->getOrCreateStateSet(); osg::ref_ptr img = osgDB::readImageFile("osg32.rgb"); osg::ref_ptr img1 = osgDB::readImageFile("osg16.rgb"); osg::ref_ptr image = new osg::Image; osg::Image::MipmapDataType mipmapData; mipmapData.push_back(img->getTotalSizeInBytes()); //mipmapData.push_back(img->getTotalSizeInBytes()+img1->getTotalSizeInBytes()); unsigned char* ptr = new unsigned char[img->getTotalSizeInBytes()+img1->getTotalSizeInBytes()]; image->setImage(img->s(), img->t(), img->r(), img->getInternalTextureFormat(), img->getPixelFormat(), img->getDataType(), ptr, osg::Image::USE_NEW_DELETE,img->getPacking()); image->setMipmapLevels(mipmapData); memcpy(ptr, img->data(), img->getTotalSizeInBytes()); memcpy(ptr+img->getTotalSizeInBytes(), img1->data(), img1->getTotalSizeInBytes()); /////////////////////////////////////////////////////////////////////////////////////////////////////////////// osg::ref_ptr mytex = new osg::Texture2D; mytex->setImage( 0, image.get() ); mytex->setUseHardwareMipMapGeneration(false); mystate0->setTextureAttributeAndModes( 0, mytex.get(), osg::StateAttribute::ON ); mygeode->addDrawable( createPlane(64, 64).get() ); viewer.setSceneData( mygeode.get() ); return viewer.run(); }