Traducir este blog

PROGRAMAS EN BLITZ BASIC 3D (BLITZ3D)

 PROGRAMAS EN BLITZ3D

Los programas que aparecen aquí eran los que aparecían en la página principal. En la medida en que vaya presentando nuevos programas, los más antiguos los ire trasladando a esta entrada del blog, para quienes miren y busquen por primera vez, puedan encontrar la serie de programas presentados.

PROGRAMA No. 1

1. Las líneas en color naranja son notas de programación dentro del programa; e inician siempre con punto y coma.

2. Las líneas en color azul, son órdenes o comandos de programación en lenguaje Blitz BASIC 3D.

3. El texto en color verde, es una frase que aparece en la pantalla gráfica, en las coordenadas 320, 500.

; ==============================================================

; autor(es): 

; grado: 

; funcion: crea cubo estático con primitiva gráfica

; fecha: agosto-8-2023

; lenguaje: BLITZ3D

; archivo de disco: "primitiva1.bb"

; =============================================================

; crear ventana 3D con x=800, y=600

Graphics3D 800,600

; dibujar en la memoria de pantalla: buffer trasero

SetBuffer BackBuffer()

; crear cámara

camara=CreateCamera()

; crear luz. La entidad cámara se almacena en la variable "luz1"

luz1=CreateLight()

;rotar la luz 30 grados en x

RotateEntity luz1, 30,0,0

; crear cubo 3d con primitiva gráfica: CreateCube() La imagen del cubo se alamacena

; en la variable: "caja1"

caja1= CreateCube()

; posicionar el gráfico "caja1" en: x=-3, y=-2, z=7

PositionEntity caja1,-3,-2,7

; crear bucle infinito con while - wend

; el bucle termina si se pulsa la tecla ESC

; el código de la tecla "ESC" es: 1

While Not KeyHit(1)

   UpdateWorld

   RenderWorld

   Text 320,500, "Dibujo de cubo 3D, estático, sin textura"

   Flip

Wend

End

PROGRAMA No. 2

; ==============================================================

; autor(es):

; grado: 

; funcion: crea esfera estática con primitiva gráfica

; fecha: agosto-19-2023

; lenguaje: BLITZ3D

; archivo de disco: "primitiva2.bb"

; =============================================================

 

Graphics3D 800,600,16         ; Establecemos tamaño de pantalla gráfica

SetBuffer BackBuffer()         ; Dibujamos en el buffer trasero o de pantalla

camara=CreateCamera()      ; Siempre hay que crear una cámara para 

                                                ;observar el mundo

luz=CreateLight()                 ; Siempre Creamos una luz ambiental

LightColor luz,0,90,250       ; Damos color a la luz ambiental para iluminar 

                                               ;nuestra entidad y poder verla

                                         ; El color es una mezca de 3 números: R,G,B (red, green, blue)

                                          ; cada valor puede ir de 0 a 255

bola=CreateSphere()      ; Creamos una esfera y se almacena en la variable "bola" 

MoveEntity bola,0,-3,7   ; Y la movemos hacia delante para que la pueda ver la cámara

                                           ; x=0, y=-3, z=7 

; se crea un bucle infinito con los comandos: REPEAT - UNTIL

; El bucle termina se se orime la tecla "ESC"

Repeat

   UpdateWorld           ; Actualizamos movimiento, colisiones (si los hubiera), etc

   RenderWorld           ; Dibujamos el mundo (camara,cubo y luz)

   Flip                           ; Pasamos el renderizado a la pantalla para que se vea

                                     ; Del Backbuffer al FrontBuffer

Until KeyDown(1)       ; Terminamos si pulsamos Escape

End 

PROGRAMA No. 3

; ============================================

; autor(es):

; grado: 

; función: crea esfera estática con una luz apuntándole

; fecha: agosto-19-2023

; lenguaje: BLITZ3D

; archivo de disco: "primitiva2.bb"

; ============================================


Graphics3D 640,480,32

camera = CreateCamera() 

MoveEntity camera,0,0,-3 

bola = CreateSphere() 

luz1 = CreateLight(1)        ;Puede cambiar el valor a 2 y 3 para ver el efecto

MoveEntity luz1,5,0,0 

PointEntity luz1,bola          ; hace que la luz le apunte al balón 

;bucle infinito con WHILE - WEND

While Not KeyDown(1) 

    UpdateWorld

    RenderWorld

    Flip 

Wend 

End

PROGRAMA No. 4

; =========================================

; autor(es):

; grado: 

; función: crea cono con luz apuntándole

; fecha: agosto-19-2023

; lenguaje: BLITZ3D

; archivo de disco: "primitiva3.bb"

; =========================================

Graphics3D 640,480,16

camera = CreateCamera() 

MoveEntity camera,0,0,-3 

cono1 = CreateCone() 

luz1 = CreateLight(3)   

MoveEntity luz1,5,0,0 

PointEntity luz1,cono1  

; Bucle infinito con While - wend

While Not KeyDown(1)

    UpdateWorld

    RenderWorld

    Flip 

Wend 

End

PROGRAMA #5

COLOCANDOLE MOVIMIENTO DE ROTACIÓN A LAS FIGURAS 3D

; ==========================================

; autor(es):

; grado: 

; funcion: crea cono con luz apuntándole

;          con giro en el eje Y

; fecha: agosto-19-2023

; lenguaje: BLITZ3D

; archivo de disco: "primitiva3.bb"

; ===========================================

Graphics3D 640,480,16            ; Ancho: 640, Alto: 480, color 16 bits

camera = CreateCamera() 

MoveEntity camera,0,0,-3 

cono1 = CreateCone() 

luz1 = CreateLight(3)   

MoveEntity luz1,5,0,0             ; mueve la luz1 a posición x=5, y=0, z=0

PointEntity luz1,cono1  


While Not KeyDown(1)

TurnEntity cono1,0,1,0 ; gira el cono. Por cada repetición del bucle se 

                                                ;incrementa el valor Y en 0.1  

                                                ; X=0   Y=0.1  Z=0

    UpdateWorld

    RenderWorld

    Flip 

Wend 

End

PROGRAMA #6

COLOCANDOLE MOVIMIENTO Y TEXTURA A UNA FIGURA 3D

; ==============================================================

; autor:

; grado: 

; función: crea primitiva esfera con una textura y lo gira en eje Y

; fecha: abril-30-2023

; lenguaje: BLITZ3D

; archivo de disco: "primitiva_1.bb"

; =============================================================

Graphics3D 640,480,32,1             ;ancho=640, alto=480, 

                                                            ;32=Color a 32 bits, 1= pantalla completa

SetBuffer BackBuffer()

camera=CreateCamera()

light=CreateLight()

tierra=CreateSphere()          ; crea esfera y la guarda en variable "tierra"

PositionEntity tierra,0,0,5

aspecto=LoadTexture("Earth.jpg") ;carga textura "Earth.jpg" y la guarda en

                                                 ;en la variable "aspecto"

EntityTexture tierra, aspecto  ; a entidad "tierra" colocar textura almacenada

                                               ; en variable "aspecto"

; inicia bucle infinito WHILE - WEND

; por cada repetición del bucle la variabl Y, disminuye en -1

While Not KeyDown(1)

TurnEntity tierra,0,1,0 ;giro antihorario con y=1

                                     ;giro horario y=-1

RenderWorld

Flip

Wend

End

TEXTURAS PARA OBJETOS 3D



EARTH.JPG




                                                                         CESPED2.PNG

WCRATE.JPG

PROGRAMA #7

; ==============================================================

; autor:

; grado: 

; función: crea primitiva CUBO con una textura para madera y la gira en eje Y

; fecha: septiembre-24-2023

; lenguaje: BLITZ3D

; archivo de disco: "cubo_textura.bb"

; =============================================================

Graphics3D 640,480,32,1             ;ancho=640, alto=480, 

                                                            ;32=Color a 32 bits, 1= pantalla completa

SetBuffer BackBuffer()

camera=CreateCamera()

light=CreateLight()

caja=CreateCube()          ; crea entidad cubo y la guarda en variable "caja"

PositionEntity caja,0,0,5

madera=LoadTexture("WCRATE.JPG") ;carga textura "wcrate,jpg" y la guarda en

                                                 ;en la variable "madera"

EntityTexture caja, aspecto  ; a entidad "caja" colocar textura almacenada

                                               ; en variable "madera"

; inicia bucle infinito WHILE - WEND

; por cada repetición del bucle la variabl Y, disminuye en -1

While Not KeyDown(1)

TurnEntity caja,0,1,0 ;giro antihorario con y=1

                                     ;giro horario y=-1

RenderWorld

Flip

Wend

End

Textura: "WCRATE.JPG"

PROGRAMA #8

MOVIMIENTO DE UN CILINDRO EN EJES X, Y ,Z

;===============================================

; función: mover cilindro en pantalla usando el teclado del Pc.

; fecha: 18-mayo-2023

; lenguaje: BLITZ3d

; programador: r2d2

; lenguaje: Blitz3D 

; archivo: 

; gráficos: r2d2

;=============================================== 

Graphics3D 800,600,32,1 ;crea ventana de X=800  Y=600 color 32 bits, 1:  pantalla completa

SetBuffer BackBuffer() ; dibujar en la memoria de pantalla


camara1=CreateCamera() ;Crea camara y guarda entidad en variable "camara1"

luz1=CreateLight() ;crea luz y almacena entidad en variable "luz1"


Cilindro=CreateCylinder() ;crea entidad cilindro y la guarda en la variable "cilindro"

; variables reales para el posición inicial del cilindro

; que se movera usando el teclado

; el simbolo "#" despues de cada variable, indica que los valores guardados 

; en x, y, z son valores reales.


; Posicion inicial del cilindro:

x#=0 ; el simbolo "#" indica que el valor de x es un número real

y#=0

z#=10


Repeat  ; inicia bucle infinito con: Repeat- Until

  Cls         ; borra pantalla

  

; movimiento hacia la izquierda o la derecha

  If KeyDown(203) x#=x-0.1     ; a la izquierda

  If KeyDown(205) x#=x+0.1     ; a la derecha


; movimiento hacia arriba y abajo

  If KeyDown(208) y#=y-0.1         ; hacia abajo

  If KeyDown(200) y#=y+0.1         ; hacia arriba


; movimiento adelante y atras del cilindro

  If KeyDown(16)  z#=z-0.1         ; hacia el frente

  If KeyDown(30)  z#=z+0.1         ; hacia atrás 


; cada vez que se repite el bucle se modifican las variables x,y,z

; si las teclas correspondientes a los codigos; 203, 205 208, 200, 16 y 30

; HAN SIDO PULSADAS

  PositionEntity Cilindro,x,y,z  ;comando que cambia la posición del cilindro

  UpdateWorld                          ; actualiza "mundo" y colisiones

  RenderWorld                          ; redibuja mundo y entidades


  ; imprime en pantalla los valores de x, y, z;cada que se pulsa una tecla programada.

  Text 10,500,"PositionEntity: " + "x="+ x#

  Text 10,520,"PositionEntity: " + "y="+ y#

  Text 10,540,"PositionEntity: " + "z="+ z#

  Text 10,560,"Mover con cursores y Q/A"


   Flip             ; vuelca memoria de pantalla a la pantalla gráfica

  Until KeyDown(1)

End

============================================

****************************************

PROGRAMA #9

Un cielo creado para  un escenario usando dos planos:

;============================================

; funcion: terreno y cielo con dos planos superpuestos

; El fondo negro que se ve, es porque este sistema se usa cuando en 

; en el juego solo se ve el cielo por las ventanas de un edificio, por huecos

;en el techo, o por encima de recintos cerrados por paredes sin techos.

; fecha: 19-oct-2023

; autor: r2d2

; lenguaje: BlitzBASIC 3D

; archivo: cielo_con_plano1

; =====================================================

Graphics3D 800,600,32,1

SetBuffer BackBuffer()

; crear camara

cam1=CreateCamera()

PositionEntity cam1,0,10,2 ; coloca camara en x=0, y=10, z=2

;crear luz

luz1=CreateLight()

RotateEntity luz1,30,0,0


;crear plano infinito y cargarlo en variable "piso"

piso=CreatePlane()

;cargar textura "grama" y se guarda en variable "textura_piso"

textura_piso=LoadTexture("grama.bmp")

;escalar la textura

ScaleTexture textura_piso,20,20

; colocarle textura al piso

EntityTexture piso,textura_piso



;crear plano infinito para el cielo

cielo=CreatePlane()

;crea textura para plano infinito "cielo"

textura_cielo=LoadTexture("firmamento.png")

;escalar textura

ScaleTexture textura_cielo,200,200

;colocar textura para el cielo

EntityTexture cielo,textura_cielo



;rota la entidad "cielo" para que la textura se vea desde abajo

RotateEntity cielo,180,0,0

; se posiciona textura del cielo a 100 unidades en: y

PositionEntity cielo,0,100,0



While Not KeyHit(1)

If KeyDown(205)=True Then TurnEntity cam1,0,-1,0

If KeyDown(203)=True Then TurnEntity cam1,0,1,0

If KeyDown(208)=True Then MoveEntity cam1,0,0,-1

If KeyDown(200)=True Then MoveEntity cam1,0,0,1


Text 10,560, "tierra y cielo con planos infinitos"

UpdateWorld

RenderWorld

Text 10,560, "tierra y cielo con planos infinitos"

Flip

Wend

End



firmamento.png



grama.bmp

PROGRAMA #10

COMO MOVER AVATAR ANIMADO EN UN PLANO INFINITO

;************************************************
; fecha: 25-10-2023
; programador: r2d2
; funcion: mover avatar animado sobre plano infinito
; archivo: avatar1.bb
; lenguaje: Blitz BASIC-3D
; EL  avatar se dibuja en MilkShape, se anima y se exporta a formato ".b3d" para Blitz3D
; ***********************************************
Graphics3D 1024,768,32,1
SetBuffer BackBuffer()
mono=LoadAnimMesh("bebe_caminante.b3d") ;carga avatar en la variable "mono"
camara1=CreateCamera(mono) ;activa el seguimiento de camara a la variable mono o "bebe_caminante"
terreno=CreatePlane()

;extraer animacion
ExtractAnimSeq( mono,0,0 )      ;animacion de pie
ExtractAnimSeq( mono,1,40 )  ;animacion caminar frames del 20 al 60 
;ExtractAnimSeq( mono,70,100 )  ;no tiene la animación para correr

Animate mono,0,0.5,1 ; carga animacion "mono", modo: 1(bucle)-0(parar), velocidad#(0.5), secuencia(1)
; la secuencia 1 corresponde el primer ExtractAnim

;ScaleEntity mono,0.5,1,1
PositionEntity camara1,5,37,-28
TurnEntity camara1,30,0,0
piso=LoadTexture("cesped.jpg")
ScaleTexture piso,30,30
EntityTexture terreno,piso

luz1=CreateLight()

While Not KeyDown(1)
semueve#=0
; modo:
; 0: parar la animación
; 1: loop (bucle) de la animación (por defecto)
; 2: ping-pong de la animación
; 3: one-shot (una fotografía) de la animación
;--------------------caminar --------------------------
If KeyDown(200) Then
If AnimSeq(mono)=1 Then Animate mono,1,0.5,2 ; ente/modo/velocidad/secuencia 
semueve#=0.2; 
;------------------- correr ---------------------------
If KeyDown(29) Then
If AnimSeq(mono)=2 Then Animate mono,1,0.5,3
semueve#=0.6:
;----------------- vuelve a secuencia 1: quieto -------
Else
     If AnimSeq(mono)=3 Then Animate mono,2,0.5,1
EndIf
Else
     If AnimSeq(mono)<>1 Then Animate mono,2,0.5,1
EndIf

MoveEntity mono,0,0,semueve#
;___________________girar_____________________________
If KeyDown(203) Then TurnEntity mono,0,1.5,0
If KeyDown(205) Then TurnEntity mono,0,-1.5,0

UpdateWorld
RenderWorld
Text 10,600, "movimiento de avatar - Cursoras"
Flip
Wend
End

==================================================================

De clic en la línea siguiente para descargar "avatar.b3d"


===========================

Descargar textura para plano: 


PROGRAMA #11 (completo)

En este programa tratare de escribir el esqueleto básico de un videojuego sencillo con un avatar animado y con las notas de programación para que  usuarios recien iniciados puedan aprender tecnicas sencillas de programación. Siempre se seguiran las cosas de la manera más fácil que se pueda.
No se han programado colisiones, por tanto, el avatar pasara a través de los objetos. Tampoco tiene animación. Esto se hará en un próximo programa
; ================================================
; función: crear elementos basicos de un juego
; fecha: 22-mayo-2024
; autor: Yo
; lenguaje: Blitz3D
; archivo: prototipo.bb
; ================================================

; variables globales:
; variables para control de teclado
Global escape_key = 1
Global up_key = 200, down_key = 208, left_key = 203, right_key = 205
Global W_key = 17, S_key = 31, A_key = 30, D_key = 32, z_key = 44

; variables para control de coordenadas del avatar
; nombre del avatar: "neper1": dibujado con Khet: animado con Milkshape
Global neper1

; coordenadas iniciales del avatar
Global x#=0, y#=-1, z#=10

; tamaño de ventana para juego
; 1024 x 768 píxeles usando Color de 32 bits
; con un marco de ventana (1 = pantalla completa, 2 = ventana)
Graphics3D 1024,768,32

; dibujas o cargas los objetos de tu mundo en una página posterior oculta 
; (también conocida como BackBuffer: bufer de pantalla o memoria de pantalla) mientras se muestra la página principal. 
; Una vez que los objetos 3D se han movido y luego "pintado" en el área oculta o BackBuffer, 
; el comando Flip pasa las imagenes del BackBuffer al Front Buffer. 
; Esto evita un molesto problema conocido como parpadeo de la pantalla y crea mundos animados más fluidos.
SetBuffer BackBuffer()

;carga objetos: avatar en formato ".b3d"
; esta carga del avatar se debe realizar primero y en segundo lugar
; se programa la camara para que siga al avatar. Si no se programa en ese orden
; la camara no funcionara siguiendo el avatar
neper1=LoadMesh("robot1.b3d")
PositionEntity neper1,0,0,-10

; Crea primera camara
; crea una cámara llamada "cam1" . Puedes controlar hacia dónde apunta esta cámara en tu mundo
; conectamos la cámara al avatar para que lo siga 
; y crear una vista en tercera persona. La  camara esta 50 unidades detras del avatar
cam1=CreateCamera(neper1)  ; avatar: "neper1" enlazado a la camara "cam1"
PositionEntity cam1,1,38,-50

;Podemos agregar algo de luz ambiental para que si nos alejamos demasiado de nuestra fuente de luz puntual, 
;las cosas no se oscurezcan : cada valor va de 1 a 255
; los parametros son una mezcla de color RGB
AmbientLight 200, 200, 200

; crea un punto de luz estándar llamado "luz1": (1 = direccional (predeterminado), 2 = punto, 3 = cono)
; 1= funciona de forma similar a un sol brillando sobre una casa. La intensidad de la iluminación dependerá 
; del ángulo en que la luz incida sobre ellos. 
; 2= crea un punto de luz. Esto funciona como una bombilla iluminando dentro de una casa, 
; comenzando en un punto central y desvaneciéndose gradualmente hacia el exterior. 
; 3= Un valor 3 crea una luz spot. Esto es un cono de luz.
luz1=CreateLight(1)
RotateEntity luz1,45,0,0

; crear un plano infinito para colocar elementos de juego
plane=CreatePlane()
grass_tex=LoadTexture("pasto.bmp")
EntityTexture plane,grass_tex
ScaleTexture grass_tex,50,50
PositionEntity plane,0,0,10

;crear el cielo!
;Hacer un cielo es más sencillo de lo que se pensamos: 
; 1. crea una esfera
sky = CreateSphere()

; 2. le  colocamos una textura
skytexture = LoadTexture("sky1.bmp")
EntityTexture sky,skytexture

; 3. agrandamos la esfera para que quede como una cúpula sobre el terreno
; asi quedamos detro de la esfera
ScaleEntity sky,800,800,800
; como la textura está colocada por la parte externa de la esfera, al mirar hacia arriba
; veremos el interior de la esfera que es de color negro: es decir, no veriamos cielo azul ni nubes
; entonces el siguiente comando coloca la textura de la esfera por su lado interior
; o hace que la textura sea visible desde el interior de la esfera, asi vermos cielo azul y nubes
FlipMesh sky

;Carga una pequeña construccion sobre el plano infinito
; podría ser nuestro primer objeto del juego
; lo posiciona en las coordenadas 0,0,150 con una escala natural:
; 1,1,1: significa que se dejo con el mismo tamaño en que se dibujo con MILKSHAPE 

torre=LoadMesh("nivel1.b3d")
PositionEntity torre,0,0,150
ScaleEntity torre, 1,1,1

;Carga un arbol sobre el plano infinito
; lo posiciona en las coordenadas 0,0,50
; se usa "ScaleEntity arbol1, para agrandarlo 3 veces en x,y,z
; el arbol se dibujo con el software ; "Tree 3.1"

arbol1=LoadMesh("arbol1.b3d")
PositionEntity arbol1,0,0,50
ScaleEntity arbol1,3,3,3

; bucle infinito para inicio/fin de juego y control del avatar
While Not KeyDown( 1 )
If KeyDown(200) Then ; cursor arriba
MoveEntity neper1,0,0,0.5
Text 10,50,z#
EndIf
If KeyDown(208) Then ; cursor abajo
MoveEntity neper1,0,0,-0.5
EndIf
If KeyDown(203) Then ; cursor izquierda
TurnEntity neper1,0,1,0 
EndIf
If KeyDown(205) Then ; cursor derecha
TurnEntity neper1,0,-1,0 
EndIf
; _____________________________________________________________________
; cambiar la posicion de la camara de seguimiento del avatar
; A: camara hacia abajo
; z: camara hacia arriba
If KeyDown(30) ; A
TranslateEntity cam1,0,-0.5,0
Else If KeyDown(44)  ;Z
TranslateEntity cam1,0,+0.5,0
EndIf


RenderWorld
Text 0,0,"Use cursor keys to move the first camera about the infinite plane"
Flip

Wend
End

;===============================================================

textura: "sky1.bmp"

"pasto.bmp"


No hay comentarios:

Publicar un comentario

Porque en mi llevo el caos puedo hacer una estrella.