Нуждающийся
Регистрация: 08.02.2006
Сообщений: 75
Написано 0 полезных сообщений (для 0 пользователей)
|
Щя выложу полный код , а пока структура файла :
Файл состоит из записей , каждая размером по 36 байт , запись делится на 9 полей по 4 байта
1 4байта - ID
2 4байта - я точно незнаю но это и ненужно 
3,4,5 4байта - XYZ положение
6,7,8,9 4 байт - Угол XYZW ( в кватернионах )
2PAX
Я пока неочень понял как типы работают . Напиши пожалуйста как исправить это дело .
Вот код :

; Включения
Include "XUI2.bb"
Include "Quaternions.bb"
; Константы
Const APP_TITLE$ = "-$[CAMedit by Conan Fedr]$- ЛВ Delovepers Group"
; Глобальные переменные
Global tool_window%
Global tool_label_name%,tool_group_actions%
Global tool_group_zap%,tool_group_coords%
Global camFile%,camPiv%
; Тип записи камеры
Type TCamNode
Field Id%
Field Hz%
Field PosX#
Field PosY#
Field PosZ#
Field Rot.Rotation
Field CamMarker%
End Type
; Инициализация графического режима
Graphics3D 800,600,32,2
SetBuffer BackBuffer()
HidePointer()
AppTitle(APP_TITLE)
; Инициализация интерфейса
XUI2_Init("XUI2_SKINS\XUI2_WINXP_LUNA_S.xuiskin",True,False,True,"ENG")
XUI2_InitWindowSnap(True,5)
; Построение шаблона сцены
SceneGrid = LoadMesh("grid.3ds")
Global CameraMarker = LoadMesh("cam_marker.3ds")
ScaleEntity CameraMarker,0.3,0.3,0.3
HideEntity(CameraMarker)
Global Camera = CreateCamera()
PositionEntity Camera,0,5,0
CameraClsColor Camera,50,150,255
Light = CreateLight()
; Вызовы пользовательских функций
CreateInterface()
ReadCam("test.cam")
; Основной цикл
Repeat
Cls
If KeyDown(200) Then MoveEntity Camera,0,0,1
If KeyDown(208) Then MoveEntity Camera,0,0,-1
If KeyDown(203) Then TurnEntity Camera,0,1,0
If KeyDown(205) Then TurnEntity Camera,0,-1,0
If KeyDown(17) Then TurnEntity Camera,-1,0,0
If KeyDown(31) Then TurnEntity Camera,1,0,0
UseCamera()
UpdateWorld
WireFrame 1
RenderWorld
XUI2_Update()
Text 220,20,"Mouse X : "+MouseX()+" Mouse Y : "+MouseY()
Text 220,30,"Picked Entity : "+PickedEntity()
Flip
Forever
; Функция создания интерфейса
Function CreateInterface()
tool_window = XUI2_Window(0,0,200,600,"-$[Tools]$-","",0,1+4)
tool_label_name = XUI2_Label(tool_window,87,10,"Tools",4,1)
tool_group_zap = XUI2_GroupBox(tool_window,10,30,180,200,".cam Nodes",0,0)
tool_group_coords = XUI2_GroupBox(tool_window,10,230,180,250,"Coordinates",0,0)
tool_group_actions = XUI2_GroupBox(tool_window,10,480,180,110,"Actions",0,0)
End Function
; Функция чтения cam файла
Function ReadCam(filename$)
Local SizFile%
camFile = OpenFile(filename)
SizFile = FileSize(filename)
For i = 1 To SizFile / 36
CamNode.TCamNode = New TCamNode
CamNode\Rot.Rotation = New Rotation
Quatr.Quat = New Quat
CamNode\Id = IRead()
CamNode\Hz = IRead()
CamNode\PosX = FRead()
CamNode\PosY = FRead()
CamNode\PosZ = FRead()
Quatr\x = FRead()
Quatr\y = FRead()
Quatr\z = FRead()
Quatr\w = FRead()
CamNode\CamMarker = CopyEntity(CameraMarker)
PositionEntity CamNode\CamMarker,CamNode\PosX,CamNode\PosY,CamNode\PosZ
QuatToEuler(CamNode\Rot,Quatr)
RotateEntity CamNode\CamMarker,CamNode\Rot\yaw,CamNode\Rot\roll,CamNode\Rot\Pitch
EntityPickMode CamNode\CamMarker,2
Delete Quatr
Delete CamNode
Next
;RuntimeError(i)
End Function
; Функция чтения float'a
Function FRead()
Return ReadFloat(camFile)
End Function
; Функция чтения int'a
Function IRead()
Return ReadInt(camFile)
End Function
Function UseCamera()
Local ClickedEntity%
If MouseDown(1) Then ClickedEntity = CameraPick(Camera,MouseX(),MouseY())
If MouseDown(1) And KeyDown(56)
TurnEntity Camera, MouseYSpeed(),0,0
TurnEntity Camera, 0,-MouseXSpeed(),0,1
;MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
EndIf
If MouseZSpeed() = 1
MoveEntity Camera,0,0,-3
EndIf
If MouseZSpeed() = -1
MoveEntity Camera,0,0,3
EndIf
End Function
|