2 import "engineSettings"
4 static FileFilter fileFilters[] =
7 "3D Studio Model Files (*.3ds)",
15 filters = fileFilters, sizeFilters = sizeof(fileFilters);
16 text = "Select a 3DS model to display..."
19 ModelViewer modelViewer { };
21 class eModelApp : GuiApplication
27 if(EngineSettings { }.Modal())
29 bool selected = false;
33 strcpy(fileDialog.filePath, argv[1]);
37 strcpy(fileDialog.filePath, "toyota.3ds");
40 while(selected || fileDialog.Modal() == ok)
42 modelViewer.modelFile = fileDialog.filePath;
50 class ModelViewer : Window
56 position = { 0, 0,-100 },
57 orientation = Euler { 0, 30, 0 },
64 bool moving, lightMoving;
74 Object rotor = model.Find("propmain");
75 Object rrotor = model.Find("propback");
78 rotor.transform.angle.RotateY(0.01 * 30);
80 rrotor->transform.angle.RotateX(0.01 * 30);
83 // cameraObject.frame++;
91 Euler startOrientation;
96 orientation = Euler { pitch = 50, yaw = 45 };
100 this, visible = false, noCaret = true, multiLine = true, readOnly = true, hasVertScroll = true, hasHorzScroll = true, borderStyle = sizable,
101 text = "Help", anchor = Anchor { right = 0, top = 0 }, size = Size { 400, 120 }, background = red, opacity = 0.2f,
102 font = { "Courier New", 10 }
104 FillModeValue fillMode;
106 SkyBox sky { size = { 10000, 10000, 10000 }, folder = ":skycube", extension = "pcx" };
110 borderStyle = sizable;
114 text = "ECERE Model Viewer";
115 anchor = Anchor { 0,0,0,0 };
119 File f = FileOpen(":help.txt", read);
130 timer.userData = this;
135 void OnUnloadGraphics()
137 displaySystem.ClearMaterials();
138 displaySystem.ClearTextures();
139 displaySystem.ClearMeshes();
148 void OnResize(int w, int h)
150 camera.Setup(w, h, null);
154 bool OnLeftButtonDown(int x, int y, Modifiers mods)
156 if(!moving && !lightMoving)
160 startOrientation = camera.orientation;
167 bool OnLeftButtonUp(int x, int y, Modifiers mods)
177 bool OnRightButtonDown(int x, int y, Modifiers mods)
179 if(!moving && !lightMoving)
183 startOrientation = light.orientation;
190 bool OnRightButtonUp(int x, int y, Modifiers mods)
200 bool OnMouseMove(int x, int y, Modifiers mods)
206 startOrientation.yaw - (x - startPosition.x),
207 startOrientation.pitch + (y - startPosition.y),
210 //if(euler.pitch > 90) euler.pitch = 90;
211 //if(euler.pitch < 1) euler.pitch = 1;
213 camera.orientation = euler;
219 light.orientation = Euler
221 startOrientation.yaw - (x - startPosition.x),
222 startOrientation.pitch + (y - startPosition.y),
231 bool OnKeyDown(Key key, unichar ch)
235 case escape: Destroy(0); return false;
237 fillMode = (fillMode == wireframe) ? solid : wireframe;
240 help.visible ^= true;
242 case k1: case k2: case k3: case k4:
243 if(key == k1) cameraObject = model.Find("Camera01");
244 else if(key == k2) cameraObject = model.Find("Camera02");
245 else if(key == k3) cameraObject = model.Find("Camera03");
246 else if(key == k4) cameraObject = model.Find("Camera04");
248 camera = cameraObject.camera;
249 camera.Setup(clientSize.w, clientSize.h, null);
256 bool OnKeyHit(Key key, unichar ch)
258 switch((SmartKey) key)
260 case wheelDown: case minus: camera.position.z *= 1.1111111f; Update(null); break;
261 case wheelUp: case plus: camera.position.z *= 0.9f; Update(null); break;
262 //case minus: camera.position.z += 10; break;
263 //case plus: camera.position.z -= 10; break;
266 model.Animate(model.frame + 1);
269 model.Animate(model.frame - 1);
272 model.Animate(model.startFrame);
275 model.Animate(model.endFrame);
282 bool OnLoadGraphics()
284 if(model.Load(modelFile, null, displaySystem))
288 // model.Merge(displaySystem);
290 // camera.position.z = - model.radius * 5;
292 //cameraObject = model.Find("Camera01");
293 //cameraObject = model.Find("Camera03");
294 //cameraObject = model.Find("Camera02");
295 //cameraObject = model.Find("Camera04");
296 //cameraObject = model.Find("FullscreenCam01");
297 //cameraObject = model.Find("Full Scre1");
298 //cameraObject = model.Find("Full Scree");
299 cameraObject = model.Find("Plasma Cam");
301 camera = cameraObject.camera;
303 camera.target = model;
306 sky.Create(displaySystem);
313 void OnRedraw(Surface surface)
315 display.fogColor = blue;
316 display.fogDensity = 0.000001f;
318 surface.SetBackground(lightBlue);
319 surface.Clear(colorAndDepth);
323 display.SetCamera(surface, camera);
325 display.SetLight(0, &light);
326 display.ambient = black;
327 // display.SetLights(model);
329 display.fillMode = fillMode;
331 sky.Render(camera, display);
332 display.DrawObject(model);
334 display.DrawObject(model);
335 display.DrawObject(model);
336 display.DrawObject(model);
337 display.DrawObject(model);
340 display.fillMode = solid;
342 display.SetCamera(surface, null);
346 surface.SetForeground(Black);
348 surface.WriteTextf(0,0, "%.2f, Frame: %d", frameRate.fps, model.frame++);
350 surface.WriteTextf(0,20, "Press H to toggle help screen");