|
3D-программирование Вопросы, касающиеся программирования 3D мира |
24.02.2006, 07:46
|
#1
|
Нуждающийся
Регистрация: 08.02.2006
Сообщений: 75
Написано 0 полезных сообщений (для 0 пользователей)
|
Вообщем я файл состоит из записей в которых хранится угол и координаты камеры я подгружаю и все это в кучу слепливается . Координаты вроде подгружаются проверял RuntimeError'ом . Возможно я что-то нетак с типами делаю ...
Вот скрин :
Вот кусок код
; ------------ Функция подгрузки из 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/10,CamNode\PosY/10,CamNode\PosZ/10
*QuatToEuler(CamNode\Rot,Quatr)
*RotateEntity CamNode\CamMarker,CamNode\Rot\Pitch,CamNode\Rot\yaw,CamNode\Rot\roll
*Delete Quatr
*Delete CamNode
Next
End Function
Фнукции FRead() и IRead() Читают из файла Float и Int соответственно . Памагити :o''
|
(Offline)
|
|
24.02.2006, 07:53
|
#2
|
Нуждающийся
Регистрация: 08.02.2006
Сообщений: 75
Написано 0 полезных сообщений (для 0 пользователей)
|
И еще кое что раз уже начал задавать вопросы как убрать эйджи которые делят 4вертексные полигоны на триугольники .
|
(Offline)
|
|
24.02.2006, 08:34
|
#3
|
Нуждающийся
Регистрация: 08.02.2006
Сообщений: 75
Написано 0 полезных сообщений (для 0 пользователей)
|
Мне кажется все дело в типах вот сижу и думаю . Сейчас попытался получить инфу о опеределенном обьекте - ничего невыходин хотя я хендл сохранял , наверно я както с типом непрвильно работаю .
|
(Offline)
|
|
24.02.2006, 12:01
|
#4
|
|
Насчет сетки - рендер вручную, линиями. Либо квад с альфа-тексой затайленой.
Да, ошибка может быть в несоответствии алгоритма сохранения и загрузки, округления флоата вследствие юзанья целого, несоотвествие структур.
|
|
|
24.02.2006, 12:48
|
#5
|
ПроЭктировщик
Регистрация: 17.02.2006
Сообщений: 144
Написано 13 полезных сообщений (для 36 пользователей)
|
Originally posted by Guest@24.2.2006, 12:01
Насчет сетки - рендер вручную, линиями. Либо квад с альфа-тексой затайленой.
Да, ошибка может быть в несоответствии алгоритма сохранения и загрузки, округления флоата вследствие юзанья целого, несоотвествие структур.
|
Покажи данные которые ты читаешь из файла в живую...
|
(Offline)
|
|
24.02.2006, 16:10
|
#6
|
|
Покажи данные которые ты читаешь из файла в живую...
|
Ты это мне?
Я Платон , если что ))
|
|
|
24.02.2006, 16:58
|
#7
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
А зачем ты сначала создаешь объект в типе:
[blitz] CamNode\CamMarker = CopyEntity(CameraMarker)[/blitz]
а потом удаляешь сам тип оставляя объет
[blitz]Delete CamNode[/blitz]
хэндл объекта ты точно потерял...
|
(Offline)
|
|
24.02.2006, 17:06
|
#8
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
И еще спросить хотел, почему ты не пользуешься стандартными функциями чтения из файла?
[blitz]ReadInt (filehandle/stream)
ReadFloat (filehandle/stream)[/blitz]
к тому же я не понял из какого файла ты данные читаешь
еще убедись что:
[blitz]FRead()[/blitz]
объявлена как:
[blitz]FRead#()[/blitz]
|
(Offline)
|
|
24.02.2006, 19:46
|
#9
|
Нуждающийся
Регистрация: 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)
|
|
24.02.2006, 19:51
|
#10
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Вот явная ошибка:
[blitz]Function FRead()
Return ReadFloat(camFile)
End Function[/blitz]
А надо
[blitz]Function FRead#()
Return ReadFloat(camFile)
End Function[/blitz]
остальное посмотрю, скинь файл для тестов который ты загружаешь
|
(Offline)
|
|
24.02.2006, 19:58
|
#11
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Совет: не используй глобальные переменные там где можно обойтись без них.
Функцию чтения можно написать так:
[blitz]; Функция чтения cam файла
Function ReadCam(filename$)
Local camFile% = OpenFile(filename)
Local SizFile% = FileSize(filename)
For i = 1 To SizFile / 36
CamNode.TCamNode = New TCamNode
CamNode\Rot.Rotation = New Rotation
Quatr.Quat = New Quat
CamNode\Id = ReadInt(camFile)
CamNode\Hz = ReadInt(camFile)
CamNode\PosX = ReadFloat(camFile)
CamNode\PosY = ReadFloat(camFile)
CamNode\PosZ = ReadFloat(camFile)
Quatr\x = ReadFloat(camFile)
Quatr\y = ReadFloat(camFile)
Quatr\z = ReadFloat(camFile)
Quatr\w = ReadFloat(camFile)
CamNode\CamMarker = CopyEntity(CameraMarker)
PositionEntity CamNode\CamMarker,CamNode\PosX,CamNode\PosY,CamNod e\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[/blitz]
типы ы Blitz'е это теже структуры как и в C++, за исключением некоторых возможностей...
|
(Offline)
|
|
24.02.2006, 20:23
|
#12
|
Нуждающийся
Регистрация: 08.02.2006
Сообщений: 75
Написано 0 полезных сообщений (для 0 пользователей)
|
Я вообще непонимаю зачем их переменные типов сразу после использования , почему их неудалить в конце программы . Я просто на блитз недавно перешел , а про то что удалять надо поле использования в статье прочитал .
PAX спасибо .
|
(Offline)
|
|
24.02.2006, 22:31
|
#13
|
Нуждающийся
Регистрация: 08.02.2006
Сообщений: 75
Написано 0 полезных сообщений (для 0 пользователей)
|
Такс вот 2 файла , в том который мало весит 9 записей но отображается почемуто только одна камера хотя у других координаты тоже нормальные.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 02:42.
|