SbBool generateTextureMap (SoNode *root, SoTexture2 *texture, short textureWidth, short textureHeight) { SbViewportRegion myViewport(textureWidth, textureHeight); SoOffscreenRenderer::Components comp = SoOffscreenRenderer::RGB; // Render the scene SoOffscreenRenderer *myRenderer = new SoOffscreenRenderer(myViewport); myRenderer->setComponents(comp); myRenderer->setBackgroundColor(SbColor(0.8, 0.8, 0.0)); if (!myRenderer->render(root)) { delete myRenderer; return FALSE; } // Generate the texture texture->image.setValue(SbVec2s(textureWidth, textureHeight), comp, myRenderer->getBuffer()); delete myRenderer; return TRUE; }
void display( void ) { /* * Set clear color to gray */ myClearColor ( 0.8, 0.8, 0.8, 0.0 ); /* * Clear screen window */ myClear( GL_COLOR_BUFFER_BIT ); myLoadIdentity(); myPushMatrix(); /* * plain old polygon test */ if ( (displayNumber % 4) == 1) { /* default clipping */ myOrtho2D( -100.0, 100.0, -100.0, 100.0 ); /* default viewport */ myViewport( 0, 0, screenWidth, screenHeight ); myPushMatrix(); /* draw the polys */ drawPolys(); } else if ( (displayNumber % 4) == 2) { /* clipping test */ myOrtho2D( -65.0, 75.0, -80.0, 65.0 ); /* default viewport */ myViewport( 0, 0, screenWidth, screenHeight ); /* flip screen around! */ myScalef(-1.0,1.0); myPushMatrix(); /* draw the polys */ drawPolys(); } else if ( (displayNumber % 4) == 3) { /* default clipping */ myOrtho2D( -100.0, 100.0, -100.0, 100.0 ); /* default viewport */ myViewport( 0, 0, screenWidth, screenHeight ); /* rotate screen */ myRotatef(15.0); myPushMatrix(); /* draw the tranformed polys */ drawPolys(); } else /* displayNumber == 0 */ { /* default clipping */ myOrtho2D( -100.0, 100.0, -100.0, 100.0 ); /* default viewport */ myViewport( 0, 0, screenWidth, screenHeight ); myRotatef(-15.0); myScalef(.5,.5); myPushMatrix(); myRotatef(15.0); myPushMatrix(); /* draw the tranformed polys */ drawPolys(); } /* * Flush GL buffers to the display */ glFlush( ); }