;- Top ; ------------------------------------------------------------ ; ; PureBasic - Mesh (Skeleton Animation) ; ; (c) 2002 - Fantaisie Software ; ; ------------------------------------------------------------ ; #IncPath$="C:\Program Files\PB42\Projects\Dialogs\" IncludeFile #IncPath$+"Screen3DRequester.pbi" IncludeFile "C:\Program Files\PB42\Projects\imports\LoadMS3D.pbi" Define.f KeyX, KeyY, MouseX, MouseY #RobotMesh = 0 #RobotTexture = 0 #Robot = 0 Procedure FileLoadMesh() FN$=OpenFileRequester("Select a model to view","Robot.mesh","Model Files |*.mesh;*.txt|All Files|*.*",0) If FN$ Add3DArchive(GetPathPart(FN$),#PB_3DArchive_FileSystem) If UCase(GetExtensionPart(FN$))="MESH" If LoadMesh(#RobotMesh,FN$) ProcedureReturn 1 Else MessageRequester("Model Error","Unable to load mesh "+Chr(10)+FN$) ProcedureReturn 0 EndIf ElseIf UCase(GetExtensionPart(FN$))="TXT" If LoadMS3D(FN$,#RobotMesh,1) ProcedureReturn 1 Else MessageRequester("Model Error","Unable to load file "+Chr(10)+FN$) EndIf Else MessageRequester("Model Error","Unknown file type"+Chr(10)+FN$,0) ProcedureReturn 0 EndIf EndIf EndProcedure Procedure FileLoadMaterial() FN$=OpenFileRequester("Select a texture to use","r2skin.jpg","JPG |*.JPG|PNG|*.PNG|Textures|*.JPG;*.PNG;*.TGA|All Files|*.*",0) If FN$ If LoadTexture(#RobotTexture, FN$) CreateMaterial(0, TextureID(#RobotTexture)) Else MessageRequester("Invalid Texture","Unable to load texture "+Chr(10)+FN$,0) EndIf EndIf EndProcedure Procedure FileLoadEntity() If FileLoadMesh() FileLoadMaterial() CreateEntity(#Robot, MeshID(#RobotMesh), MaterialID(0) ) AnimateEntity(#Robot, "1") EndIf EndProcedure If InitEngine3D() Add3DArchive(#ExamplePath$+"Data\" , #PB_3DArchive_FileSystem) Add3DArchive(#ExamplePath$+"Data\Skybox.zip", #PB_3DArchive_Zip) InitSprite() InitKeyboard() ;InitMouse() ;Parse3DScripts() If Screen3DRequester("Model Viewer") LoadMesh (#RobotMesh , "Robot.mesh") LoadTexture(#RobotTexture, "r2skin.jpg") CreateMaterial(0, TextureID(#RobotTexture)) CreateEntity(#Robot, MeshID(#RobotMesh), MaterialID(0)) ;EntityMaterial(#Robot, MaterialID(0)) AnimateEntity(#Robot, "Walk") ;DisableMaterialLighting(0, 1) ;MaterialAmbientColor(0, RGB(100, 100, 100)) ;MaterialSpecularColor(0, RGB(255, 255, 255)) ;ScrollMaterial(0, 0.15, 0, 1) CreateLight(0, RGB(0,0,255), 100.0, 0, 0) LightSpecularColor(0, RGB(255, 0, 0)) SkyBox("desert07.jpg") CreateCamera(0, 0, 0, 100, 100) CameraLocate(0,0,0,100) ;CameraBackColor(0, RGB(0, 0, 255)) Repeat If Screen3DEvents() ;- load FileLoadEntity() EndIf ClearScreen(RGB(0, 0, 0)) If ExamineKeyboard() If KeyboardPushed(#PB_Key_Left) KeyX = -1 ElseIf KeyboardPushed(#PB_Key_Right) KeyX = 1 Else KeyX = 0 EndIf If KeyboardPushed(#PB_Key_Up) KeyY = -1 ElseIf KeyboardPushed(#PB_Key_Down) KeyY = 1 Else KeyY = 0 EndIf If KeyboardPushed(#PB_Key_PageUp) RollZ = 3 Else RollZ = 0 EndIf If KeyboardPushed(#PB_Key_Add) Frame.f+0.005 EndIf EndIf ;If ExamineMouse() ; MouseX = -MouseDeltaX()/10 ; MouseY = -MouseDeltaY()/10 ;EndIf RA.f + 1 WrapValue(RA) RotateEntity(#Robot, RA, 0, 0) ;RotateCamera(0, MouseX, MouseY, RollZ) MoveCamera (0, KeyX, 0, KeyY) RenderWorld() Screen3DStats() FlipBuffers() Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1 EndIf Else MessageRequester("Error", "The 3D Engine can't be initialized",0) EndIf End