diff --git a/examples/osgvolume/osgvolume.cpp b/examples/osgvolume/osgvolume.cpp index d503575fc..1eef6035f 100644 --- a/examples/osgvolume/osgvolume.cpp +++ b/examples/osgvolume/osgvolume.cpp @@ -760,7 +760,7 @@ class FollowMouseCallback : public osgGA::GUIEventHandler, public osg::StateSet: if (_updateSampleDensity && (uniform = stateset->getUniform("sampleDensity"))) { float value = powf(v,5); - osg::notify(osg::NOTICE)<<"sampleDensity = "<addUniform(sampleDensity); osg::Uniform* transpancy = new osg::Uniform("transparency",0.5f); @@ -1794,7 +1794,10 @@ int main( int argc, char **argv ) osg::ref_ptr keyswitchManipulator = new osgGA::KeySwitchMatrixManipulator; keyswitchManipulator->addMatrixManipulator( '1', "Trackball", new osgGA::TrackballManipulator() ); - keyswitchManipulator->addMatrixManipulator( '2', "Flight", new osgGA::FlightManipulator() ); + + osgGA::FlightManipulator* flightManipulator = new osgGA::FlightManipulator(); + flightManipulator->setYawControlMode(osgGA::FlightManipulator::NO_AUTOMATIC_YAW); + keyswitchManipulator->addMatrixManipulator( '2', "Flight", flightManipulator ); viewer.setCameraManipulator( keyswitchManipulator.get() ); } @@ -2082,6 +2085,7 @@ int main( int argc, char **argv ) ySize = (*sizeItr)->t(); zSize = (*sizeItr)->r(); ++sizeItr; + for(;sizeItr != images.end(); ++sizeItr) { if ((*sizeItr)->s() != xSize || @@ -2094,25 +2098,30 @@ int main( int argc, char **argv ) } -#if 0 - osg::RefMatrix* matrix = dynamic_cast(image_3d->getUserData()); +#if 1 + osg::RefMatrix* matrix = dynamic_cast(images.front()->getUserData()); if (matrix) { osg::notify(osg::NOTICE)<<"Image has Matrix = "<<*matrix<s() * (*matrix)(0,0); - ySize = image_3d->t() * (*matrix)(1,1); - zSize = image_3d->r() * (*matrix)(2,2); + xSize = xSize * (*matrix)(0,0); + ySize = ySize * (*matrix)(1,1); + zSize = zSize * (*matrix)(2,2); } -#else #endif - osg::Vec4 minValue, maxValue; bool computeMinMax = false; for(Images::iterator itr = images.begin(); itr != images.end(); ++itr) { +#if 0 + osg::RefMatrix* matrix = dynamic_cast((*itr)->getUserData()); + if (matrix) + { + std::cout<<"matrix = "<<*matrix<get(), minValue, maxValue)) computeMinMax = true; } diff --git a/examples/osgvolume/volume_frag.cpp b/examples/osgvolume/volume_frag.cpp index c8e0df2bd..ec4c98d82 100644 --- a/examples/osgvolume/volume_frag.cpp +++ b/examples/osgvolume/volume_frag.cpp @@ -59,7 +59,7 @@ char volume_frag[] = "uniform sampler3D baseTexture;\n" "\n" " const float max_iteratrions = 2048.0;\n" " float num_iterations = ceil(length(te-t0)/sampleDensity);\n" - " if (num_iterations<2) num_iterations = 2.0;\n" + " if (num_iterations<2.0) num_iterations = 2.0;\n" "\n" " if (num_iterations>max_iteratrions) \n" " {\n" @@ -79,13 +79,21 @@ char volume_frag[] = "uniform sampler3D baseTexture;\n" " fragColor.xyz = fragColor.xyz*(1.0-r)+color.xyz*r;\n" " fragColor.w += r;\n" " }\n" + "\n" + " if (fragColor.w1.0) fragColor.w = 1.0; \n" - " if (fragColor.w==0.0) discard;\n" + " if (fragColor.wmax_iteratrions) \n" " {\n" " num_iterations = max_iteratrions;\n" " }\n" "\n" - " vec3 deltaTexCoord=(te-t0)/float(num_iterations-1);\n" + " vec3 deltaTexCoord=(te-t0)/float(num_iterations-1.0);\n" " vec3 texcoord = t0;\n" "\n" " vec4 fragColor = vec4(0.0, 0.0, 0.0, 0.0); \n" " while(num_iterations>0.0)\n" " {\n" - " float v = texture3D( baseTexture, texcoord).s;\n" + " float v = texture3D( baseTexture, texcoord).a;\n" " vec4 color = texture1D( tfTexture, v);\n" + "\n" " float r = color[3]*transparency;\n" " if (r>alphaCutOff)\n" " {\n" " fragColor.xyz = fragColor.xyz*(1.0-r)+color.xyz*r;\n" " fragColor.w += r;\n" " }\n" + "\n" + " if (fragColor.w1.0) fragColor.w = 1.0; \n" - " if (fragColor.w==0.0) discard;\n" + " if (fragColor.w