eheheh! ok that was my mistake! providing all levels it now works... i thought i already tested with all levels, but maybe i forgot the last 1x1 image... thank you! ;)
Francesco Scrive Marcus Lindblom <[EMAIL PROTECTED]>: > Just a hunch: It might be that you need _all_ mipmap levels for it to > work correctly. Have you tried that? > > /Marcus > > [EMAIL PROTECTED] wrote: > > hi to everybody! > > > > i'm trying to use a texture with a custom mipmap image, i.e. i want to > choose by > > hand a different image for each mipmap level of detail. > > > > I found out that OpenSG has a reader for DDS format, which seems to support > its > > custom mipmap contents. The problem is that, unless OpenSG apparently > > recognizes and loads the mipmap levels stored into the DDS file, they're > not > > displayed correctly (i can see only the first one). > > > > here's a little test program showing this behaviour... am i forgetting > something > > important? is it an expected behaviour? is it a bug? > > > > my DDS test image is here: > > http://tina.polito.it/~macete/test.zip > > > > thanks for your time > > > > Francesco Tamagni > > > > ps: the dds image in the zip archive contains 3 levels, 512x512 is red, > 256x256 > > is green, 128x128 is blue > > > > ---------------------------------------------------------------- > > This message was sent using IMP, the Internet Messaging Program. > > > > ------------------------------------------------------------------------ > > > > #include <string> > > #include <vector> > > #include <iostream> > > > > #include <OpenSG/OSGGLUT.h> > > #include <OpenSG/OSGGLUTWindow.h> > > #include <OpenSG/OSGGLUTWindowBase.h> > > #include <OpenSG/OSGConfig.h> > > #include <OpenSG/OSGSimpleGeometry.h> > > #include <OpenSG/OSGGLUTWindow.h> > > #include <OpenSG/OSGSimpleSceneManager.h> > > #include <OpenSG/OSGBaseFunctions.h> > > #include <OpenSG/OSGTransform.h> > > #include <OpenSG/OSGMatrixUtility.h> > > #include <OpenSG/OSGMatrixCamera.h> > > #include <OpenSG/OSGSceneFileHandler.h> > > > > #include <OpenSG/OSGGLEXT.h> > > #include <OpenSG/OSGImage.h> > > #include <OpenSG/OSGTextureChunk.h> > > #include <OpenSG/OSGTextureBackground.h> > > #include <OpenSG/OSGChunkMaterial.h> > > > > > > // Activate the OpenSG namespace > > OSG_USING_NAMESPACE > > > > // The pointer to the transformation > > TransformPtr modelTrans; > > NodePtr modelNode; > > > > // The pointer to the dynamic image and the texture > > ImagePtr image; > > TextureChunkPtr tex; > > > > // The SimpleSceneManager to manage simple applications > > SimpleSceneManager *mgr; > > > > // forward declaration so we can have the interesting stuff upfront > > int setupGLUT( int *argc, char *argv[] ); > > > > NodePtr rootScene; > > > > void display( void ) > > { > > // redraw the screen > > mgr->redraw(); > > } > > > > // Initialize GLUT & OpenSG and set up the scene > > int main(int argc, char **argv) > > { > > // OSG init > > osgInit(argc,argv); > > > > // GLUT init > > int winid = setupGLUT(&argc, argv); > > > > // the connection between GLUT and OpenSG > > GLUTWindowPtr gwin= GLUTWindow::create(); > > gwin->setId(winid); > > gwin->init(); > > > > // To check OpenGL extensions, the Window needs to have run through > > // frameInit at least once. This automatically happens when rendering, > > // but we don't don't to wait for that here. > > gwin->activate(); > > gwin->frameInit(); > > > > // Ok, now for the meat of the code... > > // first we need an Image to hold the picture(s) to show > > image = Image::create(); > > > > if ( !image->read("test.dds") ) > > { > > exit(0); > > } > > else > > { > > printf("Image loaded with success.\n"); > > printf("%d mipmap levels found.\n", image->getMipMapCount()); > > } > > > > // Now create the texture to be used for the background > > tex = TextureChunk::create(); > > > > beginEditCP(tex); > > { > > // Associate image and texture > > tex->setImage(image); > > // Set filtering modes. LINEAR is cheap and good if the image size > > // changes very little (i.e. the window is about the same size as > > // the images). > > tex->setMinFilter(GL_LINEAR_MIPMAP_LINEAR); > > tex->setMagFilter(GL_LINEAR); > > > > } > > endEditCP(tex); > > > > TransformPtr trans; > > trans = Transform::create(); > > > > rootScene = Node::create(); > > > > modelNode = makeBox(5.0f, 5.0f, 5.0f, 1, 1, 1); > > > > ChunkMaterialPtr ckMat = ChunkMaterial::create(); > > > > beginEditCP(ckMat, ChunkMaterial::ChunksFieldMask); > > ckMat->addChunk(tex); > > endEditCP(ckMat, ChunkMaterial::ChunksFieldMask); > > > > GeometryPtr geo = GeometryPtr::dcast(modelNode->getCore()); > > beginEditCP(geo, Geometry::MaterialFieldMask); > > geo->setMaterial(ckMat); > > endEditCP(geo, Geometry::MaterialFieldMask); > > > > beginEditCP(rootScene, Node::CoreFieldMask | Node::ChildrenFieldMask); > > { > > rootScene->setCore(trans); > > rootScene->addChild(modelNode); > > } > > endEditCP (rootScene, Node::CoreFieldMask | Node::ChildrenFieldMask); > > > > // create the SimpleSceneManager helper > > mgr = new SimpleSceneManager; > > > > // tell the manager what to manage > > mgr->setWindow(gwin); > > mgr->setRoot (rootScene); > > > > // GLUT main loop > > glutMainLoop(); > > > > return 0; > > } > > > > > > // > > // GLUT callback functions > > // > > > > // react to size changes > > void reshape(int w, int h) > > { > > mgr->resize(w, h); > > glutPostRedisplay(); > > } > > > > // react to mouse button presses > > void mouse(int button, int state, int x, int y) > > { > > if (state) > > mgr->mouseButtonRelease(button, x, y); > > else > > mgr->mouseButtonPress(button, x, y); > > > > glutPostRedisplay(); > > } > > > > // react to mouse motions with pressed buttons > > void motion(int x, int y) > > { > > mgr->mouseMove(x, y); > > glutPostRedisplay(); > > } > > > > > > > > // setup the GLUT library which handles the windows for us > > int setupGLUT(int *argc, char *argv[]) > > { > > glutInit(argc, argv); > > glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); > > glutInitWindowSize( 640, 480 ); > > > > int winid = glutCreateWindow("OpenSG"); > > > > glutReshapeFunc(reshape); > > glutDisplayFunc(display); > > glutMouseFunc(mouse); > > glutMotionFunc(motion); > > glutKeyboardFunc(NULL); > > > > // call the redraw function whenever there's nothing else to do > > glutIdleFunc(display); > > > > return winid; > > } > > ------------------------------------------------------------------------ > > > > ------------------------------------------------------------------------- > > This SF.net email is sponsored by DB2 Express > > Download DB2 Express C - the FREE version of DB2 express and take > > control of your XML. No limits. Just data. Click to get it now. > > http://sourceforge.net/powerbar/db2/ > > ------------------------------------------------------------------------ > > > > _______________________________________________ > > Opensg-users mailing list > > [email protected] > > https://lists.sourceforge.net/lists/listinfo/opensg-users > > > > > ------------------------------------------------------------------------- > This SF.net email is sponsored by DB2 Express > Download DB2 Express C - the FREE version of DB2 express and take > control of your XML. No limits. Just data. Click to get it now. > http://sourceforge.net/powerbar/db2/ > _______________________________________________ > Opensg-users mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/opensg-users > > ---------------------------------------------------------------- This message was sent using IMP, the Internet Messaging Program. ------------------------------------------------------------------------- This SF.net email is sponsored by DB2 Express Download DB2 Express C - the FREE version of DB2 express and take control of your XML. No limits. Just data. Click to get it now. http://sourceforge.net/powerbar/db2/ _______________________________________________ Opensg-users mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/opensg-users
