Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 3D-программирование

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 24.02.2006, 07:46   #1
Conan Fedr
Нуждающийся
 
Регистрация: 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
Conan Fedr
Нуждающийся
 
Регистрация: 08.02.2006
Сообщений: 75
Написано 0 полезных сообщений
(для 0 пользователей)
И еще кое что раз уже начал задавать вопросы как убрать эйджи которые делят 4вертексные полигоны на триугольники .
(Offline)
 
Ответить с цитированием
Старый 24.02.2006, 08:34   #3
Conan Fedr
Нуждающийся
 
Регистрация: 08.02.2006
Сообщений: 75
Написано 0 полезных сообщений
(для 0 пользователей)
Мне кажется все дело в типах вот сижу и думаю . Сейчас попытался получить инфу о опеределенном обьекте - ничего невыходин хотя я хендл сохранял , наверно я както с типом непрвильно работаю .
(Offline)
 
Ответить с цитированием
Старый 24.02.2006, 12:01   #4
Guest
 
Сообщений: n/a
Насчет сетки - рендер вручную, линиями. Либо квад с альфа-тексой затайленой.
Да, ошибка может быть в несоответствии алгоритма сохранения и загрузки, округления флоата вследствие юзанья целого, несоотвествие структур.
 
Ответить с цитированием
Старый 24.02.2006, 12:48   #5
Maxus
ПроЭктировщик
 
Регистрация: 17.02.2006
Сообщений: 144
Написано 13 полезных сообщений
(для 36 пользователей)
Originally posted by Guest@24.2.2006, 12:01
Насчет сетки - рендер вручную, линиями. Либо квад с альфа-тексой затайленой.
Да, ошибка может быть в несоответствии алгоритма сохранения и загрузки, округления флоата вследствие юзанья целого, несоотвествие структур.
Покажи данные которые ты читаешь из файла в живую...
(Offline)
 
Ответить с цитированием
Старый 24.02.2006, 16:10   #6
Guest
 
Сообщений: n/a
Покажи данные которые ты читаешь из файла в живую...
Ты это мне?
Я Платон , если что))
 
Ответить с цитированием
Старый 24.02.2006, 16:58   #7
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
А зачем ты сначала создаешь объект в типе:
[blitz] CamNode\CamMarker = CopyEntity(CameraMarker)[/blitz]

а потом удаляешь сам тип оставляя объет
[blitz]Delete CamNode[/blitz]

хэндл объекта ты точно потерял...
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 24.02.2006, 17:06   #8
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
И еще спросить хотел, почему ты не пользуешься стандартными функциями чтения из файла?

[blitz]ReadInt (filehandle/stream)
ReadFloat (filehandle/stream)[/blitz]

к тому же я не понял из какого файла ты данные читаешь

еще убедись что:
[blitz]FRead()[/blitz]
объявлена как:
[blitz]FRead#()[/blitz]
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 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)
 
Ответить с цитированием
Старый 24.02.2006, 19:51   #10
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 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]

остальное посмотрю, скинь файл для тестов который ты загружаешь
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 24.02.2006, 19:58   #11
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 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++, за исключением некоторых возможностей...
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 24.02.2006, 20:23   #12
Conan Fedr
Нуждающийся
 
Регистрация: 08.02.2006
Сообщений: 75
Написано 0 полезных сообщений
(для 0 пользователей)
Я вообще непонимаю зачем их переменные типов сразу после использования , почему их неудалить в конце программы . Я просто на блитз недавно перешел , а про то что удалять надо поле использования в статье прочитал .

PAX спасибо .
(Offline)
 
Ответить с цитированием
Старый 24.02.2006, 22:31   #13
Conan Fedr
Нуждающийся
 
Регистрация: 08.02.2006
Сообщений: 75
Написано 0 полезных сообщений
(для 0 пользователей)
Такс вот 2 файла , в том который мало весит 9 записей но отображается почемуто только одна камера хотя у других координаты тоже нормальные.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка координат Mr_F_ Алгоритмика 5 21.06.2009 00:28
Как разделить мир с подгрузкой зон,как в Морровинде? Program23 3D-программирование 23 03.06.2009 16:56
Преобразование координат в D3D mr.DIMAS C++ 2 13.10.2008 18:04
трабла jimon Алгоритмика 11 03.03.2006 02:17
вычисление UV координат Платон Разработка LIB 2 26.01.2006 22:17


Часовой пояс GMT +4, время: 13:55.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com