framework2

Форк
0
1
#include "ofApp.h"
2

3
//--------------------------------------------------------------
4
void ofApp::setup() {
5
    ofDisableArbTex();
6
    
7
    ofSetBackgroundColor( 220 );
8
    
9
    // uncomment this to convert scene to meters //
10
    //ofxFBXSource::Scene::FbxUnits = FbxSystemUnit::m;
11
    
12
    ofxFBXSource::Scene::Settings settings;
13
    settings.filePath = "astroBoy_walk.fbx";
14
//    settings.useKeyFrames = false;
15
    settings.printInfo = true;
16
    
17
    ofSetLogLevel(OF_LOG_VERBOSE);
18
    
19
    if( fbx.load(settings) ) {
20
        cout << "ofApp :: loaded the scene OK" << endl;
21
    } else {
22
        cout << "ofApp :: Error loading the scene" << endl;
23
    }
24
    
25
    cam.lookAt( ofVec3f(0,0,0) );
26
    cam.setDistance( 20 );
27
    cam.setFarClip(100);
28
    cam.setNearClip( .5f );
29
    
30
    #ifdef TARGET_OPENGLES
31
    cam.disableMouseInput();
32
    #endif
33
    
34
    fbx.setAnimation(0);
35
    fbx.setPosition( 0, -7, 0 );
36
    
37
    //cout << fbx.getSkeletonInfo() << endl;
38
    
39
    bRenderNormals  = false;
40
    bRenderMeshes   = true;
41
    bDrawBones      = false;
42
}
43

44
//--------------------------------------------------------------
45
void ofApp::update() {
46
    
47
    light.setPosition( cos(ofGetElapsedTimef()*2.) * 7, 4 + sin( ofGetElapsedTimef() ) * 2.5, 10  );
48
    
49
    ofVec3f target( ofMap( ofGetMouseX(), 0, ofGetWidth(), -10, 10, true), fbx.getPosition().y, fbx.getPosition().z+10 );
50
    fbx.lookAt( target );
51
    fbx.panDeg( 180 );
52
    
53
    fbx.getCurrentAnimation().setSpeed( ofMap( ofGetMouseY(), 100, ofGetHeight()-100, 0.5, 2.5, true ));
54
    
55
//    fbx.update();
56
    
57
    #ifndef TARGET_OPENGLES
58
    // change colors of the materials //
59
    for( int i = 0; i < fbx.getNumMeshes(); i++ ) {
60
//        cout << i << " - " << fbx.getMeshes()[i]->getName() << " num materials: " << fbx.getMeshes()[i]->getNumMaterials() << endl;
61
        if( fbx.getMeshes()[i]->getNumMaterials() > 2 ) {
62
            auto mat = fbx.getMeshes()[i]->getMaterials()[2];
63
            mat->setDiffuseColor( ofFloatColor(sin(ofGetElapsedTimef()*4.)*0.5+0.5, 1, 1, 1 ));
64
            mat->disableTextures();
65
        }
66
    }
67
    #endif
68
    
69
    
70
    // moves the bones into place based on the animation //
71
    fbx.earlyUpdate();
72

73
    // perform any bone manipulation here //
74
    shared_ptr<ofxFBXBone> bone = fbx.getBone("head");
75
    if( bone ) {
76
        bone->pointTo( light.getPosition(), ofVec3f(-1,0,0) ) ;
77
    }
78
    
79
    // manipulates the mesh around the positioned bones //
80
    fbx.lateUpdate();
81
    
82
}
83

84
//--------------------------------------------------------------
85
void ofApp::draw() {
86
    
87
    ofSetColor(255, 255, 255);
88
    
89
    ofEnableDepthTest();
90
    
91
    
92
    cam.begin(); {
93
    
94
        ofEnableLighting();
95
        light.enable();
96
        
97
        if( bRenderMeshes ) {
98
            ofSetColor( 255, 255, 255 );
99
            fbx.draw();
100
        }
101

102
        light.disable();
103
        ofDisableLighting();
104

105
        if(bDrawBones) {
106
            fbx.drawSkeletons( 0.5 );
107
        }
108

109
        if( bRenderNormals ) {
110
            ofSetColor( 255, 0, 255 );
111
            fbx.drawMeshNormals( 0.5, false );
112
        }
113
        
114
        ofNoFill();
115
        ofSetColor( 50, 50, 50 );
116
        ofDrawBox( 0, 0, 0, 14 );
117
        ofFill();
118
        
119
        ofSetColor( light.getDiffuseColor() );
120
        ofDrawSphere( light.getPosition(), 1 );
121
        
122
    } cam.end();
123
    
124
    ofDisableDepthTest();
125
    
126
    int numBones = fbx.getNumBones();
127
    
128
    ofSetColor( 60, 60, 60 );
129
    stringstream ds;
130
    ds << "Render normals (n): " << bRenderNormals << endl;
131
    ds << "Render meshes (m): " << bRenderMeshes << endl;
132
    ds << "Render " << numBones << " bones (b): " << bDrawBones << endl;
133
    if( fbx.areAnimationsEnabled() ) {
134
        ds << "Toggle play/pause (spacebar): playing: " << fbx.getCurrentAnimation().isPlaying() << endl;
135
        ds << "Previous/Next animation (up/down): " << fbx.getCurrentAnimation().name << endl;
136
    }
137
    ds << "Scale is " << fbx.getScale() << endl;
138
    if( fbx.getNumPoses() > 0 ) {
139
        ds << "Pose: " << fbx.getCurrentPose()->getName() << " num poses: " << fbx.getNumPoses() << " enabled (p): " << fbx.arePosesEnabled() << endl;
140
    }
141
    ofDrawBitmapString( ds.str(), 50, 30 );
142
    
143
    
144
    for(int i = 0; i < fbx.getNumAnimations(); i++ ) {
145
        stringstream ss;
146
        ofxFBXAnimation& anim = fbx.getAnimation( i );
147
        if( i == fbx.getCurrentAnimationIndex() ) {
148
            ss << "- ";
149
        }
150
        ss << "name: " << anim.name << " " << ofToString(anim.getPositionSeconds(), 3) << " | " << ofToString(anim.getDurationSeconds(), 3) << " frame: " << anim.getFrameNum() << " / " << anim.getTotalNumFrames() << endl;
151
        ofDrawBitmapString( ss.str(), 50, i * 30 + 450 );
152
    }
153
}
154

155
#ifdef TARGET_OPENGLES
156
//--------------------------------------------------------------
157
void ofApp::touchDown(ofTouchEventArgs & touch) {
158
    
159
}
160

161
//--------------------------------------------------------------
162
void ofApp::touchMoved(ofTouchEventArgs & touch) {
163
    
164
}
165

166
//--------------------------------------------------------------
167
void ofApp::touchUp(ofTouchEventArgs & touch) {
168
    
169
}
170

171
//--------------------------------------------------------------
172
void ofApp::touchDoubleTap(ofTouchEventArgs & touch) {
173
    if( bRenderMeshes ) {
174
        bRenderMeshes = false;
175
        bDrawBones = true;
176
    } else {
177
        bRenderMeshes = true;
178
        bDrawBones = false;
179
    }
180
}
181

182
//--------------------------------------------------------------
183
void ofApp::touchCancelled(ofTouchEventArgs & touch) {
184
    
185
}
186
#else
187

188
//--------------------------------------------------------------
189
void ofApp::keyPressed(int key) {
190
    if(fbx.getNumAnimations() > 1) {
191
        if(key == OF_KEY_DOWN ) {
192
            int newAnimIndex = fbx.getCurrentAnimationIndex()+1;
193
            if(newAnimIndex > fbx.getNumAnimations()-1 ) {
194
                newAnimIndex = 0;
195
            }
196
            fbx.setAnimation( newAnimIndex );
197
            
198
        }
199
        if(key == OF_KEY_UP ) {
200
            int newAnimIndex = fbx.getCurrentAnimationIndex()-1;
201
            if(newAnimIndex < 0 ) {
202
                newAnimIndex = fbx.getNumAnimations()-1;
203
            }
204
            fbx.setAnimation( newAnimIndex );
205
        }
206
    }
207
}
208

209
//--------------------------------------------------------------
210
void ofApp::keyReleased(int key) {
211
    if(key == ' ') {
212
        fbx.getCurrentAnimation().togglePlayPause();
213
    }
214
    if(key == 'n') {
215
        bRenderNormals = !bRenderNormals;
216
    }
217
    if(key == 'm') {
218
        bRenderMeshes = !bRenderMeshes;
219
    }
220
    if(key == 'b') {
221
        bDrawBones = !bDrawBones;
222
    }
223
}
224

225
//--------------------------------------------------------------
226
void ofApp::mouseMoved(int x, int y) {
227
    
228
}
229

230
//--------------------------------------------------------------
231
void ofApp::mouseDragged(int x, int y, int button) {
232
    
233
}
234

235
//--------------------------------------------------------------
236
void ofApp::mousePressed(int x, int y, int button)    {
237
    
238
}
239

240
//--------------------------------------------------------------
241
void ofApp::mouseReleased(int x, int y, int button) {
242
    
243
}
244

245
//--------------------------------------------------------------
246
void ofApp::windowResized(int w, int h) {
247
    
248
}
249

250
//--------------------------------------------------------------
251
void ofApp::gotMessage(ofMessage msg) {
252
    
253
}
254

255
//--------------------------------------------------------------
256
void ofApp::dragEvent(ofDragInfo dragInfo) {
257
    
258
}
259
#endif
260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.