FreeBasic
Вы хотите отреагировать на этот пост ? Создайте аккаунт всего в несколько кликов или войдите на форум.

Ninfa3D нужна помосчь

Участников: 2

Перейти вниз

Ninfa3D нужна помосчь Empty Ninfa3D нужна помосчь

Сообщение  Vicmad Пт Янв 08, 2010 1:47 am

Здравствуйте.
Вчера открыл для себя FreeBasic и настолько он мне показался замечательным, ну прям на столько на сколько Бэйсик может замечательным быть. Так как своего вещества не хватит написать свой 3д движек для создания игрушек в свободное время, а покупать пока нет смысла не денег, наткнулся на такую красивую весчь, по крайне мере по примерам, Ninfa3D. Установил, все примеры работают. Принялся за творчество, сам я "неплохо" программирую на Blitz3D потому несмотря на отсутствие туториолов все казалось несложным, но на первом проекте застопорился с управлением. Прошу глянуть на мой несложный код гдя я пытаюсь реализовать самостоятельное управление камерой, тоесть камеры созданной функцией CreateCamera().

Код:
#include "Ninfa3d.bi"

Dim Shared rotY As Integer
Dim Shared camera As nCAMERA
Dim tcube As nMesh
dim plane As nMESH
Dim tex1 As nTEXTURE
Dim light01 As nLIGHT

'Enable vertical synch.
EnableVsync()


'Starts the Ninfa3D Engine
InitEngine(640,480,32,0)
   BackGroundColor(18,108,218)'Background Color
   AmbientLight(32,32,32)'Ambient color

tcube=createmeshcube()
meshCastShadow(tcube)


'Create a camera
camera = CreateCamera()
positionentity(camera,0,0,-20)'Position


'Creates the lights
light01 = CreateLight()
   positionentity(light01,0,8,-42)' Position
   LightRadius(light01,175)' Radius of the light


rotY=entityYaw(camera)

While (EngineRun())
   BeginScene()
      If KeyHit(KEY_ESCAPE) Then CloseEngine()   
      If keyDown(KEY_R) Then PositionEntity(light01,entityX(light01)-3,entityy(light01),entityz(light01))
      If keyDown(KEY_T) Then PositionEntity(light01,entityX(light01)+3,entityy(light01),entityz(light01))
      If keydown(KEY_W) Then moveEntity (camera,0,0,+1)
      If keydown(KEY_S) Then moveEntity (camera,0,0,-1)
      If keydown(KEY_Q) Then positionentity (camera,entityx(camera),entityy(camera)+1,entityz(camera))
      If keydown(KEY_E) Then positionentity (camera,entityx(camera),entityy(camera)-1,entityz(camera))            
      If keydown(KEY_A) Then rotY=rotY-1
      If keydown(KEY_D) Then roty=rotY+1
      rotateentity (camera,0,rotY,0)
      Print rotY
      updateEngine(1)
   EndScene()
Wend
EndEngine()

Запустив это вы увидите что при движении камеры возникают глюки (исчезновение куба, смещение и тп), как я тока не пытался разобраться, методы очень аналогичны Блиц3Д"вским, но чтото не так. Это мой глюк или глюк программы? Пробовал запустить нимфу на БлицМаксе там такиеже приходы.

Плиз Хелп Crying or Very sad
Vicmad
Vicmad

Сообщения : 14
Дата регистрации : 2010-01-08

Вернуться к началу Перейти вниз

Ninfa3D нужна помосчь Empty Re: Ninfa3D нужна помосчь

Сообщение  Myster Вс Янв 10, 2010 3:51 pm

Сам пользуюсь нинфой, тоже сталкивался с этой проблемой. И мне кажется это с движком что-то. Камера вечно скачет куда-то, при поворотах смотрит куда ей хочется)) отклоняется, как ни крути. Сам пока не решил что с этим делать) Можно попробовать применять fps камеру, ибо она более стабильна, но мне кажется ниче не выйдет) Я пока стараюсь переменные менять понемногу, чтобы камера не скакала))
+Я на форуме нинфы поднимал вопрос: нельзя ли реализовать как в блице, чтобы команда rotate имела доп.параметр, который будет определять относительно мира или относительно текущего положения будет вертеться объект. Но автор упрям в этом деле, не хочет даж равнять свой двиг с блицем))) Короче неудобства есть, приходится обходить Rolling Eyes
О проблеме: еще я пробую использовать CameraTarget
то есть вначале создаю доп.объект (цель)
Код:
target=CreateMeshCube()
  ScaleMesh(target,1,1,1)
  EntityParent(target,player)
Типа того. Привязываю в игроку. Затем в цикле использую:
CameraTarget(camera,EntityX(target),EntityY(target),EntityZ(target))
Этот target просто в некоторой степени позволяет башке камеры не смотреть куда попало))) Хотя она все равно назойлива и немного скачет)
ПС: Кстати, у тебя вроде старая версия, да?) У мя версия F, приходится дописывать "light01 = CreateLight(LGT_POINT)"
ППС: И ваще блин тоже не знаю че делать, автор кажись забил на нинфу и дальше бесплатную версию дорабатывать не будет. Передо мной стал выбор, что использовать: версию E (одна из успешных), но в ней reflection глючит, или F, в которой reflection в порядке, но балин шейдеры вертексные стали((
Myster
Myster

Сообщения : 29
Дата регистрации : 2008-08-21
Возраст : 35
Откуда : Мытищи МО

http://www.wind-team.com

Вернуться к началу Перейти вниз

Ninfa3D нужна помосчь Empty Re: Ninfa3D нужна помосчь

Сообщение  Vicmad Вс Янв 10, 2010 4:08 pm

Блин, это так печально, тока казалось бы нашел то что мне подходит и вроде как снова потерял Crying or Very sad
Я пытался вручную привязать камеру через уравнения вращения вокруг объекта, но пока не получаеться.
Насчет версии не знаю, я недавно ее скачал с офф сайта, по идее должна быть последней. В текстовых файлах упоминается 1.0с.

Походу придется забить на нимфу и углубиться в изучение ФБ, мож когда нибудь появится полноценный 3д движек для него.
Vicmad
Vicmad

Сообщения : 14
Дата регистрации : 2010-01-08

Вернуться к началу Перейти вниз

Ninfa3D нужна помосчь Empty Re: Ninfa3D нужна помосчь

Сообщение  Myster Вс Янв 10, 2010 4:18 pm

Тут)
http://www.mysticrealitystudio.comuv.com/1_6_Downloads.html
Последняя F, а если хочешь, могу скинуть версию E, которая в чем-то, мне кажется, даже лучше чем F. А версия C уже старенькая Smile
тока казалось бы нашел то что мне подходит и вроде как снова потерял
Полностью понимаю твои чувства) Но не все потеряно, я вот тоже ищу алтернативы) Уверен на сайте fb ты не упустил irrlicht wrapper, и он кстати уже порядочно прокачался с некоторой поры, есть заметные улучшения, его можно в параллели использовать) хотя есть минус, нужно openal подключать, тк irrklang платен для коммерч.проектов)
Однако даже с такой забагованностью нинфы игру сделать реально, я с нинфы пока не слазию))
Myster
Myster

Сообщения : 29
Дата регистрации : 2008-08-21
Возраст : 35
Откуда : Мытищи МО

http://www.wind-team.com

Вернуться к началу Перейти вниз

Ninfa3D нужна помосчь Empty Re: Ninfa3D нужна помосчь

Сообщение  Vicmad Вс Янв 10, 2010 4:36 pm

По указанной ссылке я и скачивал, а сейча почему то файл там недоступен. Может это временно?

Кто то может посмотреть кодик посвященный вращению камеры вокруг оъекта?
Код:

#Include "Ninfa3d.bi"

'Enable vertical synch.
EnableVsync()


'Starts the Ninfa3D Engine

Dim Shared camera As nCamera
Dim Shared light01 As nLight
Dim plane As nMesh
Dim Shared camp As nmesh
Dim Shared cam As nMesh
Dim Shared camX As Single
Dim Shared camZ As Single

InitEngine(640,480,32,0)
   BackGroundColor(18,108,218)'Background Color
   AmbientLight(32,32,32)'Ambient color

plane=createMeshCube()
scalemesh (plane,20,1,20)

camp=createmeshcube()
positionentity camp,0,2,0
scalemesh (camp,2,3,2)
entitycolor camp,200,200,100

cam=createMeshCube()
scalemesh cam,1,1,3
entitycolor (cam,100,200,90)
camX = 0
camZ=-10

positionentity (cam,camX,5,camZ)
Print sin(entityyaw(camP))
'Create a camera
camera = CreateCamera()
positionentity(camera,0,15,-15)'Position
rotateentity camera,0,10,0

'Creates the lights
light01 = CreateLight()
   positionentity(light01,0,28,-142)' Position
   LightRadius(light01,175)' Radius of the light


While (EngineRun())
   BeginScene()
   
      If KeyHit(KEY_ESCAPE) Then CloseEngine()   
      If KeyDown(KEY_LEFT) Then turnentity(camp,0,-1,0)
      If KeyDown(KEY_Right) Then turnentity(camp,0,1,0)
      If keydown(key_left) Or keydown(KEY_RIGHT)  Then
         camX = (entityX(cam)-entityX(camp))*cos(entityYaw(camp)) - (entityZ(cam)-entityZ(camp))*sin(entityYaw(camP))
         camZ=(entityZ(cam)-entityZ(camp))*cos(entityYaw(camp)) + (entityX(cam)-entityX(camp))*sin(entityYaw(camP))
         positionentity (cam,camX,3,camZ)   
      EndIf
      
      text 10,10,""&entityz(cam),0,0
      text 50,10,""&entityx(cam),0,0
      text 10,30,""&camZ,0,0
      text 10,50,""&camX,0,0
      text 10,70,"camP YAW"&entityYaw(camp),0,0   
      
      updateEngine(0.1)
   EndScene()
Wend
EndEngine()

Тут я пытаюсь вручную создать вращение камеры вокруг объекта по формулам вычесления координат поворото точки вокруг точки:
newx = (x-startx)*cos(theta) - (y-starty)*sin(theta) + startx
newy = (y-starty)*cos(theta) + (x-startx)*sin(theta) + starty


Куб (в будущем - камера) крутиться вокруг нужного куба при его повороте но не одновременна а опять с приходом, мож я не так уравнения составил Shocked или это очередная недаделка Нимфы Question
Vicmad
Vicmad

Сообщения : 14
Дата регистрации : 2010-01-08

Вернуться к началу Перейти вниз

Ninfa3D нужна помосчь Empty Re: Ninfa3D нужна помосчь

Сообщение  Myster Вс Янв 10, 2010 9:20 pm

Хм, в формулу почти вник) Чувствуется перспектива с поворотом))
Попробуй как я делаю, впиши вначале эти вещи:

В начале объявить Пи и синус, косинус
Const PI As Double = 3.1415926535897932
dim shared as single vector_sin,vector_cos

Потом в цикле постоянно вычислять "поворот" (ну вектор как бы по единичной окружности, где cos=1, если смотришь вперед, -1, если смотришь назад, с синусом аналогично):
vector_sin=sin(EntityYaw(player)*PI/180)
vector_cos=cos(EntityYaw(player)*PI/180)

Сам их уже вписал в твой пример, пытаюсь понять в чем дело)) ..Я ж нуб)
Myster
Myster

Сообщения : 29
Дата регистрации : 2008-08-21
Возраст : 35
Откуда : Мытищи МО

http://www.wind-team.com

Вернуться к началу Перейти вниз

Вернуться к началу

- Похожие темы

 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения