[162] | 1 | #include "myTerrainTechnique.h" |
---|
| 2 | #include <osgTerrain/TerrainTile> |
---|
| 3 | |
---|
[163] | 4 | using namespace osgTerrain; |
---|
| 5 | |
---|
[168] | 6 | myTerrainTechnique::myTerrainTechnique(void) : osgTerrain::GeometryTechnique() |
---|
[162] | 7 | { |
---|
[170] | 8 | //OSG_ALWAYS<<className()<<"Constructed by Constructor"<<std::endl; |
---|
[168] | 9 | |
---|
[162] | 10 | } |
---|
| 11 | |
---|
[165] | 12 | myTerrainTechnique::myTerrainTechnique(const GeometryTechnique& TerrainTechnique,const osg::CopyOp& copyop): |
---|
| 13 | osgTerrain::GeometryTechnique(TerrainTechnique,copyop) |
---|
[163] | 14 | { |
---|
[165] | 15 | //OSG_ALWAYS<<className()<<"Constructed by Copy-Constructor"<<std::endl; |
---|
[163] | 16 | } |
---|
| 17 | |
---|
[162] | 18 | myTerrainTechnique::~myTerrainTechnique(void) |
---|
| 19 | { |
---|
| 20 | } |
---|
| 21 | |
---|
[169] | 22 | void myTerrainTechnique::init(int dirtyMask, bool assumeMultiThreaded) |
---|
[162] | 23 | { |
---|
[169] | 24 | /* The heightfield es extracted from the tile in the techniques init function. technique->init() calls technique->generateGeometry() which creates the drawable according to the heightfield. |
---|
| 25 | To modify the height, the heightfield must be modified prior to the original techniques init() function. |
---|
| 26 | |
---|
| 27 | To modiy the drawable shape (e.g. Cutting wholes in the area), the function technique->generateGeometry() must be modified. |
---|
| 28 | */ |
---|
| 29 | |
---|
[168] | 30 | HeightFieldLayer* hfl = dynamic_cast<HeightFieldLayer*>( getTerrainTile()->getElevationLayer() ); |
---|
| 31 | osg::HeightField* h = hfl->getHeightField(); |
---|
| 32 | h->setHeight( 0,0, 1000); |
---|
[162] | 33 | |
---|
[171] | 34 | ImageLayer* il = dynamic_cast<ImageLayer*>( getTerrainTile()->getColorLayer(0) ); |
---|
| 35 | osg::Image* img = il->getImage(); |
---|
[172] | 36 | //img->setInternalTextureFormat( GL_RGBA ); |
---|
[171] | 37 | |
---|
[255] | 38 | /* if( img->getPixelFormat() == GL_RGBA ) |
---|
[172] | 39 | OSG_ALWAYS << "Format ist RGBA" << std::endl; |
---|
| 40 | if( img->getPixelFormat() == GL_RGB ) |
---|
| 41 | OSG_ALWAYS << "Format ist RGB" << std::endl; |
---|
| 42 | if( img->getPixelFormat() == GL_COMPRESSED_RGB_S3TC_DXT1_EXT ) |
---|
[255] | 43 | OSG_ALWAYS << "Format ist GL_COMPRESSED_RGB_S3TC_DXT1_EXT" << std::endl;*/ |
---|
[171] | 44 | |
---|
[172] | 45 | |
---|
| 46 | |
---|
| 47 | //osg::ref_ptr<osg::Image> img2 = new osg::Image(); |
---|
| 48 | //img2->setInternalTextureFormat( GL_RGBA ); |
---|
| 49 | //OSG_ALWAYS << "test: " << std::hex << img->getPixelFormat() << std::endl; |
---|
| 50 | |
---|
[169] | 51 | GeometryTechnique::init(dirtyMask, assumeMultiThreaded); |
---|
[175] | 52 | |
---|
[250] | 53 | //getTerrainTile()->getLocator()-> |
---|
[175] | 54 | |
---|
[250] | 55 | OpenThreads::Thread::microSleep( 50000 ); |
---|
[172] | 56 | } |
---|
| 57 | |
---|
| 58 | void myTerrainTechnique::ConvertImage(osg::ref_ptr<osg::Image> a_toImage, osg::ref_ptr<osg::Image> a_fromImage, GLenum a_pixelFormat, GLenum a_dataType) |
---|
| 59 | { |
---|
| 60 | GLenum dataType = a_fromImage -> getDataType(); |
---|
| 61 | |
---|
| 62 | //setInternalTextureFormat( 0); // tmp |
---|
| 63 | a_toImage -> allocateImage( |
---|
| 64 | a_fromImage -> s(), |
---|
| 65 | a_fromImage -> t(), |
---|
| 66 | a_fromImage -> r(), |
---|
| 67 | a_pixelFormat, a_dataType, a_fromImage -> getPacking()); |
---|
| 68 | |
---|
| 69 | //// Wenn Quelle und Ziel RGBA sind |
---|
| 70 | //if( a_toImage -> getPixelFormat() == GL_RGBA && a_fromImage -> getPixelFormat() == GL_RGBA) |
---|
| 71 | //{ |
---|
| 72 | // unsigned nr = a_fromImage->t(); |
---|
| 73 | // unsigned nc = a_fromImage->s(); |
---|
| 74 | // for (unsigned r = 0; r < nr; ++r) |
---|
| 75 | // { |
---|
| 76 | // for (unsigned c = 0; c < nc; ++c) |
---|
| 77 | // { |
---|
| 78 | // unsigned char * fromPixelData = a_fromImage -> data(c, nr-r-1); |
---|
| 79 | // unsigned char * toPixelData = a_toImage -> data(c, nr-r-1); |
---|
| 80 | |
---|
| 81 | // // Copy r, g, b, a. |
---|
| 82 | // for( int component = 0; component < 4; ++ component) |
---|
| 83 | // { |
---|
| 84 | // My_OSG_Library::OSG_PixelComponent pixelComponent( a_fromImage -> getDataType(), fromPixelData, component /* r, g, b, a */); |
---|
| 85 | // pixelComponent.Store( a_toImage -> getDataType(), toPixelData, component); |
---|
| 86 | // } |
---|
| 87 | // } |
---|
| 88 | // } |
---|
| 89 | //} |
---|
| 90 | //else |
---|
| 91 | // Wenn Quelle RGB ist und Ziel RGBA |
---|
| 92 | //if( a_toImage -> getPixelFormat() == GL_RGBA && a_fromImage -> getPixelFormat() == GL_RGB) |
---|
| 93 | //{ |
---|
| 94 | // unsigned nr = a_fromImage -> t(); |
---|
| 95 | // unsigned nc = a_fromImage -> s(); |
---|
| 96 | // for (unsigned r = 0; r < nr; ++r) |
---|
| 97 | // { |
---|
| 98 | // for (unsigned c = 0; c < nc; ++c) |
---|
| 99 | // { |
---|
| 100 | // unsigned char * fromPixelData = a_fromImage -> data(c, nr-r-1); |
---|
| 101 | // unsigned char * toPixelData = a_toImage -> data(c, nr-r-1); |
---|
| 102 | |
---|
| 103 | // // Copy r, g, b. |
---|
| 104 | // for( int component = 0; component < 3; ++ component) |
---|
| 105 | // { |
---|
| 106 | // My_OSG_Library::OSG_PixelComponent pixelComponent( a_fromImage -> getDataType(), fromPixelData, component /* r, g, b */); |
---|
| 107 | // pixelComponent.Store( a_toImage -> getDataType(), toPixelData, component); |
---|
| 108 | // } |
---|
| 109 | |
---|
| 110 | // // Initialize alpha to opaque. |
---|
| 111 | // My_OSG_Library::OSG_PixelComponent::One().Store( a_toImage -> getDataType(), toPixelData, 3); |
---|
| 112 | // } |
---|
| 113 | // } |
---|
| 114 | //} |
---|
[166] | 115 | } |
---|