/*! Renders a Drawable instance using OpenGL. */ void RendererGL::render(boost::shared_ptr<Drawable> pDrawable) const { std::string MeshName = pDrawable->getMeshName(); DeformableGeometry* pMesh = MeshManager::getInstance()->getMesh(MeshName); if(!pMesh) return; glPushMatrix(); glMultMatrixf(m_globalTransform.getLocalTransform()); if(pDrawable->needUpdate()) { if (pDrawable->getBinding() == "LeftEye") { Vector3 eye = pDrawable->getPivot(); //double eyePos[3] = { -33.8, -33.2, -28.8 }; glTranslatef (-eye.x, -eye.y, -eye.z); glRotatef (pDrawable->getAPs()[24], 0.0, 1.0, 0.0); glRotatef (pDrawable->getAPs()[22], 1.0, 0.0, 0.0); glTranslatef (eye.x, eye.y, eye.z); } if (pDrawable->getBinding() == "RightEye") { Vector3 eye = pDrawable->getPivot(); ///double eyePos[3] = { 33.8, -33.2, -28.8 }; glTranslatef (-eye.x, -eye.y, -eye.z); glRotatef (pDrawable->getAPs()[25], 0.0, 1.0, 0.0); glRotatef (pDrawable->getAPs()[23], 1.0, 0.0, 0.0); glTranslatef (eye.x, eye.y, eye.z); } pDrawable->updateAnimation(); } doTransform(pDrawable->getTransform()); if(pDrawable->isTextureOn()) { const ITexture* pTexture = TextureManager::getInstance()->getTexture(pDrawable->getTexName()); if(pTexture) doTexture(*pTexture); } doGeometry(*pMesh); glBindTexture(GL_TEXTURE_2D, 0); glPopMatrix(); }
void main( int argc, char **argv ) { int i, wWidth = 640, wHeight = 480; /* Screen width & height */ GrMipMapId_t mmids[NUM_MIPMAPS]; /* The mipmaps with which we're testing. */ GrHwConfiguration hwconfig; GrScreenResolution_t screenRes = GR_RESOLUTION_800x600; GrVertex vtx1, vtx2, vtx3, vtx4; int numFrames = -1, frameCount = 0; if(argc > 2) if( strstr(argv[1], "-n")) numFrames = atoi(argv[2]); else { fprintf(stderr, "usage: test26 {-n numFrames}\n"); exit(-1); } else if(argc > 1) if(strstr(argv[1], "-n")) { fprintf(stderr, "usage: test26 {-n numFrames}\n"); exit(-1); } puts("TEST26:"); puts("Tests texture mapping"); if(numFrames == -1) { puts("Press a key to continue"); getch(); } grGlideInit(); /* Initialize glide library */ if ( !grSstQueryHardware( &hwconfig ) ) { fprintf( stderr, "main: grSstQueryHardware failed!\n" ); grGlideShutdown(); exit( -1 ); } grSstSelect( 0 ); if ( !grSstOpen( screenRes, GR_REFRESH_60Hz, GR_COLORFORMAT_ABGR, GR_ORIGIN_UPPER_LEFT, GR_SMOOTHING_ENABLE, 2 ) ) { fprintf( stderr, "main: grSstOpen failed!\n" ); grGlideShutdown(); exit( -1 ); } /* ** load up texture maps */ for (i = 0; i < NUM_MIPMAPS; i++) mmids[i] = doTexture("ramp.3df"); guColorCombineFunction(GR_COLORCOMBINE_DECAL_TEXTURE); grTexCombineFunction(GR_TMU0, GR_TEXTURECOMBINE_DECAL); grBufferClear( 0xFFFF0000, 0, GR_WDEPTHVALUE_FARTHEST ); while (1) { grBufferClear( 0xFFFF0000, 0, GR_WDEPTHVALUE_FARTHEST ); for (i = 0; i < NUM_MIPMAPS; i++) { /* upper-left-hand corner */ vtx1.x = 0.f + (i * 0.1f); vtx1.y = 0.f + (i * 0.1f); vtx1.oow = 1.0f; vtx1.tmuvtx[0].sow = 0.f; vtx1.tmuvtx[0].tow = 0.f; /* upper-right-hand corner */ vtx2.x = 0.5f + (i * 0.1f); vtx2.y = 0.f + (i * 0.1f); vtx2.oow = 1.0f; vtx2.tmuvtx[0].sow = 255.0f; vtx2.tmuvtx[0].tow = 0.f; /* lower-left-hand corner */ vtx3.x = 0.f + (i * 0.1f); vtx3.y = 0.5f + (i * 0.1f);; vtx3.oow = 1.f; vtx3.tmuvtx[0].sow = 0.f; vtx3.tmuvtx[0].tow = 255.f; /* lower-right-hand corner */ vtx4.x = 0.5f + (i * 0.1f); ; vtx4.y = 0.5f + (i * 0.1f);; vtx4.oow = 1.f; vtx4.tmuvtx[0].sow = 255.f; vtx4.tmuvtx[0].tow = 255.f; vtx1.x = WINSCALEX(vtx1.x); vtx1.y = WINSCALEY(vtx1.y); vtx2.x = WINSCALEX(vtx2.x); vtx2.y = WINSCALEY(vtx2.y); vtx3.x = WINSCALEX(vtx3.x); vtx3.y = WINSCALEY(vtx3.y); vtx4.x = WINSCALEX(vtx4.x); vtx4.y = WINSCALEY(vtx4.y); guTexSource(mmids[i]); grDrawTriangle( &vtx1, &vtx2, &vtx3 ); grDrawTriangle( &vtx3, &vtx4, &vtx2 ); } /* for (i ...) */ while (grBufferNumPending() > 2); grBufferSwap( 1 ); if (kbhit()) { getch(); break; } frameCount++; if(frameCount < 0) frameCount = 0; if(frameCount == numFrames) break; } /* while (1) */ grGlideShutdown(); } /* main */