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

Reply via email to