Cc3dVector4 normalize(const Cc3dVector4&v){
    //assert(v.w()==0);
    float r2=v.x()*v.x()+v.y()*v.y()+v.z()*v.z();
    if(r2==0){
        return Cc3dVector4(0,0,0,0);
    }
    float r=sqrtf(r2);
    Cc3dVector4 rs(v.x()/r,v.y()/r,v.z()/r,0);
    return rs;
}
Beispiel #2
0
Cc3dVector4 Cc3dMatrix4::operator*(const Cc3dVector4&v)const{
    const float *m=this->getArray();
    const float *vin=v.getArray();
    float vout[4];
    vout[0]=vin[0]*m[0]+vin[1]*m[4]+vin[2]*m[8]+vin[3]*m[12];
    vout[1]=vin[0]*m[1]+vin[1]*m[5]+vin[2]*m[9]+vin[3]*m[13];
    vout[2]=vin[0]*m[2]+vin[1]*m[6]+vin[2]*m[10]+vin[3]*m[14];
    vout[3]=vin[0]*m[3]+vin[1]*m[7]+vin[2]*m[11]+vin[3]*m[15];
    return Cc3dVector4(vout);
}
void CbossCellSet::loadConfig(const string&fileNameWithExt){
    
    //------------------获得绝对路径--abc
    string pathName=Cc3dFileUtils::sharedFileUtils()->getFullPath(fileNameWithExt);
    //打开文件--abc
    FILE  *fp=NULL;
    fp=fopen(pathName.c_str(),"r");
    if(fp==NULL)
    {
        cout<<"Open "<<pathName<<" failed!"<<endl;
        assert(false);
    }
    //------------------提取文件信息,并建立模型列表--abc
    {
        char buffer[1024]={0};
        //提取项目数--abc
        int n;
        fscanf(fp, "%d",&n);
        //提取项目--abc
        for(int i=0;i<n;i++){
            
            //----cellTemplateID
            int templateID;
            fscanf(fp,"%s",buffer);
            if(buffer[0]=='#'){
                cout<<"error:met # too early!"<<endl;
                assert(false);
            }
            fscanf(fp,"%d",&templateID);
            
            CbossCell*pbossCell=makeCellTemplate(templateID);

            //----pos
            float posx,posy,posz;
            fscanf(fp, "%f",&posx);
            fscanf(fp, "%f",&posy);
            fscanf(fp, "%f",&posz);
            pbossCell->getTransformPointer()->setPos(posx,posy,posz);
            if(pbossCell->isFly){
                ((Cship*)pbossCell->get_ship())->setTransform(((Cship*)pbossCell)->getTransform());
                //根据initPos和flyRange_relativeToInitPos计算flyRange
                pbossCell->flyRange=pbossCell->flyRange_relativeToInitPos;
                pbossCell->flyRange.mov(Cc3dVector4(posx,posy,posz,0));
                
            }
            this->addActor(pbossCell);
        }
        fscanf(fp, "%s",buffer);
        assert(buffer[0]=='#');//缺少#或实际条目数比n值大--abc
    }
    //关闭文件--abc
    fclose(fp);
}
void CtestLayer::clearCallBack(CCObject *senderz, cocos2d::extension::CCControlEvent controlEvent) {
    for(int i=0; i<m_nRow; i++) {
        for(int j=0; j<m_nCol; j++) {
            for(int k=0; k<m_nDeep; k++) {
                Cc3dActor*actor=m_actor3dMat3d[i][j][k];
                int meshCount=actor->getModel()->getMeshCount();
                for(int u=0; u<meshCount; u++) {
                    Cc3dMesh*mesh=actor->getModel()->getMeshByIndex(u);
                    int subMeshCount=mesh->getSubMeshCount();
                    for(int v=0; v<subMeshCount; v++) {
                        Cc3dSubMesh*subMesh=mesh->getSubMeshByIndex(v);
                        Cc3dSubMeshData*subMeshData=subMesh->getSubMeshData();
                        vector<Cc3dVector4>&colorList=subMeshData->m_colorList;
                        for(int k=0; k<(int)colorList.size(); k++) {
                            colorList[k]=Cc3dVector4(1,1,1,1);
                        }
                        subMesh->submitColor(GL_STREAM_DRAW);
                    }
                }
            }
        }
    }
}
Cc3dVector4 toV4(const Cc3dVector2&v2,float z,float w){
    return Cc3dVector4(v2.x(), v2.y(), z, w);
}
Beispiel #6
0
void loadInfo_subMesh(Cc3dSubMesh*submesh,const string&meshFilePathShort,const string&texClipPathShort,float scale,Cc3dVector4 offsetVec)
//加载网格--abc
//scale为放缩系数,可以在导入时对顶点坐标进行等比方缩--abc
//offsetVec为偏移量(缩放以后的偏移量),可在导入时对顶点坐标进行偏移--abc
//由于是等比放缩,所以法线和纹理坐标不受影响--abc
{
    if(meshFilePathShort.empty()==false)assert(meshFilePathShort[(int)meshFilePathShort.size()-1]!='/');
    if(texClipPathShort.empty()==false)assert(texClipPathShort[(int)texClipPathShort.size()-1]!='/');
    assert(submesh->getSubMeshData()->isEmpty());
    //------------------获得纹理文件夹相对路径--abc
    string meshFileName_part1;//相对路径名,不包含文件名--abc
    string meshFileName_part2;//文件名--abc
    vector<string> rs=splitStrInTwoByLastBar(meshFilePathShort);
    meshFileName_part1=rs[0];
    meshFileName_part2=rs[1];
    //------------------获得绝对路径--abc
    string pathName=Cc3dFileUtils::sharedFileUtils()->getFullPath(meshFilePathShort);
    //打开文件--abc
    FILE  *fp=NULL;
    fp=fopen(pathName.c_str(),"r");
    if(fp==NULL)
    {
        cout<<"Open "<<pathName<<" failed!"<<endl;
       assert(false);
    }
    
    //------------------提取文件信息到submesh
    {
        //提取顶点数--abc
        int nv;
        fscanf(fp, "%d",&nv);
        //提取各顶点--abc
        for(int i=0;i<nv;i++){
            
            //提取pos
            float pos[4]={0,0,0,1};
            fscanf(fp, "%f",&pos[0]);
            fscanf(fp, "%f",&pos[1]);
            fscanf(fp, "%f",&pos[2]);
            //提取texCoord
            float texCoord[2];
            fscanf(fp, "%f",&texCoord[0]);
            fscanf(fp, "%f",&texCoord[1]);
            //提取norm
            float norm[4]={0,0,0,0};
            fscanf(fp, "%f",&norm[0]);
            fscanf(fp, "%f",&norm[1]);
            fscanf(fp, "%f",&norm[2]);
            //将texCoord原点由左下角变为左上角--abc
            texCoord[1]=1-texCoord[1];
            //对顶点进行放缩--abc
            Cc3dVector4 posWithScale=Cc3dVector4(pos)*scale;
            posWithScale.setw(1);
            //对缩放后的顶点进行偏移(注意,一定要放在缩放后面)
            posWithScale=posWithScale+offsetVec;
            //组成顶点--abc
            Cc3dVertex vertex(posWithScale,Cc3dVector2(texCoord),Cc3dVector4(norm));
            //将此顶点加入vlist
            submesh->getSubMeshData()->addVertex(vertex);
        }
        //提取IDtri数--abc
        int nIDtri;
        fscanf(fp, "%d",&nIDtri);
        
        //提取各IDtri
        for(int i=0;i<nIDtri;i++){
            Cc3dIDTriangle IDtri;
            //提取ID0,ID1,ID2
            fscanf(fp, "%d",&IDtri.vID[0]);
            fscanf(fp, "%d",&IDtri.vID[1]);
            fscanf(fp, "%d",&IDtri.vID[2]);
            submesh->getSubMeshData()->addIDtri(IDtri);
        }
        //提取纹理图片名并加载纹理--abc
        {
            char t_imageName[1024];
            fscanf(fp, "%s",t_imageName);
            //将texFileName的后缀名改成.png
            string part1,part2;
            vector<string> rs=splitStrInTwoByLastDotBehindLastBar(t_imageName);
            part1=rs[0];
            part2=rs[1];
            string imageName=part1+".png";
            //生成相对路径--abc
            string texPathName=texClipPathShort+"/"+imageName;
            //根据纹理图片路径加载纹理,并将纹理句柄存入submesh
            submesh->setTexture(Cc3dTextureCache::sharedTextureCache()->addImage(texPathName.c_str()));
        }
        //提取backVisible
        char buffer[1024]={0};
        int backVisible;
        fscanf(fp, "%s",buffer);
        fscanf(fp, "%d",&backVisible);
        if(backVisible){
            submesh->setCullFace(ec3dNotCull);
        }else{
            submesh->setCullFace(ec3dCullBack);
        }
        
    }
    //关闭文件--abc
    fclose(fp);
    
    
}
Beispiel #7
0
bool Cboard::init(float width,float height,string imagePath){
	m_width=width;
	m_height=height;
	//--texture
	Cc3dTexture*texture=Cc3dTextureCache::sharedTextureCache()->addImage(imagePath,GL_CLAMP_TO_EDGE,GL_CLAMP_TO_EDGE);

	//meshes
	{
		//----subMesh
		Cc3dSubMesh* subMesh=new Cc3dSubMesh();
		subMesh->autorelease();
		//--color
		Cc3dVector4 color[4]={Cc3dVector4(1,1,1,1),Cc3dVector4(1,1,1,1),Cc3dVector4(1,1,1,1),Cc3dVector4(1,1,1,1)};
		//--vertex
		//front face
		subMesh->addVertex(Cc3dVertex(Cc3dVector4(-width/2,+height/2,0,1),Cc3dVector2(0,0),Cc3dVector4(0,0,1,0),color[0]));//0
		subMesh->addVertex(Cc3dVertex(Cc3dVector4(-width/2,-height/2,0,1),Cc3dVector2(0,1),Cc3dVector4(0,0,1,0),color[1]));//1
		subMesh->addVertex(Cc3dVertex(Cc3dVector4(+width/2,-height/2,0,1),Cc3dVector2(1,1),Cc3dVector4(0,0,1,0),color[2]));//2
		subMesh->addVertex(Cc3dVertex(Cc3dVector4(+width/2,+height/2,0,1),Cc3dVector2(1,0),Cc3dVector4(0,0,1,0),color[3]));//3
		//--IDTriangles
		//front face
		subMesh->addIDtri(Cc3dIDTriangle(0,1,2));
		subMesh->addIDtri(Cc3dIDTriangle(0,2,3));
		//----mesh
		Cc3dMesh*mesh=new Cc3dMesh();
		mesh->autorelease();
		mesh->addSubMesh(subMesh);
		//----model
		this->addMesh(mesh);
	}
	//----texture
	this->getMeshByIndex(0)->getSubMeshByIndex(0)->setTexture(texture);
	this->setIsDoDepthTest(false);
	return true;
}
Beispiel #8
0
void initGame(){
	

	//----light
	{
		light0=new Cc3dLight();
		light0->autorelease();
		light0->retain();
		light0->setPos(200,200,50);
		//light0->setSpecular(0.4,0.4,0.4);
	}
	 //----camera2D
    {
        float left=0;
        float right=Cc3dDeviceAndOSInfo::sharedDeviceAndOSInfo()->getScreenRect().getWidth();
        float top=Cc3dDeviceAndOSInfo::sharedDeviceAndOSInfo()->getScreenRect().getHeight();
        float bottom = 0;
        float _near = -1;//note: near and far is key word in vs2010, so here we use _near and _far
        float _far = 1;
        Cc3dRange range(left,right,bottom,top,_near,_far);
        camera2D=new Cc3dCamera();
        camera2D->autorelease();
        camera2D->retain();//must retain
        camera2D->setRange(range);
        camera2D->setProjectionMode(ec3dOrthographicMode);
    }
    //----camera
    {
        camera=new Cc3dCamera();
        camera->autorelease();
        camera->retain();//must retain
        camera->setFovy(70);
        camera->setAspect((float)Cc3dDeviceAndOSInfo::sharedDeviceAndOSInfo()->getScreenRect().getWidth()/Cc3dDeviceAndOSInfo::sharedDeviceAndOSInfo()->getScreenRect().getHeight());
        camera->setzNear(0.5);
        camera->setzFar(10000);
        float eyePos[3]={0,30*1.2,50*1.2};
        float eyeTg[3]={0,0,0};
        float up[3]={0,1,0};
        camera->setEyePos(Cc3dVector3(eyePos).toV4(1));
        camera->setCenter(Cc3dVector3(eyeTg).toV4(1));
        camera->setUp(Cc3dVector3(up).toV4(0));
        camera->updateFrustum();
    }

	//----fbx model
 
    
    Cc3dSkinActor*actor=Cc3dFbxLoader::sharedFbxLoader()->load("fbxLoader_resource/shapeDeformTest/shapeDeformTest_progressive.fbx",1.0f/10);//shapeDeformTest.fbx
    actor->setPos(Cc3dVector4(0,0,0,1));
    actor->setLight(light0);
    actor->setCamera(camera);
    actor->setProgram(Cc3dProgramCache::sharedProgramCache()->getProgramByName("classicLighting"));
    actor->setPassUnifoCallback(buildinProgramPassUnifoCallback_classicLighting);
    
    actor->genVBOBuffers();
    actor->submit(GL_STATIC_DRAW);
    
    

    
    //----add to scene
    Cc3dSceneManager::sharedSceneManager()->getRoot()->addChild(actor);

	
}
void Cc3dTransform::rotate(float nx,float ny,float nz,float cosa,float sina)
//n must be normalized vector
{
    Cc3dMatrix4 rotmat=calculateRotationMatrix(Cc3dVector4(nx,ny,nz,0),cosa,sina); //calculateRotationMatrix(nx, ny, nz, cosa, sina);
    m_RTmat=m_RTmat*rotmat;
}
bool CtestLayer::init(){
    CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();
    CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin();
    CCSize winSize=CCDirector::sharedDirector()->getWinSize();
    float ZEye=CCDirector::sharedDirector()->getZEye();
    //enable touch
	setTouchEnabled( true );
    //enable update
    scheduleUpdate();
    //update eye pos
    updateEyePos();
    //-----------------------------
    //root3d
    m_root3d=new Cc3dRoot();
    m_root3d->autorelease();
    m_root3d->init();
    m_root3d->setNodeName("root3d");
    this->addChild(m_root3d);
    
    //camera
    Cc3dCamera*camera=m_root3d->getCamera3D();
    m_r=(winSize.height/2)/tanf(camera->getFovy()/2*M_PI/180);
    camera->setEyePos(cc3dv4(0, 0, m_r, 1));
    camera->setCenter(cc3dv4(0, 0, 0, 1));
    camera->setUp(cc3dv4(0, 1, 0, 0));
    camera->setProjectionMode(ec3dPerspectiveMode);
    //lightSource
    Cc3dLightSource*lightSource=new Cc3dLightSource();
    lightSource->autorelease();
    lightSource->init();
    m_root3d->addChild(lightSource);
    lightSource->setAmbient(cc3dv4(0.8, 0.8, 0.8, 1));
    lightSource->setPosition3D(cc3dv4(600, 900, 1200, 1));
    //program
    Cc3dProgram*program=c3dGetProgram_c3dClassicLighting();

    //actor3D
    m_actor3D=c3dSimpleLoadActor("toolKitRes/model/apple_cfc");
    m_actor3D->setLightSource(lightSource);
    m_actor3D->setCamera3D(camera);
    m_actor3D->setPassUnifoCallback(passUnifoCallback_classicLighting);
    m_actor3D->setProgram(program);
    m_actor3D->setNodeName("actor3D");
    m_root3d->addChild(m_actor3D,0);
        
    m_actor3D->scale3D(4, 4, 4);
    m_actor3D->setPosition3D(Cc3dVector4(0,-130,0,1));
    
    //submit

    m_actor3D->submit(GL_STATIC_DRAW);
    

    

    //controlButton_swithProjMode
    {
        CCScale9Sprite* btnUp=CCScale9Sprite::create("button.png");
        CCScale9Sprite* btnDn=CCScale9Sprite::create("button_dn.png");
        CCLabelTTF*title=CCLabelTTF::create("proj mode", "Helvetica", 30);
        CCControlButton* controlButton=CCControlButton::create(title, btnUp);
        controlButton->setBackgroundSpriteForState(btnDn,CCControlStateHighlighted);
        controlButton->setPreferredSize(CCSize(180,80));
        controlButton->setPosition(ccp(400,100));
        controlButton->addTargetWithActionForControlEvents(this, (SEL_CCControlHandler)(&CtestLayer::switchProjModeCallBack), CCControlEventTouchDown);
        this->addChild(controlButton);
        m_controlButton_swithProjMode=controlButton;
        
    }
    
    //controlButton_transform
    {
        CCScale9Sprite* btnUp=CCScale9Sprite::create("button.png");
        CCScale9Sprite* btnDn=CCScale9Sprite::create("button_dn.png");
        CCLabelTTF*title=CCLabelTTF::create("transform", "Helvetica", 30);
        CCControlButton* controlButton=CCControlButton::create(title, btnUp);
        controlButton->setBackgroundSpriteForState(btnDn,CCControlStateHighlighted);
        controlButton->setPreferredSize(CCSize(180,80));
        controlButton->setPosition(ccp(700,100));
        controlButton->addTargetWithActionForControlEvents(this, (SEL_CCControlHandler)(&CtestLayer::transformCallBack), CCControlEventTouchDown);
        this->addChild(controlButton);
        m_controlButton_transform=controlButton;
        
    }
    //projection mode label
    m_pLabel=CCLabelTTF::create("proj mode: Perspective", "Arial", 35);
    m_pLabel->setPosition(ccp(origin.x + visibleSize.width*(3.0/4),
                              origin.y + visibleSize.height - m_pLabel->getContentSize().height-100));
    this->addChild(m_pLabel, 1);

    
    return true;
}
void CtestLayer::ccTouchesBegan(CCSet* touches, CCEvent* event)
{

    CCSetIterator it;
    CCTouch* touch;
    for( it = touches->begin(); it != touches->end(); it++)
    {
        touch = (CCTouch*)(*it);
        if(!touch)
            break;

        CCPoint pointInWinSpace = touch->getLocationInView();
        //note: for 3d mode, CCDirector::convertToGL() not works as we expected
        //  CCPoint pointInWinSpace = CCDirector::sharedDirector()->convertToGL(pointInWinSpace);

        //----update mos
        m_mosPosf=m_mosPos;
        m_mosPos=pointInWinSpace;


        //-------
        CCRect viewportRect=cocos2d::CCEGLView::sharedOpenGLView()->getViewPortRect();
        float viewport[4]= {viewportRect.getMinX(),viewportRect.getMinY(),viewportRect.size.width,viewportRect.size.height};

        Cc3dCamera*camera=m_root3d->getCamera3D();
        Cc3dVector4 eyePos=camera->getEyePos();
        Cc3dVector4 winPos=Cc3dVector4(m_mosPos.x,viewport[3]-m_mosPos.y,0,1);
        Cc3dMatrix4 projMat=camera->calculateProjectionMat();
        Cc3dMatrix4 viewMat=camera->calculateViewMat();
        Cc3dMatrix4 projViewInverse=inverse(projMat*viewMat);
        Cc3dVector4 worldPos= convertFromViewportSpaceToWorldSpace(winPos, projMat, viewMat, viewport);


        int i_firstIntersectActor=-1;
        int j_firstIntersectActor=-1;
        int k_firstIntersectActor=-1;
        float minDisIntersectPointToEyePos=INFINITY;

        for(int i=0; i<m_nRow; i++) {
            for(int j=0; j<m_nCol; j++) {
                for(int k=0; k<m_nDeep; k++) {
                    Cc3dActor*actor=m_actor3dMat3d[i][j][k];
                    int meshCount=actor->getModel()->getMeshCount();
                    for(int u=0; u<meshCount; u++) {
                        Cc3dMesh*mesh=actor->getModel()->getMeshByIndex(u);
                        int subMeshCount=mesh->getSubMeshCount();
                        for(int v=0; v<subMeshCount; v++) {
                            Cc3dSubMesh*subMesh=mesh->getSubMeshByIndex(v);
                            Cc3dSubMeshData*subMeshData=subMesh->getSubMeshData();
                            const vector<Cc3dVector4>&positionList=subMeshData->m_positionList;
                            const vector<Cc3dIDTriangle>&IDtriList=subMeshData->m_IDtriList;
                            int nIDtri=(int)IDtriList.size();
                            for(int w=0; w<nIDtri; w++) {
                                const Cc3dIDTriangle&IDtri=IDtriList[w];
                                int ID0=IDtri.vID(0);
                                int ID1=IDtri.vID(1);
                                int ID2=IDtri.vID(2);
                                Cc3dVector4 p0=subMesh->convertToWorldSpace3D(positionList[ID0]);
                                Cc3dVector4 p1=subMesh->convertToWorldSpace3D(positionList[ID1]);
                                Cc3dVector4 p2=subMesh->convertToWorldSpace3D(positionList[ID2]);
                                if(isLine3dIntersectWithTriangle3d(eyePos, worldPos-eyePos, p0, p1, p2)) { //intersect
                                    Cc3dVector4 intersectPos=getIntersectPointOfLine3dIntersectWithPlane3d(eyePos, worldPos-eyePos, p0, cross(p1-p0, p2-p1));
                                    float disIntersectPointToEyePos=getLength(intersectPos-eyePos);
                                    if(disIntersectPointToEyePos<minDisIntersectPointToEyePos) {
                                        minDisIntersectPointToEyePos=disIntersectPointToEyePos;
                                        i_firstIntersectActor=i;
                                        j_firstIntersectActor=j;
                                        k_firstIntersectActor=k;
                                    }

                                }
                            }
                        }
                    }
                }
            }
        }//got i_firstIntersectActor, j_firstIntersectActor, k_firstIntersectActor, minDisIntersectPointToEyePos
        if(i_firstIntersectActor!=-1) { //have intersect
            Cc3dActor*firstIntersectActor=m_actor3dMat3d[i_firstIntersectActor][j_firstIntersectActor][k_firstIntersectActor];
            int meshCount=firstIntersectActor->getModel()->getMeshCount();
            for(int i=0; i<meshCount; i++) {
                Cc3dMesh*mesh=firstIntersectActor->getModel()->getMeshByIndex(i);
                int subMeshCount=mesh->getSubMeshCount();
                for(int j=0; j<subMeshCount; j++) {
                    Cc3dSubMesh*subMesh=mesh->getSubMeshByIndex(j);
                    Cc3dSubMeshData*subMeshData=subMesh->getSubMeshData();
                    vector<Cc3dVector4>&colorList=subMeshData->m_colorList;
                    for(int k=0; k<(int)colorList.size(); k++) {
                        colorList[k]=Cc3dVector4(0,0,1,1);
                    }
                    subMesh->submitColor(GL_STREAM_DRAW);

                }
            }

        }


        break;//only consider the first touch

    }
}
Cc3dVector4 Cc3dVector2::toV4(float z,float w)const{
    return Cc3dVector4(x(),y(),z,w);
}
Cc3dVector4 Cc3dVector3::toV4(float w)const{
    return Cc3dVector4(x(),y(),z(),w);
}
Beispiel #14
0
void initGame(){
	Cc3dRect screenRect=Cc3dDeviceAndOSInfo::sharedDeviceAndOSInfo()->getScreenRect();

	//----light
	{
		light0=new Cc3dLight();
		light0->autorelease();
		light0->retain();
		light0->setPos(1000,5000,1000);//(50,200,500);
		light0->setSpecular(0.4,0.4,0.4);
	}
	 //----camera2D
    {
        float left=0;
        float right=Cc3dDeviceAndOSInfo::sharedDeviceAndOSInfo()->getScreenRect().getWidth();
        float top=Cc3dDeviceAndOSInfo::sharedDeviceAndOSInfo()->getScreenRect().getHeight();
        float bottom = 0;
        float _near = -1;//note: near and far is key word in vs2010, so here we use _near and _far
        float _far = 1;
        Cc3dRange range(left,right,bottom,top,_near,_far);
        camera2D=new Cc3dCamera();
        camera2D->autorelease();
        camera2D->retain();//must retain
        camera2D->setRange(range);
        camera2D->setProjectionMode(ec3dOrthographicMode);
    }
    //----camera
    {
        camera=new Cc3dCamera();
        camera->autorelease();
        camera->retain();//must retain
        camera->setFovy(70);
        camera->setAspect((float)Cc3dDeviceAndOSInfo::sharedDeviceAndOSInfo()->getScreenRect().getWidth()/Cc3dDeviceAndOSInfo::sharedDeviceAndOSInfo()->getScreenRect().getHeight());
        camera->setzNear(0.5);
        camera->setzFar(10000);
        float eyePos[3]={0,30,50};
        float eyeTg[3]={0,30,0};
        float up[3]={0,1,0};
        camera->setEyePos(Cc3dVector3(eyePos).toV4(1));
        camera->setCenter(Cc3dVector3(eyeTg).toV4(1));
        camera->setUp(Cc3dVector3(up).toV4(0));
        camera->updateFrustum();
    }

	//load fbx
	string fbxFilePath="fbxLoader_resource/girl/girl.fbx";
	float aniFrameInterval=1.0f/10;//1.0f/25;//frame interval value we want (second)
	Cc3dSkinActor*actor=Cc3dFbxLoader::sharedFbxLoader()->load(fbxFilePath.c_str(),aniFrameInterval);
	//actor is just for export, no need to fully set up and add to scene
	// actor->setPos(Cc3dVector4(0,0,0,1));
	// actor->setLight(light0);
    // actor->setCamera(camera);
	// actor->setProgram(Cc3dProgramCache::sharedProgramCache()->getProgramByName("classicLighting"));
    // actor->setPassUnifoCallback(buildinProgramPassUnifoCallback_classicLighting);
    // actor->genVBOBuffers();
 	// actor->submit(GL_STATIC_DRAW);
	// Cc3dSceneManager::sharedSceneManager()->getRoot()->addChild(actor);

	//export to my own format
	//do not use girl.cfc (do not use dot in folderName), because it can cause getFullPath fail on iOS(on iOS, the getFullPath function is not implemented very well)
	//export values only
	{
#if (C3D_TARGET_PLATFORM == C3D_PLATFORM_WIN32) 
		string exportPath="export/girl_cfc";
#elif (C3D_TARGET_PLATFORM == C3D_PLATFORM_IOS) 
		string exportPath=Cc3dDocuments::sharedDocuments()->getDocumentsPath()+"/export/girl_cfc";
#else
		assert(false);
#endif
		bool valueOnly=true;//export values only. small, but not very readable.
		cout<<"export values only..."<<endl;
		actor->doExport(exportPath,valueOnly);
		cout<<"export done! model has exported to:"<<exportPath<<endl;
	}
	//export values and keys
	{
#if (C3D_TARGET_PLATFORM == C3D_PLATFORM_WIN32) 
		string exportPath="export/girl_readable_cfc";
#elif (C3D_TARGET_PLATFORM == C3D_PLATFORM_IOS) 
		string exportPath=Cc3dDocuments::sharedDocuments()->getDocumentsPath()+"/export/girl_readable_cfc";
#else
		assert(false);
#endif
		
		bool valueOnly=false;//export values and keys. big, but more readable. 
		cout<<"export values and keys..."<<endl;
		actor->doExport(exportPath,valueOnly);
		cout<<"export done! model has exported to:"<<exportPath<<endl;
	}

	//text
	Cboard*text=new Cboard();
	text->init(240,30,"exportFbxToMyOwnFormat_resource/text.png");
	text->setPos(Cc3dVector4((screenRect.getMinX()+screenRect.getMaxX())/2,(screenRect.getMinY()+screenRect.getMaxY())/2,0,1));
	text->setLight(light0);
    text->setCamera(camera2D);
	text->genVBOBuffers();
	text->submit(GL_STATIC_DRAW);
	//text add to scene
	Cc3dSceneManager::sharedSceneManager()->getRoot()->addChild(text);
}