本文整理汇总了C++中osg::TransformRecPtr类的典型用法代码示例。如果您正苦于以下问题:C++ TransformRecPtr类的具体用法?C++ TransformRecPtr怎么用?C++ TransformRecPtr使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了TransformRecPtr类的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: createScenegraph
OSG::NodeTransitPtr createScenegraph(void)
{
// At first we load all needed models from file
OSG::NodeRecPtr w_high =
OSG::SceneFileHandler::the()->read("Data/woman_high.wrl");
OSG::NodeRecPtr w_medium =
OSG::SceneFileHandler::the()->read("Data/woman_medium.wrl");
OSG::NodeRecPtr w_low =
OSG::SceneFileHandler::the()->read("Data/woman_low.wrl");
// we check the result
if((w_high == NULL) || (w_medium == NULL)|| (w_low == NULL))
{
std::cout << "It was not possible to load all needed models from file"
<< std::endl;
return OSG::NodeTransitPtr();
}
// now the LOD core
OSG::DistanceLODRecPtr lod = OSG::DistanceLOD::create();
lod->editSFCenter()->setValue(OSG::Pnt3f(0,0,0));
lod->editMFRange()->push_back(200);
lod->editMFRange()->push_back(500);
// the node containing the LOD core. The three models will be
// added as its children
OSG::NodeRecPtr lodNode = OSG::Node::create();
lodNode->setCore(lod);
lodNode->addChild(w_high);
lodNode->addChild(w_medium);
lodNode->addChild(w_low);
// create the node with switch core ********************
OSG::SwitchRecPtr sw = OSG::Switch::create();
//Notice: the first choice is 0
sw->setChoice(0);
OSG::NodeRecPtr switchNode = OSG::Node::create();
switchNode->setCore(sw);
switchNode->addChild(lodNode);
//end switch creation **********************************
OSG::NodeRecPtr root = OSG::Node::create();
root->setCore(OSG::Group::create());
root->addChild(switchNode);
// we know want to extract the mesh geometry out of the graph
// it is sufficent to pass the model only as root for searching
OSG::NodeRecPtr womanGeometry = checkName(w_high);
OSG::GeometryRecPtr geo =
dynamic_cast<OSG::Geometry *>(womanGeometry->getCore());
//new node with "old" geometry core referenced
OSG::NodeRecPtr woman = OSG::Node::create();
woman->setCore(geo);
//translate it a bit to see both women
OSG::NodeRecPtr womanTrans = OSG::Node ::create();
OSG::TransformRecPtr t = OSG::Transform::create();
OSG::Matrix m;
m.setIdentity();
m.setTranslate(OSG::Vec3f(0,0,200));
t->setMatrix(m);
womanTrans->setCore(t);
womanTrans->addChild(woman);
//add it to the root
root->addChild(womanTrans);
return OSG::NodeTransitPtr(root);
}
示例2: updateScene
//.........这里部分代码省略.........
break;
case OSG::Image::OSG_RGB_DXT1:
statElem->set("OSG_RGB_DXT1");
break;
case OSG::Image::OSG_RGBA_DXT1:
statElem->set("OSG_RGBA_DXT1");
break;
case OSG::Image::OSG_RGBA_DXT3:
statElem->set("OSG_RGBA_DXT3");
break;
case OSG::Image::OSG_RGBA_DXT5:
statElem->set("OSG_RGBA_DXT5");
break;
default:
statElem->set("???");
break;
}
statElem = statfg->editCollector()->getElem(textureDataTypeDesc);
switch (imagePtr->getDataType())
{
case OSG::Image::OSG_UINT8_IMAGEDATA:
statElem->set("OSG_UINT8_IMAGEDATA");
break;
case OSG::Image::OSG_UINT16_IMAGEDATA:
statElem->set("OSG_UINT16_IMAGEDATA");
break;
case OSG::Image::OSG_UINT32_IMAGEDATA:
statElem->set("OSG_UINT32_IMAGEDATA");
break;
case OSG::Image::OSG_FLOAT16_IMAGEDATA:
statElem->set("OSG_FLOAT16_IMAGEDATA");
break;
case OSG::Image::OSG_FLOAT32_IMAGEDATA:
statElem->set("OSG_FLOAT32_IMAGEDATA");
break;
case OSG::Image::OSG_INT16_IMAGEDATA:
statElem->set("OSG_INT16_IMAGEDATA");
break;
case OSG::Image::OSG_INT32_IMAGEDATA:
statElem->set("OSG_INT32_IMAGEDATA");
break;
default:
statElem->set("???");
break;
}
ostringstream os;
os << imagePtr->getWidth() << 'x' << imagePtr->getHeight() << 'x' << imagePtr->getDepth();
statfg->editCollector()->getElem(textureSizeDesc)->set(os.str());
statfg->editCollector()->getElem(textureDimensionDesc)->set(imagePtr->getDimension());
statfg->editCollector()->getElem(textureBPPDesc)->set(imagePtr->getBpp());
statfg->editCollector()->getElem(textureMipMapCountDesc)->set(imagePtr->getMipMapCount());
statfg->editCollector()->getElem(textureFrameCountDesc)->set(imagePtr->getFrameCount());
// Put it all together into a Geometry NodeCore.
OSG::GeometryRecPtr geo = OSG::makePlaneGeo(imagePtr->getWidth(), imagePtr->getHeight(), 1, 1);
OSG::NodeRecPtr imageNode = OSG::Node::create();
imageNode->setCore(geo);
OSG::NodeRecPtr transNodePtr = OSG::Node::create();
OSG::TransformRecPtr transPtr = OSG::Transform::create();
OSG::Matrix transMatrix;
transMatrix.setTranslate(0.f, 0.f, -1.f);
transPtr->setMatrix(transMatrix);
transNodePtr->setCore(transPtr);
transNodePtr->addChild(imageNode);
OSG::TextureObjChunkRecPtr texObjChunk = OSG::TextureObjChunk::create();
texObjChunk->setImage(imagePtr);
texObjChunk->setWrapS(GL_CLAMP);
texObjChunk->setWrapT(GL_CLAMP);
texObjChunk->setMagFilter(GL_NEAREST);
texObjChunk->setMinFilter(GL_NEAREST);
OSG::TextureEnvChunkRecPtr texEnvChunk = OSG::TextureEnvChunk::create();
texEnvChunk->setEnvMode(GL_MODULATE);
OSG::MaterialChunkRecPtr matChunk = OSG::MaterialChunk::create();
matChunk->setAmbient(OSG::Color4f(1.f, 1.f, 1.f, 1.f));
matChunk->setDiffuse(OSG::Color4f(1.f, 1.f, 1.f, 1.f));
matChunk->setEmission(OSG::Color4f(0.f, 0.f, 0.f, 1.f));
matChunk->setSpecular(OSG::Color4f(0.f, 0.f, 0.f, 1.f));
matChunk->setShininess(0);
OSG::ChunkMaterialRecPtr m = OSG::ChunkMaterial::create();
m->addChunk(texObjChunk);
m->addChunk(texEnvChunk);
m->addChunk(matChunk);
geo->setMaterial(m);
scene->clearChildren();
scene->addChild(transNodePtr);
if(compressTo != OSG::Image::OSG_INVALID_PF)
{
OSG::SceneFileHandler::the()->write(scene->getChild(0),
"/tmp/comp.osb");
OSG::SceneFileHandler::the()->write(scene->getChild(0),
"/tmp/comp.osg");
}
}
示例3: main
int main(int argc, char *argv[])
{
// Init the OpenSG subsystem
OSG::osgInit(argc, argv);
{
// We create a GLUT Window (that is almost the same for most applications)
int winid = setupGLUT(&argc, argv);
OSG::GLUTWindowRecPtr gwin = OSG::GLUTWindow::create();
gwin->setGlutId(winid);
gwin->init();
// Create the face
std::string family = "SANS";
OSG::TextFace::Style style = OSG::TextFace::STYLE_PLAIN;
OSG::UInt32 size = 32;
OSG::TextPixmapFaceRefPtr face =
OSG::TextPixmapFace::create(family, style, size);
if (face == 0)
{
std::cerr << "ERROR: Cannot create face object!" << std::endl;
return -1;
}
// Lay out one single line of text
std::string text = "Hello World!"; // Use UTF-8 encoding!
OSG::TextLayoutParam layoutParam;
layoutParam.horizontal = true;
layoutParam.leftToRight = true;
layoutParam.topToBottom = true;
layoutParam.majorAlignment = OSG::TextLayoutParam::ALIGN_FIRST;
layoutParam.minorAlignment = OSG::TextLayoutParam::ALIGN_FIRST;
layoutParam.spacing = 1.f;
layoutParam.length.push_back(0.f);
layoutParam.maxExtend = 0.f;
OSG::TextLayoutResult layoutResult;
face->layout(text, layoutParam, layoutResult);
// Render the text into an OpenSG image
OSG::Vec2f offset;
OSG::UInt32 border = 1;
OSG::ImageRecPtr imagePtr = face->makeImage(layoutResult, offset, border);
// Create the geometry which we will assign the texture to
OSG::Real32 width = imagePtr->getWidth();
OSG::Real32 height = imagePtr->getHeight();
OSG::NodeRecPtr plane = OSG::makePlane(width, height, 1, 1);
// Create the texture that will hold the image
OSG::SimpleTexturedMaterialRecPtr tex =
OSG::SimpleTexturedMaterial::create();
tex->setImage(imagePtr);
tex->setEnvMode(GL_MODULATE);
tex->setDiffuse(OSG::Color3f(1, 0, 0));
// Assign the texture to the geometry
OSG::GeometryRecPtr geo =
dynamic_cast<OSG::Geometry *>(plane->getCore());
geo->setMaterial(tex);
// Transform the geometry so that the origin of the text is at
// the origin of the world coordinate system
OSG::NodeRecPtr scene = OSG::Node::create();
OSG::TransformRecPtr transformPtr = OSG::Transform::create();
OSG::Matrix m;
m.setTranslate(offset.x() + width / 2, offset.y() - height / 2, 0);
transformPtr->setMatrix(m);
scene->setCore(transformPtr);
scene->addChild(plane);
// Create and setup the SSM
mgr = new OSG::SimpleSceneManager;
mgr->setWindow(gwin);
mgr->setRoot(scene);
// Create a blue background
OSG::SolidBackgroundRecPtr bg = OSG::SolidBackground::create();
bg->setColor(OSG::Color3f(0.1, 0.1, 0.5));
gwin->getPort(0)->setBackground(bg);
mgr->showAll();
OSG::commitChanges();
}
// Give Control to the GLUT Main Loop
glutMainLoop();
return 0;
}
示例4: display
void display(void)
{
#if 0
Matrix m1, m2, m3;
Quaternion q1;
tball.getRotation().getValue(m3);
q1.setValue(m3);
m1.setRotate(q1);
m2.setTranslate( tball.getPosition() );
m1.mult( m2 );
if(move_obj == true)
{
scene_trans->editSFMatrix()->setValue( m1 );
}
else
{
cam_trans->editSFMatrix()->setValue( m1 );
}
#endif
cam_trans->editSFMatrix()->setValue(tball.getFullTrackballMatrix());
#if 0
fprintf(stderr, "%f %f %f\n",
cam_trans->getMatrix()[3][0],
cam_trans->getMatrix()[3][1],
cam_trans->getMatrix()[3][2]);
#endif
OSG::Real32 t = glutGet(GLUT_ELAPSED_TIME);
for(OSG::UInt32 i = 0; i < 6; ++i)
{
if(pAnimTrs[i] != NULL)
{
pAnimTrs[i]->editRotation().setValueAsAxisDeg(
0.f, 1.f, 0.f,
t / 50.f);
}
}
OSG::commitChanges();
// fprintf(stderr, "Frame start\n");
// fprintf(stderr, "============================================\n");
win->render(rentravact);
}
示例5: display
void display(void)
{
OSG::Real32 time = glutGet(GLUT_ELAPSED_TIME );
//create the Quaternion the describes the rotation of
//the planet around the sun
OSG::Quaternion planetRot = OSG::Quaternion(OSG::Vec3f(0,1,0),
time/float(1000));
//now the rotation of the moon around the planet
//the division by 12 speeds up the rotation by 12 compared to the
//planet rotation
OSG::Quaternion moonRot = OSG::Quaternion(OSG::Vec3f(0,1,0),
time/float(1000/12));
//generate the Matrices
OSG::Matrix p,m,t1,r1,t2,r2;
t1.setTransform(OSG::Vec3f(20,0,0));
r1.setTransform(planetRot);
r1.mult(t1);
p.setValue(r1);
t2.setTransform(OSG::Vec3f(8,0,0));
r2.setTransform(moonRot);
r2.mult(t2);
r1.mult(r2);
m.setValue(r1);
planetTransform->setMatrix(p);
moonTransform ->setMatrix(m);
mgr->redraw();
}
示例6: display
void display(void)
{
OSG::Matrix m1;
m1 = tball.getFullTrackballMatrix();
cam_trans->editSFMatrix()->setValue(m1);
OSG::commitChanges();
win->render(rentravact);
}
示例7: paintGL
void MyOSGQGLWidget::paintGL(void)
{
OSG::Matrix m1, m2, m3;
OSG::Quaternion q1;
tball.getRotation().getValue(m3);
q1.setValue(m3);
m1.setRotate(q1);
m2.setTranslate( tball.getPosition() );
m1.mult( m2 );
cam_trans->setMatrix( m1 );
OSG::commitChanges();
osgWin->render(ract); // draw the viewports
}
示例8: redraw
void redraw ( void )
{
OSG::Matrix m1, m2, m3;
OSG::Quaternion q1;
tball.getRotation().getValue(m3);
q1.setValue(m3);
m1.setRotate(q1);
m2.setTranslate( tball.getPosition() );
m1.mult( m2 );
cam_trans->editSFMatrix()->setValue( m1 );
OSG::Thread::getCurrentChangeList()->commitChanges();
win->render(ract);
}
示例9: createScenegraph
OSG::NodeRecPtr createScenegraph(void)
{
//create sun, planet & moon geometry
OSG::GeometryRecPtr sun = OSG::makeSphereGeo(3, 6);
OSG::NodeRecPtr planet = OSG::makeSphere (3, 3);
OSG::NodeRecPtr moon = OSG::makeSphere (2, 1);
//the root node will be the sun
OSG::NodeRecPtr root = OSG::Node::create();
root->setCore(sun);
OSG::NodeRecPtr planetTransformNode = OSG::Node::create();
OSG::NodeRecPtr moonTransformNode = OSG::Node::create();
// these were declared globally
planetTransform = OSG::Transform::create();
moonTransform = OSG::Transform::create();
// Now we need to fill it with live
// We want to have the planet some distance away from the sun,
// but initial with no rotation. The same aplies to the moon
OSG::Matrix m,n;
m.setIdentity();
n.setIdentity();
m.setTranslate(20, 0, 0);
n.setTranslate( 8, 0, 0);
planetTransform->setMatrix(m);
moonTransform ->setMatrix(n);
//Insert the cores into the apropiate nodes and add the geometry
planetTransformNode->setCore (planetTransform);
planetTransformNode->addChild(planet );
moonTransformNode->setCore (moonTransform);
moonTransformNode->addChild(moon );
//add the planet to the sun
root->addChild(planetTransformNode);
root->addChild(moonTransformNode );
//now we are done
return OSG::NodeTransitPtr(root);
}
示例10: display
void display(void)
{
OSG::Matrix m1, m2, m3;
OSG::Quaternion q1;
tball.getRotation().getValue(m3);
q1.setValue(m3);
m1.setRotate(q1);
// std::cout << "TBROT" << std::endl << tball.getRotation() << endl;
// std::cout << "M3" << std::endl << m3 << std::endl;
// std::cout << "Q1" << std::endl << q1 << std::endl;
// std::cout << "M1" << std::endl << m1 << std::endl;
// m1.setRotate( tball.getRotation() );
m2.setTranslate( tball.getPosition() );
//std::cout << "Pos: " << tball.getPosition() << ", Rot: " << tball.getRotation() << std::endl;
// std::cout << tball.getRotation() << std::endl;
m1.mult( m2 );
// std::cerr << m1 << std::endl;
m1 = tball.getFullTrackballMatrix();
if(move_obj == true)
{
scene_trans->editSFMatrix()->setValue( m1 );
}
else
{
cam_trans->editSFMatrix()->setValue( m1 );
}
OSG::commitChangesAndClear();
win->render(rentravact);
if(dumpImg == true)
{
vpFBO->setTravMask(oldTravMask);
pTexBuffer ->setReadBack (false);
vpFBO->getFrameBufferObject()->setPostProcessOnDeactivate(false);
pImg->write("/tmp/test.png");
dumpImg = false;
}
if(dumpImg_RB == true)
{
pRenBuffer->getImage()->write("/tmp/test1.png");
dumpImg_RB = false;
win->subPortByObj(vpFBO_RB);
vpFBO_RB = NULL;
pRenBuffer = NULL;
win->runFrameExit();
// OSG::FieldContainerFactory::the()->dump();
}
// win->render(renact);
// std::cerr << "------------- AR START --------------" << std::endl;
// Thread::getCurrentChangeList()->dump();
}
示例11: doMain
int doMain (int argc, char **argv)
{
OSG::osgInit(argc,argv);
// GLUT init
glutInit(&argc, argv);
glutInitDisplayMode( GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE);
glutInitWindowSize(800, 800);
int winid = glutCreateWindow("OpenSG");
glutKeyboardFunc(key);
glutVisibilityFunc(vis);
glutReshapeFunc(reshape);
glutDisplayFunc(display);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutIdleFunc(display);
// OSG
OSG::SceneFileHandler::the()->print();
// create the graph
// beacon for camera and light
OSG::NodeUnrecPtr b1n = OSG::Node::create();
OSG::GroupUnrecPtr b1 = OSG::Group::create();
fprintf(stderr, "Create b1n %p %d %d \n",
b1n.get(),
b1n->getRefCount(),
b1n->getWeakRefCount());
b1n->setCore( b1 );
// transformation
OSG::NodeUnrecPtr t1n = OSG::Node::create();
OSG::TransformUnrecPtr t1 = OSG::Transform::create();
t1n->setCore (t1 );
t1n->addChild(b1n);
fprintf(stderr, "Create t1n %p %d %d \n",
t1n.get(),
t1n->getRefCount(),
t1n->getWeakRefCount());
cam_trans = t1;
// light
OSG::NodeUnrecPtr dlight = OSG::Node::create();
OSG::DirectionalLightUnrecPtr dl = OSG::DirectionalLight::create();
{
dlight->setCore(dl);
dl->setAmbient( .3f, .3f, .3f, 1 );
dl->setDiffuse( .8f, .8f, .8f, .8f );
dl->setDirection(0,0,1);
dl->setBeacon( b1n);
}
fprintf(stderr, "Create dlight %p %d %d \n",
dlight.get(),
dlight->getRefCount(),
dlight->getWeakRefCount());
hdrroot = OSG::Node::create();
hdrroot->editVolume().setInfinite();
hdrroot->editVolume().setStatic ();
hdrroot->setCore(OSG::Group::create());
// root
root = OSG::Node:: create();
OSG::GroupUnrecPtr gr1 = OSG::Group::create();
root->setCore(gr1);
hdrroot->addChild(root);
root->addChild(t1n );
root->addChild(dlight);
fprintf(stderr, "Create root %p %d %d \n",
root.get(),
root->getRefCount(),
root->getWeakRefCount());
// Load the file
OSG::NodeUnrecPtr file = NULL;
//.........这里部分代码省略.........
示例12: key
void key(unsigned char key, int /*x*/, int /*y*/)
{
switch ( key )
{
case 'l':
{
loadAnim();
break;
}
case 'c':
{
FILE *file=fopen(animName.c_str(),"w");
fclose(file);
animOri.clear();
animPos.clear();
frameCount = 0;
animTime = 0;
break;
}
case 's':
{
FILE *file=fopen(animName.c_str(),"a");
OSG::Matrix m=cam_trans->getMatrix();
OSG::Quaternion q(m);
OSG::Real32 ax,ay,az,r;
animPos.push_back(OSG::Vec3f(m[3][0],
m[3][1],
m[3][2]));
animOri.push_back(q);
q.getValueAsAxisRad(ax,ay,az,r);
fprintf(file,"%f %f %f %f,%f %f %f\n",ax,ay,az,r,
m[3][0],
m[3][1],
m[3][2]);
fclose(file);
frameCount = 0;
animTime = 0;
break;
}
case 'S':
{
FILE *file=fopen((animName+".wrl").c_str(),"w");
std::vector<OSG::Quaternion>::iterator qit;
fprintf(file,"DEF OriInter OrientationInterpolator {\n\tkey [");
for(size_t i = 0; i < animOri.size(); ++i)
{
fprintf(file, "%f", i / OSG::Real32(animOri.size() - 1) );
if(i < animOri.size() - 1)
fprintf(file,", ");
}
fprintf(file,"]\n\tkeyValue [");
for(qit = animOri.begin(); qit != animOri.end(); ++qit)
{
OSG::Real32 ax,ay,az,r;
(*qit).getValueAsAxisRad(ax,ay,az,r);
fprintf(file, "%f %f %f %f", ax, ay, az, r );
if(qit < animOri.end() - 1)
fprintf(file,", ");
}
fprintf(file,"]\n}\n\n");
std::vector<OSG::Vec3f>::iterator vit;
fprintf(file,"DEF PosInter PositionInterpolator {\n\tkey [");
for(size_t i = 0; i < animPos.size(); ++i)
{
fprintf(file, "%f", i / OSG::Real32(animPos.size() - 1) );
if(i < animPos.size() - 1)
fprintf(file,", ");
}
fprintf(file,"]\n\tkeyValue [");
for(vit = animPos.begin(); vit != animPos.end(); ++vit)
{
OSG::Vec3f v = *vit;
fprintf(file, "%f %f %f, ", v[0], v[1], v[2] );
}
fprintf(file,"]\n}\n\n");
fclose(file);
break;
}
case 'j':
if(sortfirst!=NULL)
{
sortfirst->setCompression("JPEG");
}
break;
case 'r':
if(sortfirst!=NULL)
{
sortfirst->setCompression("RLE");
}
break;
case 'n':
if(sortfirst!=NULL)
{
sortfirst->editCompression().erase();
//.........这里部分代码省略.........
示例13: display
void display(void)
{
OSG::Time t;
// std::cout << glutGet(GLUT_WINDOW_WIDTH) << std::endl;
t=-OSG::getSystemTime();
if(animate && animPos.size()>1)
{
if(animLength>0)
animTime = frameCount * (animPos.size())/float(animLength);
OSG::UInt32 i=OSG::UInt32(animTime);
OSG::Real32 a=animTime-i;
OSG::Vec3f v;
OSG::Quaternion q;
if(i+1 < animPos.size())
{
v = animPos[i] + (animPos[i+1] - animPos[i]) * a;
q = OSG::Quaternion::slerp(animOri[i],animOri[i+1],a);
}
else
{
v = animPos[i];
q = animOri[i];
}
cam_trans->editMatrix().setTranslate(v[0],v[1],v[2]);
cam_trans->editMatrix().setRotate(q);
}
else
{
cam_trans->editSFMatrix()->setValue( tball.getFullTrackballMatrix() );
}
try
{
OSG::Thread::getCurrentChangeList()->commitChanges();
#if 0
clusterWindow->activate();
clusterWindow->frameInit();
clusterWindow->renderAllViewports(ract);
#endif
clusterWindow->renderNoFinish(ract);
#if 0
if(showInfo)
{
displayInfo(10,90);
/*
char text[1024];
sprintf(text,"FPS: %12.1f",1.0/frame_time);
showText(10,70,text);
sprintf(text,"Positions: %12d",sum_positions);
showText(10,50,text);
sprintf(text,"Triangles: %12d",sum_triangles);
showText(10,30,text);
sprintf(text,"Geometries: %12d",sum_geometries);
showText(10,10,text);
*/
}
#endif
#if 0
clusterWindow->swap();
clusterWindow->frameExit();
#endif
clusterWindow->frameFinish();
// clear changelist from prototypes
OSG::Thread::getCurrentChangeList()->clear();
}
catch(OSG_STDEXCEPTION_NAMESPACE::exception &e)
{
std::cout << e.what() << std::endl;
cleanup();
exit(0);
}
t+=OSG::getSystemTime();
frame_time = t;
if(animate && animPos.size()>1)
{
OSG::Vec3f v;
printf("Frame %8.3f %8.5f %8.3f\n",
animTime,
t,1/t);
frameCount++;
if(frameCount == animLength)
{
animTime = 0;
frameCount = 0;
if(animLoops > 0)
{
animLoops--;
if(!animLoops)
{
cleanup();
//.........这里部分代码省略.........