Показать сообщение отдельно
Старый 24.02.2006, 19:46   #9
Conan Fedr
Нуждающийся
 
Регистрация: 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
(Offline)
 
Ответить с цитированием