Пример #1
0
/*!
	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();
}
Пример #2
0
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 */