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.