Ir al contenido

publicidad

Foto

Ninfa3D. Programación en FreeBASIC


Este tema ha sido archivado. Esto significa que no puedes responder en este tema.
2 respuestas en este tema

  • IsGreen

  • Neonate

  • vida restante: 100%
  • Registrado: 12 ene 2009
  • Mensajes: 73
#1

Escrito 14 mayo 2009 - 00:33

Imagen Enviada

Saludos foro, presento un motor de juego gratuito que seguramente facilitará la programación de videojuegos a la mayoría, ya que es posible realizar la demo de un videojuego desarrollando código en BASIC, exactamente FREEBASIC, aunque también está prevista una edición para C++ :) .

Pagina oficial: http://www.mysticrea...index.php?p=4_1
Foro: http://www.mysticrea...omuv.com/forum/



CARACTERISTICAS

Basico

Usa Irrlicht Engine como base para los graficos.
Fisica proporcionada por Newton 2.0 Archemedia.
OpenAL se utiliza para proporcionar compatibilidad con Windows XP y Windows Vista, ademas de sonido 2D y 3D.
Todo en una .DLL que ocupa menos de 2MB!!!.


Renderizado

Renderizado rapido de mallas con OpenGL.
Antialiasing.
Shaders 1.0 - 3.0.
Sombras dinamicas utilizando el stencil buffer.
Multiple vistas (para modos multijugador o vistas de camara).


Texturizado

Basica, Multi-textura, Bump-, Normal-, Parallax-, Specular Mapping.
Formatos de textura soportados: .bmp, .jpg, .pcx, .png, .pm, .psd, .tga y .wal.


Fisicas

Fisica basica, Detección de colisión, cuerpo rigido.
Simulacion de cuerpos rigidos rapida y precisa con soporte para esferas, cajas, cilindros, cuerpos convexos y mallas formadas por triangulos.
Soporta uniones de tipo bola, bisagra, deslizante y universales. (porximamente)
Vehiculos basados en fisicas con soporte para cualquier numero y configuracion de ruedas. (porximamente)


Mallas

Animacion de esqueletos, Morphing y mezcla de animaciones (Blending).
Formatos soportados: .irr, .irrmesh, .3ds, .b3d, .obj, .lwo, .xml, .dae, .x, .ms3d, .mesh, .my3D, .lmts, .bsp, .md2, .md3, .dmf, .oct, .csm, .stl.
Las mallas son linealmente interpoladas de un frame al siguiente.
Interseccion y colision de mallas.


Shaders

Vertex, Pixel, Alto nivel.
Soporta vertex y pixel shaders ARB y alto-nivel escrito en GLSL.



Sonido

Soporta archivos WAV y OGG.
Sonido 2D/3D.


Lenguajes

FreeBASIC.
C++.


De creación reciente y en continuo desarrollo, que incluye la documentación en perfecto español. Imagen descriptiva de la documentación:

Imagen Enviada


Algunas capturas de la demos incluidas en la SDK:

http://img24.imagesh...?g=32126946.png

Imagen EnviadaImagen Enviada
Imagen EnviadaImagen Enviada
Imagen EnviadaImagen Enviada
Imagen EnviadaImagen Enviada
Imagen EnviadaImagen Enviada
Imagen Enviada


INSTALACION:

-Descargar compilador FREEBASIC: http://sourceforge.n...use_mirror=nfsi

-Descargar IDE FBIDE: http://sourceforge.n...use_mirror=nfsi

-Descargar ultima version Ninfa3D y ejemplos: http://www.mysticrea..._Descargas.html

Comenzamos instalando el compilador FREEBASIC en el directorio raíz, es decir, quedaría C:\FREEBASIC.

Instalamos el FBIDE en la misma ruta, es decir, C:\FREEBASIC

Extraemos los archivos del .ZIP donde se encuentra el motor de juego y copiamos el archivo Ninfa3D.bi en la carpeta C:\FREEBASIC\inc, y a continuación, el archivo Ninfa3D.dll en la ruta C:\FREEBASIC\lib\win32, y también, en C:\FREEBASIC\examples.

Finalmente, extraemos el .ZIP que contiene los ejemplos en C:\FREEBASIC\examples.

Ejecuta el FBIDE para abrir los ejemplos anteriores.


El compilador FREEBASIC no incluye una IDE de programación propia y podemos seleccionar varios. Aquí encontrarás instrucciones de la instalación utilizando como IDE a FbEdit: http://www.mysticrea...c.php?f=12&t=50

  • Ellolo17

  • Heraldo de la Muerte

  • vida restante: 100%
  • Registrado: 16 nov 2006
  • Mensajes: 6.208
#2

Escrito 14 mayo 2009 - 10:04

Todo el mundo pone siempre al enano ese en las muestras de sus motores. Lo he visto ya en este, en el Blitz3d, y en otros muchos mas que he visto por ahi ^^

Bueno, pues enlazo este hilo en el indice donde los motores graficos.

Un saludo.

  • IsGreen

  • Neonate

  • vida restante: 100%
  • Registrado: 12 ene 2009
  • Mensajes: 73
#3

Escrito 17 mayo 2009 - 10:17

He desarrollado mi primer código con este nuevo motor, y utilizando un nuevo lenguaje de programacion.

Aunque el nombre del lenguaje de programación, FreeBASIC, nos puede hacer creer que se trata de un lenguaje sencillo, también tiene características de otros lenguajes como C++ ya que puedes utilizar punteros y clases. Todo esto se puede apreciar examinando su documentación desde http://sourceforge.n...use_mirror=nfsi

He comenzado creando una cámara personalizada, que sigue al jugador mientras lo movemos con las teclas WASD o rotamos su eje-Y con el ratón y modificamos la inclinación de la cámara, también con el ratón.

El motor incorpora diferentes tipos de cámara CreateCameraFPS y CreateCameraMaya, aunque creo que no es posible crear el resultado anterior, por esta razón he desarrollado el siguiente código.

[code:1]#Include "Ninfa3d.bi"

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'' DECLARACION DE VARIABLES ''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

' Variables declaradas con Shared, para que puedan ser utilizadas en el bloque
' principal y dentro de los distintos bloques de cada funcion (Sub)

Dim Shared Camara As nCAMERA
Dim Shared meshEnano As nMESH
Dim Shared As Integer posMouseX,posMouseY,CamY

' Variables que son utilizadas solo en el bloque principal. Si se declaran
' varias variables del mismo tipo se utiliza la forma Dim As var1,var2,...
' En cambio, si se declara una sola variable de ese tipo se suele utilizar la
' forma Dim NombreVariable As

Dim lightLuz_Principal As nLIGHT
Dim sprite As nSPRITE

' Declaramos y asignamos valor a la constante PI del tipo double
Const PI As Double = 3.1415926535897932


' Activamos sincronización vertical de pantalla. Mas informacion en documentacion
EnableVsync()

' Iniciamos el motor Ninfa3D con una resolucion de pantalla 1024x768, 32 bits,
' a pantalla completa (1)
InitEngine(1024,768,32,1)
BackGroundColor(128,128,128) 'Color de fondo
AmbientLight(64,64,64) 'Color Luz de Ambiente


' DECLARACION DE FUNCIONES
' ========================

Sub CreateGround() 'Funcion que genera el escenario

' Declaracion de variables Locales. Solo visibles desde el bloque de esta funcion
Dim mesh As nMESH
Dim body As nBODY
Dim As nTEXTURE texture04,texture05

texture04 = LoadTexture("media/wall.jpg")
texture05 = LoadTexture("media/Wood.jpg")

mesh = CreateMeshCube()
ScaleMesh(mesh,512,20,1)
PositionEntity(mesh,0,10,256)
EntityTexture(mesh,texture05,0)
body = CreateBodyCube(512,20,1,0)
PositionEntity(body,0,10,256)

mesh = CreateMeshCube()
ScaleMesh(mesh,1,20,512)
PositionEntity(mesh,256,10,0)
EntityTexture(mesh,texture05,0)
body = CreateBodyCube(1,20,512,0)
PositionEntity(body,256,10,0)

mesh = CreateMeshCube()
ScaleMesh(mesh,512,20,1)
PositionEntity(mesh,0,10,-256)
EntityTexture(mesh,texture05,0)
body = CreateBodyCube(512,20,1,0)
PositionEntity(body,0,10,-256)

mesh = CreateMeshCube()
ScaleMesh(mesh,1,20,512)
PositionEntity(mesh,-256,10,0)
EntityTexture(mesh,texture05,0)
body = CreateBodyCube(1,20,512,0)
PositionEntity(body,-256,10,0)

mesh = CreateMeshPlane(64,8)
EntityTexture(mesh,texture04,0)
body = CreateBodyCube(512,1,512,0)

End Sub

Sub Mover_Camara() ' Situar la camara detras del jugador, tomando como referencia
' la orientacion (Yaw) de la malla del jugador
Dim As Single localX,localZ
localZ=Cos(EntityYaw(meshEnano)+PI)*20
localX=Sin(EntityYaw(meshEnano)+PI)*20
PositionEntity(Camara,localX+EntityX(meshEnano),64,localZ+EntityZ(meshEnano))
CameraTarget(Camara,EntityX(meshEnano),64-CamY,EntityZ(meshEnano))


End Sub

Sub Actualizar_Camara() 'Recoge los movimientos realizados desde el raton
' Los movimientos en el eje X (horizontales) afectan a la orientacion de la malla
' Los movimientos en el eje Y (verticales) afectan al angulo vertical de la camara

Dim As Single Rotacion
Rotacion=(MouseX-posMouseX)*PI/180
TurnEntity(meshEnano,0,Rotacion,0)
if ((MouseY()-posMouseY)>0) And (CamY<20) Then CamY+=1
if ((MouseY()-posMouseY)<0) And (CamY>-20) Then CamY-=1
posMouseX=MouseX
posMouseY=MouseY
Mover_Camara()

End Sub

Sub Mover_malla() ' Recoge la pulsacion de las teclas WASD para mover la malla
' del jugador, considerando la orientacion (Yaw)

Dim As Single angulo,velocidad,localX,localZ'Variables Locales de la funcion
angulo=((KeyDown(KEY_D)-KeyDown(KEY_A))*(PI/2)/(1+(KeyDown(KEY_W))))+((KeyDown(KEY_S))*PI*(1-(KeyDown(KEY_A))*2)/(1+(KeyDown(KEY_D)+KeyDown(KEY_A))*3))
angulo+=EntityYaw(meshEnano)
velocidad=0.5+0.5*(KeyDown(KEY_CONTROL))
localX=Sin(angulo)*velocidad
localZ=Cos(angulo)*velocidad
PositionEntity(meshEnano,localX+EntityX(meshEnano),0,localZ+EntityZ(meshEnano))
Mover_Camara()

End Sub


' Creamos un punto de iluminacion (luz). Ver en documentacion diferentes tipos
lightLuz_Principal = CreateLight()
LightType(lightLuz_Principal,1) 'Tipo de luz
PositionEntity(lightLuz_Principal,0,128,128) 'Posicion
LightCastShadow(lightLuz_Principal) 'Hace que la luz proyecte sombras sobre los
'objetos que tenga activada esta opcion
LightRadius(lightLuz_Principal,256) 'Radio o alcance de la luz

sprite = LoadSprite("media/glow.bmp")
EntityParent(sprite,lightLuz_Principal)
ScaleSprite(sprite,30,30)

meshEnano = LoadMesh("media\dwarf2.b3d")
MeshCastShadow(meshEnano) 'Activar proyeccion de sombras sobre este objeto.
AnimateMesh(meshEnano,1,15,1,30,1) 'Animar la Malla. Ver documentación
PositionEntity(meshEnano,0,0,0) 'Situar la malla en el escenario


CreateGround() 'Llamada a la funcion que genera el escenario (suelo y muro)
Camara = CreateCamera() 'Crear Camara. IMPRESCINDIBLE
Mover_Camara() 'Llamada a la funcion que situa la camara detras del jugador

'Variables utilizadas para comprobar las variaciones en el raton
posMouseX=MouseX
posMouseY=MouseY

'Ocultar puntero del raton
HideMouse()

While(EngineRun)'Devuelve 1 si el motor sigue funcionando.

'Comenzar escena.
BeginScene()
' Si pulsamos la tecla Escape cerramos el motor
If KeyHit(KEY_ESCAPE) Then CloseEngine()

'Si la posicion actual del raton es diferente de la anterior
If (Not posMouseX=MouseX) Or (Not posMouseY=MouseY) Then Actualizar_Camara()

'Si pulsamos WASD
If KeyDown(KEY_W) Or KeyDown(KEY_S) Or KeyDown(KEY_A) Or KeyDown(KEY_D) Then Mover_malla()

'Actualizar motor.
'Cambiando el valor que afectara a la velocidad de actualización de la física
'del juego. Ver documentacion
UpdateEngine(0)

'Finalizar la escena
EndScene()

Wend

'Mostrar puntero del raton
ShowMouse()

'Finalizar motor Ninfa3D
EndEngine()[/code]

Saludos


Este tema ha sido archivado. Esto significa que no puedes responder en este tema.
publicidad