Ninfa3D нужна помосчь
Участников: 2
Страница 1 из 1
Ninfa3D нужна помосчь
Здравствуйте.
Вчера открыл для себя FreeBasic и настолько он мне показался замечательным, ну прям на столько на сколько Бэйсик может замечательным быть. Так как своего вещества не хватит написать свой 3д движек для создания игрушек в свободное время, а покупать пока нет смысла не денег, наткнулся на такую красивую весчь, по крайне мере по примерам, Ninfa3D. Установил, все примеры работают. Принялся за творчество, сам я "неплохо" программирую на Blitz3D потому несмотря на отсутствие туториолов все казалось несложным, но на первом проекте застопорился с управлением. Прошу глянуть на мой несложный код гдя я пытаюсь реализовать самостоятельное управление камерой, тоесть камеры созданной функцией CreateCamera().
Запустив это вы увидите что при движении камеры возникают глюки (исчезновение куба, смещение и тп), как я тока не пытался разобраться, методы очень аналогичны Блиц3Д"вским, но чтото не так. Это мой глюк или глюк программы? Пробовал запустить нимфу на БлицМаксе там такиеже приходы.
Плиз Хелп
Вчера открыл для себя 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Д"вским, но чтото не так. Это мой глюк или глюк программы? Пробовал запустить нимфу на БлицМаксе там такиеже приходы.
Плиз Хелп
Vicmad- Сообщения : 14
Дата регистрации : 2010-01-08
Re: Ninfa3D нужна помосчь
Сам пользуюсь нинфой, тоже сталкивался с этой проблемой. И мне кажется это с движком что-то. Камера вечно скачет куда-то, при поворотах смотрит куда ей хочется)) отклоняется, как ни крути. Сам пока не решил что с этим делать) Можно попробовать применять fps камеру, ибо она более стабильна, но мне кажется ниче не выйдет) Я пока стараюсь переменные менять понемногу, чтобы камера не скакала))
+Я на форуме нинфы поднимал вопрос: нельзя ли реализовать как в блице, чтобы команда rotate имела доп.параметр, который будет определять относительно мира или относительно текущего положения будет вертеться объект. Но автор упрям в этом деле, не хочет даж равнять свой двиг с блицем))) Короче неудобства есть, приходится обходить
О проблеме: еще я пробую использовать CameraTarget
то есть вначале создаю доп.объект (цель)
CameraTarget(camera,EntityX(target),EntityY(target),EntityZ(target))
Этот target просто в некоторой степени позволяет башке камеры не смотреть куда попало))) Хотя она все равно назойлива и немного скачет)
ПС: Кстати, у тебя вроде старая версия, да?) У мя версия F, приходится дописывать "light01 = CreateLight(LGT_POINT)"
ППС: И ваще блин тоже не знаю че делать, автор кажись забил на нинфу и дальше бесплатную версию дорабатывать не будет. Передо мной стал выбор, что использовать: версию E (одна из успешных), но в ней reflection глючит, или F, в которой reflection в порядке, но балин шейдеры вертексные стали((
+Я на форуме нинфы поднимал вопрос: нельзя ли реализовать как в блице, чтобы команда rotate имела доп.параметр, который будет определять относительно мира или относительно текущего положения будет вертеться объект. Но автор упрям в этом деле, не хочет даж равнять свой двиг с блицем))) Короче неудобства есть, приходится обходить
О проблеме: еще я пробую использовать 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 в порядке, но балин шейдеры вертексные стали((
Re: Ninfa3D нужна помосчь
Блин, это так печально, тока казалось бы нашел то что мне подходит и вроде как снова потерял
Я пытался вручную привязать камеру через уравнения вращения вокруг объекта, но пока не получаеться.
Насчет версии не знаю, я недавно ее скачал с офф сайта, по идее должна быть последней. В текстовых файлах упоминается 1.0с.
Походу придется забить на нимфу и углубиться в изучение ФБ, мож когда нибудь появится полноценный 3д движек для него.
Я пытался вручную привязать камеру через уравнения вращения вокруг объекта, но пока не получаеться.
Насчет версии не знаю, я недавно ее скачал с офф сайта, по идее должна быть последней. В текстовых файлах упоминается 1.0с.
Походу придется забить на нимфу и углубиться в изучение ФБ, мож когда нибудь появится полноценный 3д движек для него.
Vicmad- Сообщения : 14
Дата регистрации : 2010-01-08
Re: Ninfa3D нужна помосчь
Тут)
http://www.mysticrealitystudio.comuv.com/1_6_Downloads.html
Последняя F, а если хочешь, могу скинуть версию E, которая в чем-то, мне кажется, даже лучше чем F. А версия C уже старенькая
Однако даже с такой забагованностью нинфы игру сделать реально, я с нинфы пока не слазию))
http://www.mysticrealitystudio.comuv.com/1_6_Downloads.html
Последняя F, а если хочешь, могу скинуть версию E, которая в чем-то, мне кажется, даже лучше чем F. А версия C уже старенькая
Полностью понимаю твои чувства) Но не все потеряно, я вот тоже ищу алтернативы) Уверен на сайте fb ты не упустил irrlicht wrapper, и он кстати уже порядочно прокачался с некоторой поры, есть заметные улучшения, его можно в параллели использовать) хотя есть минус, нужно openal подключать, тк irrklang платен для коммерч.проектов)тока казалось бы нашел то что мне подходит и вроде как снова потерял
Однако даже с такой забагованностью нинфы игру сделать реально, я с нинфы пока не слазию))
Re: Ninfa3D нужна помосчь
По указанной ссылке я и скачивал, а сейча почему то файл там недоступен. Может это временно?
Кто то может посмотреть кодик посвященный вращению камеры вокруг оъекта?
Тут я пытаюсь вручную создать вращение камеры вокруг объекта по формулам вычесления координат поворото точки вокруг точки:
newx = (x-startx)*cos(theta) - (y-starty)*sin(theta) + startx
newy = (y-starty)*cos(theta) + (x-startx)*sin(theta) + starty
Куб (в будущем - камера) крутиться вокруг нужного куба при его повороте но не одновременна а опять с приходом, мож я не так уравнения составил или это очередная недаделка Нимфы
Кто то может посмотреть кодик посвященный вращению камеры вокруг оъекта?
- Код:
#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
Куб (в будущем - камера) крутиться вокруг нужного куба при его повороте но не одновременна а опять с приходом, мож я не так уравнения составил или это очередная недаделка Нимфы
Vicmad- Сообщения : 14
Дата регистрации : 2010-01-08
Re: Ninfa3D нужна помосчь
Хм, в формулу почти вник) Чувствуется перспектива с поворотом))
Попробуй как я делаю, впиши вначале эти вещи:
В начале объявить Пи и синус, косинус
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)
Сам их уже вписал в твой пример, пытаюсь понять в чем дело)) ..Я ж нуб)
Попробуй как я делаю, впиши вначале эти вещи:
В начале объявить Пи и синус, косинус
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)
Сам их уже вписал в твой пример, пытаюсь понять в чем дело)) ..Я ж нуб)
Страница 1 из 1
Права доступа к этому форуму:
Вы не можете отвечать на сообщения
|
|