Hay alguna forma de crar un minimapa como este:
No se me ocurre ninguna idea la verdad.
-- IMÁGENES ADJUNTAS --
![]()
Hay alguna forma de crar un minimapa como este:
No se me ocurre ninguna idea la verdad.
-- IMÁGENES ADJUNTAS --
![]()
Yo lo tengo en tareas pendientes, tengo que hacer un minimapa con los coches, supongo que, los tiros irán como adaptar el juego a todas las resoluciones, veras yo lo tengo todo diseñado para una resolución de 1280x800, pues en todas las coordenadas hago lo siguiente:
Global puntero=loadimage (osd/puntero, bmp) tmaskimage puntero,0,0,0 tximage=imagewidth(puntero) : yimage=imageheight(puntero) tresizeimage puntero, (ximage*gráficosx)/1280, (yimage*gráficosy)/800.
Drawimage marconombre, (920*gráficosx/1280), (220*gráficosy/800).
Todo esto cada vez que sale una coordenada que influye directamente con la resolución siendo gráficosx, gráficosy la resolución seleccionada.
No lo que me quieres decir, pero en tu caso si es un juego 3d puedes utilizar el comando cameraproject o algo así se llama para hacer el mapa, yo mi juego es en 2d y a mí no me vale, gracias de todos modos.
Por cierto ¿no sabrás alguna forma de empaquetar los archivos? Para que nadie los pueda modificar yo encontré el pakmaker empaqueta de miedo, pero el fallo que no es capaz de cargar los ficheros con el comando include.
Última edición por Damian1985; 25-01-2011 a las 21:59
Nueva versión disponible, v0.53 que incluye:
-Soporte para pad analógico/digital.
Mejorado el menú opciones.
Añadido compuestos blandos/duros.
Añadida opción de cambio manual/automático.
Mejoras notables en el osd.
Calculo de vueltas con el combustible restante.
Descarga-> http://www.racerphysics.com/download...hysics0.53.rar.
-- IMÁGENES ADJUNTAS --
![]()
Última edición por 3dpoder; 09-03-2012 a las 09:52
Falco en hora buena se ve muy bien. Puedes mejorar el cielo haciendo un cubico, ya que se ven la unión de las caras de los cielos, no recuerdo bien debes aplicar unos flag a las texturas.
Creo que hace falta sombras. Un saludo.
"No son ni estrellas ni í*dolos, son solo gente común que quiere hacer historia"
Usa el packmachine te permite cifrar datos de hostia, es una lib free.No lo que me quieres decir, pero en tu caso si es un juego 3d puedes utilizar el comando cameraproject o algo así se llama para hacer el mapa, yo mi juego es en 2d y a mí no me vale, gracias de todos modos.
Por cierto ¿no sabrás alguna forma de empaquetar los archivos? Para que nadie los pueda modificar yo encontré el pakmaker empaqueta de miedo, pero el fallo que no es capaz de cargar los ficheros con el comando include.
"No son ni estrellas ni í*dolos, son solo gente común que quiere hacer historia"
Falco sobre el cambio de resoluciones donde se mueven las imágenes, usa como partida la mitad de la pantalla tanto en altura como en anchura, por lo tanto al cambiar la resolución no se verá afectado.
Por ejemplo:
Al realizar esto el cambio de resolución no afecta los objetos que uses en el menú.Código:drawimage imagen,graphicswidht()/2-200,graphicsheight()/2 +200
Última edición por Yue; 07-02-2011 a las 01:08
"No son ni estrellas ni í*dolos, son solo gente común que quiere hacer historia"
Gracias Blitz, en cuanto al tema de las resoluciones no tengo ningún problema con el 2d, usé en su día una simple regla de tres, con resize image y drawimage y me va perfecto, el único problemas es el 3d, el menú de introducción los textos son entidades 3d, para así poder hacer los efectos de girar las letras, y cuando pasa el ratón por encima se iluminan y caminan hacia adelante, ahí está el problema uso un simple recuadro de coordenadas x, y para detectar la posición del ratón, pero cuando cambia el aspect ratio de 16:10 (que uso por defecto) a otro las letras se desplazan un poco hacia abajo por lo tanto se activan cuando el ratón pasa ligeramente por encima de lo deseado.
Bueno aquí pongo un código bastante interesante como crear el efecto blur.
Un saludo.Código:initgraphics(1024,1024). Global light = createlight(). Global Camera = createcamera (). Positionentity Camera,0,1,-5. Camerarange Camera.001,100. Createplane (). Local Cube = createcube (). Positionentity Cube,0,1,0. Rotateentity Cube,30,40,0. Local overlay = createquad(1,1,-1,Camera). Positionentity overlay,0,0.5. Entityalpha overlay.8. Local texture = createtexture (1024,1024,1+16+32). Entitytexture overlay,texture. Loockbuffer texturebuffer(texture). For y = 0 todo texturewidth(texture)-1 tfor x = 0 todo textureheight(texture)-1 writepixelfast x y,0,texturebuffer(texture) tnext. Next. Unlockbuffer texturebuffer(texture). Rendertexture (texture). While not keydown(1) tturnentity Cube.5,1.5 tif keydown(200) translateentity Camera,0,0.1 if keydown(20 translateentity Camera,0,0,-.1 if keydown(203) translateentity Camera,-.1,0,0 if keydown(205) translateentity Camera.1,0,0 t updateworld t rendertexture (texture) t flip wend end t. Function rendertexture (texture) trenderworld tcopyrect 0,0,1024,1024,0,0,frontbuffer(),texturebuffer(texture). End function. Function initgraphics(w = 1024, h = 768, title$=iris3d, exit_message$=) tgraphics3d w, 32, 2 tsetbuffer backbuffer() tsedrnd millisecs() tif exit_message <> apptitle title, exit_message telse apptitle title tendif. End function. Function createquad(width#, height#, order%=-1, parent%=false) tlocal v0, 1, 2, 3 tlocal point,surface tif not parent = false point = createmesh(parent) telse point = createmesh() tendif tif order <> 0 entityorder point, order tendif tentityfx point,1 tsurface = createsurface (point) tv0=addvertex(surface,-(width*.5), (height*.5),0,0,0) TV1=addvertex(surface, (width*.5), (height*.5),0,1,0) tv2=addvertex(surface,-(width*.5),-(height*.5),0,0,1) TV3=addvertex(surface, (width*.5),-(height*.5),0,1,1) taddtriangle (surface, 0, 1, 2) taddtriangle (surface, 1, 3, 2) treturn point. End function
"No son ni estrellas ni í*dolos, son solo gente común que quiere hacer historia"
Muy bueno el código para hacer blur. Ahora estoy intentando comprenderlo del todo para poder variar la cantidad de blur. Gracias.
Ya me di cuenta, variando el entityalpha del ente overlay se consigue variar el blur.
Última edición por aprendiz; 09-02-2011 a las 14:18
Hola, estaba mirando un código de Blitz para leer píxeles y cuando utilizo el comando readpixelfast me pone en un mensaje memory acces violation. Que puede será gracias.
Hola. Aprendiz, me alegra que te haya gustado el código. Ahora el siguiente fragmento de código es una función que detecta la posición del modo gráfico especificado, tanto en altura, como anchura y su respectiva profundidad.
En mi caso retorna un 11, es la posición en la tarjeta gráfica donde se encuentra el modo gráfico, esto puedo variar de ordenador a ordenador, por ejemplo, en otros puede dar un 20 o un 30, esto se usa cuando se escanean los modos gráficos soportados por la tarjeta gráfica y este valor se toma como partida para mostrar las opciones disponibles en una lista dinámica para que el jugador lo cambie a su gusto.Código:function buscarmg(ancho%,alto%,profundidad%) tlocal itermodes tfor itermodes=countgfxmodes3d() todo 1 step -1 ;it more likely that searches would prefer higher - End resolutions if (gfxmodewidth(itermodes)=width)*(gfxmodeheight(itermodes)=height)*(gfxmodedepth(itermodes)=depth) then return itermodes if (gfxmodewidth(itermodes)<width) then return false tnext treturn false. End function. Local modo_gráfico = buscarmg(800,600,32). Print modo_gráfico (). Waitkey().
Esta parte se usa para que salte los modos de 16, 24 de profundidad, si desea que detecte estos modos puede anular esta línea de código. Un saludo.Código:if (gfxmodewidth(itermodes)<width) then return false
"No son ni estrellas ni í*dolos, son solo gente común que quiere hacer historia"
Continuando con otro código, este es la base de cómo hacer sombras volumétricas.
Código:Graphics3d 1024, 768, 32, 2. Setbuffer backbuffer(). Globs. Dim edge#(65000, 7). Camera. Cam = createcamera (). Caster. Cube = createsphere (). Positionentity Cube, 0, 0, 7. Light. Light = createlight(). Positionentity light, 3, 3, 7. Pointentity light, Cube. While not keyhit(1) tturnentity Cube, 1. 5, 1.5 tvol = createvolume (Cube, light) trenderworld tfreentity vol tflip. Wend. End. Function createvolume (model, light, volume_lenght = 1000000). Volumemesh = createmesh(). Volumesurface = createsurface (volumemesh). Entityalpha volumemesh. 5. Entitycolor volumemesh, 255, 0, 0. Entityfx volumemesh, 1. Light_x# = entityx(light). Light_y# = entityy(light). Light_z# = entityz(light). For n = 1 todo countsurfaces(model) tsurf = getsurface (model, n) tdwnumfaces = counttriangles(surf) - 1 tfor v = 0 todo dwnumfaces vert0 = trianglevertex(surf, v, 0) vert1 = trianglevertex(surf, v, 1) vert2 = trianglevertex(surf, v, 2) tformpoint vertexx(surf, vert0), vertexy(surf, vert0), vertexz(surf, vert0), model, 0 v1_x# = tformedx() v1_y# = tformedy() v1_z# = tformedz() tformpoint vertexx(surf, vert1), vertexy(surf, vert1), vertexz(surf, vert1), model, 0 v2_x# = tformedx() v2_y# = tformedy() v2_z# = tformedz() tformpoint vertexx(surf, vert2), vertexy(surf, vert2), vertexz(surf, vert2), model, 0 v3_x# = tformedx() v3_y# = tformedy() v3_z# = tformedz() a_x# = v3_x# - V2_x# a_y# = v3_y# - V2_y# a_z# = v3_z# - V2_z# bb_x# = v2_x# - V1_x# bb_y# = v2_y# - V1_y# bb_z# = v2_z# - V1_z# norm_x# = a_y# * bb_z# - A_z# * bb_y# norm_y# = a_z# * bb_x# - A_x# * bb_z# norm_z# = a_x# * bb_y# - A_y# * bb_x# normlight_x# = (v1_x# + v2_x# + v3_x#) / 3 - Light_x# normlight_y# = (v1_y# + v2_y# + v3_y#) / 3 - Light_y# normlight_z# = (v1_z# + v2_z# + v3_z#) / 3 - Light_z# if (norm_x# * normlight_x# + norm_y# * normlight_y# + norm_z# * normlight_z#) * (1.0 / float(sqr(norm_x# * norm_x# + norm_y# * norm_y# + norm_z# * norm_z#))) * (1.0 / float(sqr(normlight_x# * normlight_x# + normlight_y# * normlight_y# + normlight_z# * normlight_z#))) => 0 then Edge (cntfront, 0) = surf Edge (cntfront, 1) = Tri Edge (cntfront, 2) = v1_x# Edge (cntfront, 3) = v1_y# Edge (cntfront, 4) = v1_z# Edge (cntfront, 5) = v2_x# Edge (cntfront, 6) = v2_y# Edge (cntfront, 7) = v2_z# cntfront = cntfront + 1 Edge (cntfront, 0) = surf Edge (cntfront, 1) = Tri Edge (cntfront, 2) = v2_x# Edge (cntfront, 3) = v2_y# Edge (cntfront, 4) = v2_z# Edge (cntfront, 5) = v3_x# Edge (cntfront, 6) = v3_y# Edge (cntfront, 7) = v3_z# cntfront = cntfront + 1 Edge (cntfront, 0) = surf Edge (cntfront, 1) = Tri Edge (cntfront, 2) = v3_x# Edge (cntfront, 3) = v3_y# Edge (cntfront, 4) = v3_z# Edge (cntfront, 5) = v1_x# Edge (cntfront, 6) = v1_y# Edge (cntfront, 7) = v1_z# cntfront = cntfront + 1 endif tnext. Next. For a = 0 todo cntfront tif Edge (a, 0) > 0 then diverso = true p0_x# = Edge (a, 2) p0_y# = Edge (a, 3) p0_z# = Edge (a, 4) p1_x# = Edge (a, 5) p1_y# = Edge (a, 6) p1_z# = Edge (a, 7) for b = a + 1 todo cntfront p0_2_x# = Edge (b, 2) p0_2_y# = Edge (b, 3) p0_2_z# = Edge (b, 4) p1_2_x# = Edge (b, 5) p1_2_y# = Edge (b, 6) p1_2_z# = Edge (b, 7) if Edge (b, 0) > 0 then if (p0_x# = p0_2_x# and p0_y# = p0_2_y# and p0_z# = p0_2_z# and p1_x# = p1_2_x# and p1_y# = p1_2_y# and p1_z# = p1_2_z#) = false then if p0_x# = p1_2_x# and p0_y# = p1_2_y# and p0_z# = p1_2_z# and p1_x# = p0_2_x# and p1_y# = p0_2_y# and p1_z# = p0_2_z# then Edge (a, 0) = surf = 0 Edge (b, 0) = surf = 0 diverso = false exit endif endif endif next if diverso then pe0_x# = p0_x# - Light_x# pe0_y# = p0_y# - Light_y# pe0_z# = p0_z# - Light_z# do# = 1.0 / float(sqr(pe0_x# * pe0_x# + pe0_y# * pe0_y# + pe0_z# * pe0_z#)) pe0_x# = pe0_x# * do# * volume_lenght + p0_x# pe0_y# = pe0_y# * do# * volume_lenght + p0_y# pe0_z# = pe0_z# * do# * volume_lenght + p0_z# pe1_x# = (p1_x# - Light_x#) * volume_lenght + p1_x# pe1_y# = (p1_y# - Light_y#) * volume_lenght + p1_y# pe1_z# = (p1_z# - Light_z#) * volume_lenght + p1_z# va = addvertex(volumesurface, p0_x#, p0_y#, p0_z#) vb = addvertex(volumesurface, pe1_x#, pe1_y#, pe1_z#) addtriangle (volumesurface, va, addvertex(volumesurface, pe0_x#, pe0_y#, pe0_z#), vb) addtriangle (volumesurface, va, vb, addvertex(volumesurface, p1_x#, p1_y#, p1_z#)) Edge (a, 0) = 0 endif tendif. Next. Return volumemesh. End function.
"No son ni estrellas ni í*dolos, son solo gente común que quiere hacer historia"
Y con este finalizamos hoy: efecto Glow.
Efecto blur FX.Código:Graphics3d 640,480,32,2. Setbuffer backbuffer(). Global Camera=createcamera (). Moveentity Camera,3,3,0. Rotateentity Camera,30,30,0. Light=createlight(). Global Cube=createsphere (). Positionentity Cube,0,0,5. Tex0=createtexture (300,300). Setbuffer texturebuffer(tex0). Clscolor 255,255,255. Cls. Sedrnd(millisecs()). For k=1 todo 50 tcolor Rand(256),Rand(256),Rand(256) trect Rand(600),Rand(600),Rand(600),Rand(600). Next. Entitytexture Cube, tex0. Setbuffer backbuffer(). S=1. Global sizex=640/s. Global sizey=480/s. Global glowtexture=createtexture (384,384,256). Global sp=createsprite (Camera). Moveentity service pack,-.25,-0.06,1.18. Entityalpha sp.32. Scaletexture glowtexture,graphicswidth()/sizex,graphicsheight()/sizey. Entitytexture service pack, glowtexture. Textureblend glowtexture, 5. While not keydown(1) tturnentity Cube,0.5,0.5,0.5 tcameraviewport Camera,0,0, sizex, sizey trenderworld tcopyrect 0,0, sizex, sizey,0,0,backbuffer(),texturebuffer(glowtexture) tcameraviewport Camera,0,0,graphicswidth(),graphicsheight() trenderworld tflip. Wend. End.
Más blur.Código:Const texsize=1024, FX=7, o =-1. Graphics3d 800,600,32. Cam=createcamera (). Positionentity Cam, 0,0,-6. Rotateentity createlight(), 45,0,0. Cube=createcube (). Entitycolor Cube, 255,128,0. Cone1=createcone (20). Entitycolor cone1,0,255,255. Positionentity cone1,-4,0,0. Cone2=createcone (20). Entitycolor cone2,0,255,0. Positionentity cone2,4,0,0. P=createpivot(). Sph=createsphere (20, p). Positionentity SPH, 0,0,-4. Select FX tcase 1:bl=createblurlayer(Cam, 1,0,1,1. 95,1, o) tcase 2:bl=createblurlayer(Cam, 1,0,1. 97,1,3, o) tcase 3:bl=createblurlayer(Cam, 1. 2,1.02. 97,1,3, o) tcase 4:bl=createblurlayer(Cam, 1,0,1.01,1. 95,1, o) tcase 5 bl=createblurlayer(Cam, 1,0,1.01,1. 9,1, o) entitycolor bl, 240,255,225 tcase 6 bl=createblurlayer(Cam, 1.1,0,1,1. 95,1, o) rotateentity bl, 1,1,0 tcase 7 bl=createblurlayer(Cam, 1.01,1,1,1. 9,1, o) bl2=createblurlayer(Cam, 1.02,-1,1,1. 8,1, o). End select. Setbuffer backbuffer(). While not keyhit(1) tturnentity Cube. 1. 2. 3 tturnentity p. 55. 35. 2 trenderworld tbltex=updateblurlayer(bl, bltex) tif bl2 then entitytexture bl2, bltex tif FX=4 then positionentity bl, rnd(-.01. 01), rnd(-.01. 01), 1 tflip. Wend. Function createblurlayer(Cam, z#, ang#, mgn#, bright#, alpha#, bmode, ord) tlocal xres=graphicswidth() tlocal yres=graphicsheight() tlayer=createmesh(Cam) ts=createsurface (layer) tvx#= 1.0*xres/texsize tvy#= 1.0*yres/texsize taddvertex,-1,-1,0,0,0 taddvertex, 1,-1,0, vx#, 0 taddvertex,-1,1,0,0, vy# taddvertex, 1,1,0, vx#, vy# taddtriangle, 0,1,2 taddtriangle, 3,2,1 tpositionentity layer, 1,1, z# tcameraproject Cam, entityx(layer, true), entityy(layer, true), entityz(layer, true) trx#= projectedx#()-.5*xres try#= projectedy#()-.5*yres tscalemesh layer. 5*xres/rx#.5*yres/ry#, 1 tpositionentity layer,-.5/rx#,-.5/ry#, z# trotateentity layer, 0,0, ang# tscaleentity layer, mgn#, mgn#, mgn# tentityalpha layer, alpha# tentityblend layer, bmode tcol=255*bright# tentitycolor layer, col, col, col tentityfx layer, 1 tentityorder layer, ord treturn layer. End function. Function updateblurlayer(layer, TeX) tif TeX=0 then TeX=createtexture (texsize, texsize) tentitytexture layer, TeX tcopyrect 0,0, graphicswidth(), graphicsheight(), 0,0, backbuffer(), texturebuffer(TeX) treturn TeX. End function.
Código:Graphics3d 1024,768,32,1. Setbuffer backbuffer(). Light=createlight(). Rotateentity light,45,45,0. Cube=createcube (). Translateentity Cube,0,0,3.0. Scaleentity Cube.1,2.1. Camera=createcamera (). Camerarange Camera,0.01,100. Cameraclscolor Camera,255,0,0. Motion_blur_on=1. Motion_blur_quad=create_blurquad(Camera). Entityfx motion_blur_quad,2 or 1 or 16. Motion_blur_tex=createtexture (1024,1024,256). Entityalpha motion_blur_quad,0.333. Entitytexture motion_blur_quad, motion_blur_tex. Translateentity motion_blur_quad,-(1.0/2048.0),0-(1.0/2048.0), 0.995. Entityorder motion_blur_quad,-1. While keydown(1)=0 tif keyhit(57), tecla espacio motion_blur_on=motion_blur_on XOR 1 if motion_blur_on=0 then hideentity motion_blur_quad else showentity motion_blur_quad endif tendif t. If motion_blur_on<>0 copyrect 0,0,1024,768,0,128,backbuffer(),texturebuffer(motion_blur_tex). Endif. Turnentity Cube.2.4.6. Updateworld(). Renderworld(). Vwait:flip 0. Wend. Function create_blurquad(par=0) tlocal al1#, al2#, 0, 1, 2, tr tal1#=1.0 tal2#=0.2 tm=createmesh() ts=createsurface (m) tv0=addvertex(s,-1,-1,0, 0,1) TV1=addvertex(s,+1,-1,0, 1,1) tv2=addvertex(s, 0,0,0. 5.5) tvertexcolor, 0,255,255,255, al1# tvertexcolor, 1,255,255,255, al1# tvertexcolor, 2,255,255,255, al2# ttr=addtriangle (s, 0, 1, 2) tv0=addvertex(s,+1,-1,0, 1,1) TV1=addvertex(s,+1,+1,0, 1,0) tv2=addvertex(s, 0,0,0. 5.5) tvertexcolor, 0,255,255,255, al1# tvertexcolor, 1,255,255,255, al1# tvertexcolor, 2,255,255,255, al2# ttr=addtriangle (s, 0, 1, 2) tv0=addvertex(s,+1,+1,0, 1,0) TV1=addvertex(s,-1,+1,0, 0,0) tv2=addvertex(s, 0,0,0. 5.5) tvertexcolor, 0,255,255,255, al1# tvertexcolor, 1,255,255,255, al1# tvertexcolor, 2,255,255,255, al2# ttr=addtriangle (s, 0, 1, 2) tv0=addvertex(s,-1,+1,0, 0,0) TV1=addvertex(s,-1,-1,0, 0,1) tv2=addvertex(s, 0,0,0. 5.5) tvertexcolor, 0,255,255,255, al1# tvertexcolor, 1,255,255,255, al1# tvertexcolor, 2,255,255,255, al2# ttr=addtriangle (s, 0, 1, 2) tflipmesh tupdatenormals tif par <>0 then entityparent m, par treturn m. End function.
Última edición por Yue; 09-02-2011 a las 19:16
"No son ni estrellas ni í*dolos, son solo gente común que quiere hacer historia"
Bueno aquí otro código, cuya función es tener una idea de cómo hacer un menú dinámico donde el usuario pueda elegir la resolución de pantalla, de acuerdo a lo que soporte la tarjeta gráfica. Lo siguiente es lograr que al cambiar la información en pantalla se cambie la resolución en tiempo real, algo de tener muy en cuenta es que directX 7 tiene como límite la resolución de pantalla máxima 1024 por 1536, es decir si en un ordenador moderna, se escanea este modo gráfica y se intente ejecutar dará un error.
Por tal motivo se recomiendo implementar un método que no escanee más, allá de ese limite. Un saludo.
Código:Code by yue. Public domain 2011. Graphics 800,600,32,false. Local total_mg = countgfxmodes3d(). Local profu_p[50]. Local alto_p[50]. Local ancho_p[50]. ============================= Local t_escape = 1 : local numero_mg = buscarmg(1024,768,32). Local x. For x = 1 todo numero_mg talto_p[x] = gfxmodeheight(x) tancho_p[x] = gfxmodewidth(x) tprofu_p[x] = gfxmodedepth(x). Next. While not keyhit(1) t tcls ttext 0,0, alto_p[numero_mg] + + ancho_p[numero_mg] + + profu_p[numero_mg] t t tapptitle numero_mg t tif keyhit(200), up t numero_mg = numero_mg +1 if numero_mg > total_mg numero_mg = total_mg t telseif keyhit(20, down t numero_mg = numero_mg - 1 t if numero_mg = 0 numero_mg = 1 tend if t. Wend. Function buscarmg(width%,height%,depth%) tlocal itermodes tfor itermodes=countgfxmodes3d() todo 1 step -1 if (gfxmodewidth(itermodes)=width)*(gfxmodeheight(itermodes)=height)*(gfxmodedepth(itermodes)=depth) then return itermodes tnext treturn false. End function.
"No son ni estrellas ni í*dolos, son solo gente común que quiere hacer historia"
Hola. Bueno aquí un ejemplo de cómo cifrar datos.
Saludos.Código:Tmp$=fbk_cryptstring$(mi nombre es yue rexie,$e2cdf032). Print tmp$. Tmp2$=fbk_cryptstring$(tmp$,$e2cdf032). Print tmp2$. Waitkey. Function fbk_cryptstring$(source$,key) tfor c=1 todo len(source$) char$=char$+chr$(asc(mid$(source$,c,1)) XOR key) tnext treturn char$. End function.
"No son ni estrellas ni í*dolos, son solo gente común que quiere hacer historia"
Me han gustado mucho los códigos de Blitz3d, tanto es así que, los he comprendido y modificado y además los estoy usando en un proyecto que estoy haciendo.
Sin embargo, les he hecho unas pequeñas modificaciones. Aunque básicamente hacen lo mismo, lo hacen de otra forma la cual permite aplicar el blur para cualquier resolución (menor a 1024 por 1024) y además aplicar camerazom en tiempo real y el blur se mantiene.
Cualquier duda sobre el código o mejora estaré encantado de oírla.
-- IMÁGENES ADJUNTAS --
![]()
Hola aprendiz. Me alegre que los entiendas, te comento que descargue la prueba blur y se ve muy bien, una cosa es que debes implementar funciones en los modos gráficos para cada tarjeta gráfica, por ejemplo, en mi caso la tarjeta que uso ahora solo soporta 14 modos, en el ejemplo que me has pasado al legar al límite me da error, pues parece que busca un modo gráfico inexistente en mí PC.
Otra cosa es a ver si me ayudas a verificar los modos gráficos de mi proyecto. http://download143.mediafire.com/ell...e75ye6/demo.7z.
Y me pasas los modos gráficos que visualiza tu tarjeta.
Aún no tengo implementado el sistema de cambio de modo gráfico el cual lo hago mediante endgraphics o clearworld.
Espero me puedas colaborar.
"No son ni estrellas ni í*dolos, son solo gente común que quiere hacer historia"
Hola blizt3d, a ver si puedes subir el código fuente para ejecutarlo desde el Blitz, si no poco puedo hacer. Os dejo aquí un juego antiguo que había echo al cual le he aplicado el blur, a ver qué os parece a mí me parece relajante, prueben todas sus opciones que son bastantes y cada configuración hace un efecto diferente y divertido. Si a alguien le interesa como lo hice, preguntenme y les publico el código, que lo disfruten.
-- IMÁGENES ADJUNTAS --
![]()
Última edición por aprendiz; 11-02-2011 a las 14:15
Bueno solo quería una ayuda como tester. La idea era escanear los modos gráficos teniendo como máximo el modo 1536 x 1024 ya que este es el límite de directX 7, ya que, aunque los puede escanear al ejecutarlos daría error.
Ahora bien, lo que estoy tratando antes de hacer algo es optimizar un menú con todas las respectivas opciones.
"No son ni estrellas ni í*dolos, son solo gente común que quiere hacer historia"
A, pues me detecta las resoluciones bien, hasta 1280 por 1024. Pero el juego no me funciona, no puedo andar con el coche ni nada.
Para los que hacen efectos desde Particle Illusion o cualquier programa que te genere una colección de imágenes (frames) de efecto, les gustara este código.
Lo que hace es convertir esa colección de imágenes a una sola imagen animada, lista para ser cargada desde Blitz con loadanimimage.
Para usarlo compilen el código o ejecutenlo en la carpeta donde se encuentre las imágenes, el generara un.bmp animado para Blitz.
Código:graphics3d 800,600,16,2. Type sprite_animado tfield ruta$. End type. Print animación inversa? (1 - 0). Reg_inverso = input (). If reg_inverso <> 1 and reg_inverso <> 0 then end. Crear_imagen_animada (reg_inverso). Convertir una colección de imágenes en una sola imagen animada. Function crear_imagen_animada (reg_inverso) truta$ = currentdir() tdir$ = readdir(ruta$) tarchivo1$ = tlocal sprite, sprite_animado[500] tfiltro1$ =.jpg tfiltro2$ =.bmp tfiltro3$ =.png twhile archivo1$ <> archivo1$ = nextfile$(dir$) ruta_archivo$ = ruta$ + archivo1$ ;filtrar imágenes ext1 = instr(archivo1$, filtro1$) ext2 = instr(archivo1$, filtro2$) ext3 = instr(archivo1$, filtro3$) ;contar archivos y obtener ancho y alto if archivo1$ <>. And archivo1$ <>. And archivo1$ <> and archivo1$ <> thumbs, db and (ext1 <> 0 or ext2 <> 0 or ext3 <> 0) then if reg_creado = 0 then imagen = loadimage (ruta_archivo$) ancho = imagewidth(imagen) alto = imageheight(imagen) freimage imagen reg_creado = 1 endif sprite[frame] = new sprite_animado sprite[frame]\ruta$ = ruta_archivo$ frame = frame + 1 endif twend t;crear textura animada tif frame <> 0 then tipo = 1 imagen = createimage (ancho * frame, alto, tipo) buffer_imagen = imagebuffer(imagen) setbuffer buffer_imagen if reg_inverso = 1 then x = ancho * (frame - 1) for dibujo = 0 todo frame -1 imagen2 = loadimage (sprite[dibujo]\ruta$) drawimage imagen2,x,0 freimage imagen2 delete sprite[dibujo] if reg_inverso = 0 then x = x + ancho if reg_inverso = 1 then x = x - Ancho next nombre$ = ancho + _ + alto + _ + frame +.bmp saveimage (imagen, nombre$) closedir dir tendif. End function
Para saber el ascci y el scancode un sencillo programa. Solo pulsa las teclas.
-- IMÁGENES ADJUNTAS --
![]()
Hola bueno, la verdad el juego lo comencé de nuevo por problemas técnicos (no tengo ordenador) y el código almacenado en una usb se me jodido. http://download1057.mediafire.com/np...ma5u5/demo.rar.
Este ya hace los respectivos cambios, lo que no sé es si funcione correctamente.
Ya miro tu código. Saludos.
"No son ni estrellas ni í*dolos, son solo gente común que quiere hacer historia"
Hola muy bueno el programa, una duda que me asalta es porque los ejecutables quedan tan grandes?
"No son ni estrellas ni í*dolos, son solo gente común que quiere hacer historia"
Pues la verdad siempre ocupan eso al compilar, será por la versión de Blitz. Haces algo especial para que te ocupen menos? O al compilar te quedan ya así? Que versión usas?
Edito: viste el juego de gravedad puntos? Gracias a ti a quedado así, me sirvió y me está sirviendo mucho el código de blur.
Última edición por aprendiz; 12-02-2011 a las 03:23
Debe ser la versión yo uso la 1.109, y si acabo de mirar y es genial lo que has hecho, esos efectos son de 10.
"No son ni estrellas ni í*dolos, son solo gente común que quiere hacer historia"
Bueno, esto debería ir aquí. https://www.foro3d.com/f113/sombras-Blitz3d-92498.html. Saludos.
"No son ni estrellas ni í*dolos, son solo gente común que quiere hacer historia"
Más sobre sombras. Lo bueno de las sombras cartográficas es que permiten proyecciones de sombras en objetos animados, por el contrario en las sombras volumétricas si deseamos proyeciones animadas, las animaciones del modelo no deben ser por huesos si no por vertex.
Una de las cosas es que se puede implementar sombras con efecto blur manipulando el zoom de la cámara.Código:Type shadow tfield obj tfield shwtexsize tfield shwtex tfield shwinit t. End type. Graphics3d 1024,768,32,2. Setbuffer backbuffer(). Ambientlight 0,0,0. Global xscale#=1*(.8/2). Shadowcam=createcamera (). Cameraprojmode shadowcam,2. Camerafogmode shadowcam,1. Camerafogrange shadowcam,1,1. Camerafogcolor shadowcam,255,255,255. Hideentity shadowcam. Local Camera=createcamera (), cámara que visualiza el game. Positionentity Camera,0,5,-15. Scene=createsphere (). Local scene=createcube (). Scaleentity scene,20,1,20. Positionentity scene,0,-1,0. Local idscene. Shadow = sw_addobject(scene). Local caster=createcone (32). Positionentity caster, 0,3,0. Rotateentity caster,40,90,60. Scaleentity caster, 1,2,1.5. Updatenormals caster. Entitycolor caster,200,0,0. Local idcaster. Shadow = sw_addobject(caster). Local caster1=createsphere (32). Positionentity caster1,0,1,0. Entitycolor caster1,0,0,200. Updatenormals caster1. Local idcaster1. Shadow = sw_addobject(caster1). Local light=createlight(2). Local vis_light = createsphere (12, light). Entitycolor vis_light,0,200,0. Entityfx vis_light,1. Positionentity light,-20,8,-1. ================================= While quit=0 t;===> tif keyhit(1) then quit=1 tif keyhit(203) then xscale#=xscale#*.9 tif keyhit(205) then xscale#=xscale#*1.1 t;===> tsw_resetshadow(), t;===> tmoveentity light,0,0,0.25:turnentity light,0,-1.25,0 tturnentity caster,0,0.5 tupdateworld tshadow_test1(shadowcam, Camera, light,idcaster,idscene) tshadow_test1(shadowcam, Camera, light,idcaster1,idscene) tshadow_test1(shadowcam, Camera, light,idcaster,idcaster1) trenderworld() t;===> ttext 500,10,xscale#: + xscale# ttext 500,20,zoom: +.06/xscale# ttext 300,30,hit <- & -> todo change the xscale# tflip t;===>. Wend. End. ===================================================== Function shadow_test1(s_camera, g_camera, s_light, caster. Shadow, s_receiver. Shadow) t;===> t;stop t;===> thideentity g_camera tshowentity s_camera t;===> tif s_receiver\shwinit=true then cameraclsmode s_camera, false, true telse cameraclsmode s_camera, true, true s_receiver\shwinit = true tendif t;===> tlocal tsize = s_receiver\shwtexsize t;===> tcameraclscolor s_camera,255,255,255 tcamerazom s_camera.06/xscale# tcameraviewport s_camera,0,0,tsize,tsize tcameraprojmode s_camera,2 t;===> tsw_hideobject() t;===> tlocal s_caster=copyentity(caster\obj) tentityfx s_caster,1+8 tentitycolor s_caster,0,0,0 tshowentity s_caster t;===> tpositionentity s_camera,entityx(s_light,true),entityy(s_light,true),entityz(s_light,true) tpointentity s_camera, s_receiver\obj trenderworld() t;===> tcopyrect 0,0,tsize,tsize,0,0,backbuffer(),texturebuffer(s_receiver\shwtex) t;===> tlocal curobj = s_receiver\obj tfor s=1 todo countsurfaces(curobj) local surf=getsurface (curobj, s) for v=0 todo countvértices(surf)-1 tformpoint vertexx(surf), vertexy(surf), vertexz(surf), curobj, s_camera vertextexcords surf, (tformedx()/xscale#)/32+0.5,1-((tformedy()/xscale#)/32+.5) next tnext t;===> tsw_showobject() t;===> tshowentity g_camera thideentity s_camera tfreentity s_caster t;===> t. End function. Function sw_addobject. Shadow(obj) tlocal sw_size = 512 tlocal curmodel. Shadow = new shadow tcurmodel\obj = obj tcurmodel\shwinit = false tcurmodel\shwtex = createtexture (sw_size, sw_size, 16+32) tcurmodel\shwtexsize = sw_size tentitytexture curmodel\obj,curmodel\shwtex t;===> tsetbuffer(texturebuffer(curmodel\shwtex)) tclscolor 255,64,255 tcls tsetbuffer(backbuffer()) t;===> treturn curmodel. End function. Function sw_resetshadow() tlocal curmodel. Shadow tfor curmodel=each shadow curmodel\shwinit = false tnext. End function. Function sw_hideobject() tlocal curmodel. Shadow tfor curmodel=each shadow hideentity curmodel\obj tnext. End function. Function sw_showobject() tlocal curmodel. Shadow tfor curmodel=each shadow showentity curmodel\obj tnext. End function.
Esto a veces a abrumador, pero si no deseas hacer esto desde cero se puede usar la lib gom puesta en unos mensaje más atrás. Saludos.
Última edición por Yue; 12-02-2011 a las 16:32
"No son ni estrellas ni í*dolos, son solo gente común que quiere hacer historia"
Gracias Blitz3d, la verdad que me gustaría hacer una librería propia para sombras, pero no acabo de entender el manejo de vertextexcords en ese código (sigo pensando).
Hola ese comando tiene como función establecer la coordenada de un vértice en una malla. Un automóvil va a 230 kilómetros por hora un circuito, para hacer pruebas de colisión, se detecta la normal con la que se ha estrellado el auto contra un muro de contención de acero, un bucle for next detecta las superficies del auto, uno los vértices, entonces de acuerdo a las normales con que colisiono se reposiciónan los vértices para emular latas retorcidas. Un saludo.
"No son ni estrellas ni í*dolos, son solo gente común que quiere hacer historia"
Por ejemplo, tengo un escenario desde giles en le que tengo dos texturas. En la capa 1 (tierra) en la capa 3 (hierba), en la capa 2 por defecto del giles está el mapa de luz.
He probado el código de sombra ortográficas y solo funciona estableciendo:
Vertextexcords superficie,índice, u#, #[,w#][, cord_set] donde cord_set = 0.
Al hacer esto lo que ocurre es que la sombra se aplica (más o menos bien) pero me modifica las coordenadas UV de la textura aplicada desde el giles. He estado buscando por la página oficial y el aprametro cord_set permite diferenciar a que capa de textura aplicas el comando. En mi caso necesito aplicar el comando a la capa 4, ya que en la 1,2,3 están las texturas de giles. Sin embargo, cuando pongo cord_set = 3 (capa1 = 0, capa2 = 1, capa3 = 2, capa4 = 3), no funciona la sombra, la textura se aplica, pero no lo (*.ace) bien. No sé si será un fallo de Blitz o quizás la exportación del giles.
Si no estoy mal giles tiene la opción de colapsar las texturas en una sola, por lo tanto solo se usarían dos capas en el Mesh, sobre las coordenadas de los verttices es que son sombras dinámicas y es para que la textura se mueva correctamente cuando se mueve el ente que proyecta la sombra.
"No son ni estrellas ni í*dolos, son solo gente común que quiere hacer historia"
Otra cuestión es que la capa de la sombra siempre debe quedar encima, es la última. Bueno otro aporte este pequeño manual sobre el poder de los types en Blitz3d. Algo, así como c. Se trata de entender un poco la programación orientada a objetos. Lo jodido es que me llego en ingles. http://www.mediafire.com/?Idr7qqzrbwj2291.
"No son ni estrellas ni í*dolos, son solo gente común que quiere hacer historia"
Sobre el comando vertexords solo tiene estos parámetros, [superficie],[x#],[y#],[z#], el otro es advertex, pero eso es cuando se crea mallas en tiempo real en Blitz3d.
"No son ni estrellas ni í*dolos, son solo gente común que quiere hacer historia"
Ya ya, el descabezado soy yo, si es este comando. http://www.blitzBasic.com/b3ddocs/co...rds&ref=3d_a-z.
El otro es vertexcords lo siento. Ahora me entero de eso, ya le estoy echando un vistazo.
"No son ni estrellas ni í*dolos, son solo gente común que quiere hacer historia"
Ok ya plante esa cuestión en el foro: posiblemente nos ayude a entender ese comando a cabalidad. http://Blitz Basic.com/community/men...hp?Topic=93806.
"No son ni estrellas ni í*dolos, son solo gente común que quiere hacer historia"
Pues gracias, ya que es algo confuso el comando. A ver si puedes decirme cómo hago para fusionar las texturas en una solo desde giles, sería de gran ayuda, que no encuentro la opción. Gracias.
Solucinado. Cuando exportas desde giles un modelo con un mapa de luz, el mapa de luz es asignado como una textura de sombras (por defecto en la capa 1). En la capa 0 estaría la textura que le asignas al modelo, bien, cuando usas el comando vertextexcords superficie,índice, u#, #[,w#][, cord_set] poniendo cord_set = 0, estas modificando las coordenadas UV de la textura que tú asignas (ladrillos, madera, etc), cuando pones cord_set = 1 modificas las coordenadas UV de la capa de textura asignada a la sombra, en este ejemplo, la capa 1. Pero sin embargo, para que surja efecto en la modificación (cord_set = 1) debes establecer otro comando : texturécords textura 1.
Si lo estableces a 0, aunque cord_set = 1, no tendrá efecto. Con esto se soluciona el problema y la duda que tenía. Sin embargo, surge otro problema,xd, y es que, al establecer sombras ortográficas mediante el uso de vertextexcords estableciendo cord_set = 1 y estableciendo texturécords a 1, se pierde el mapa de luz creado en giles, y se usa como mapa de luz el obtenido por el código de sombras ortográficas.
Edito: en resumen, hoy lo veo más claro. El parámetro cord_set = 1 modifica las coordenadas de todas las texturas establecidas como texturécords textura 1, cord_set = 0 modificas las coordenadas de todas las texturas establecidas como texturécords textura 0 (por defecto).
Última edición por aprendiz; 14-02-2011 a las 13:48
Hola, a ver si alguien me puede colaborar probando esto. Lo que necesito verificar es:
-Cambio de resoluciones de pantalla.
Cambio en detalle de la sombra.
Cambio en el brillo de la pantalla.
Aceleración para rendimiento óptimo.
Agradecería la ayuda y todos los datos posibles. http://download1129.mediafire.com/ks...1lxy0/demo.rar.
"No son ni estrellas ni í*dolos, son solo gente común que quiere hacer historia"
Hola, lo he probado y no note ningún error. Pero tengo varias preguntas. La primera es si la sombra la implementas ortográfica o volumétrica. También como consigues el cambio de gamma (es con ambienlight ==?) y por último a ver si podías subir el código una de las (*.dll) ya que se como crear librerías.dll, pero no tengo de dónde sacar información de los comandos y me gustaría ver un código en C++ para poder aprender. Gracias.
Hola aprendiz no he podido responder antes es que como he mencionado no tengo internet ni ordenador en casa, por lo que entro aquí cada vez que el bolsillo permite.
Así que estoy contra el reloj.
Son cartográficas.
La gamma se realiza mediante el comando setgamme y updategamma, esto es útil para hacer filtros como de visión nocturna, o poner la pantalla en blanco y negro cuando el personaje muere.
Bueno este este tema te lo quedo debiendo, la idea de hacer una (*.dll) es expandier la funcionalidad de Blitz3d, permitiendo migrar de direcx7 a 8 10 o yo qué sé, esto se logra mediante viusal Studio.net con el SDK respectivo, por ejemplo, si usas el SDK de DirectX 8.1, se puede hacer llamadas a la lib de DirectX 8.1.
Ahora bien de manera somera, lo que se hace son funciones, estas funciones se deben menter en archivos DCL, que luego se meten en userlib para que Blitz3d reconozca estos comandos, ya luego cuando regrese te mando une jemplo.
Por ahora mira mi web y me dices como va el nuevo demo. http://www.iris3d.tk. Un saludo, se acaba el tiempo.
Otra cosa es que he sido invitado a campus party 2011 Colombia, y no tengo ordenador eso me da risa.
Adiós pues.
"No son ni estrellas ni í*dolos, son solo gente común que quiere hacer historia"
Muchas gracias, no conocía el comando setgamma ni uptdategamma, muy útiles. Lo de las (*.dll) yo se programar en C++ pero lo más que llegue a hacer para el Blitz es una función que sume dos números o multiplique, (xd). Lo que quería saber es de dónde sacar los comandos del DirectX para programar una buena.dll.
Hola a los tiempos. En estos días me paso por aquí, para dejar un tutorial de mi autoría muy básico de Blitz3d. Venga que no soy escritor, ni mucho menos, pero espero sea de utilidad para alguien.
-- IMÁGENES ADJUNTAS --
![]()
"No son ni estrellas ni í*dolos, son solo gente común que quiere hacer historia"
Oye los comandos los sacas haciendo llamadas a las Api de Windows, eso lo haces instalado un SDK en visual.net, por ejemplo, un SDK para trabajar con directx9c, todo lo que hagas lo encapsulas en funciones que son pasadas de la (*.dll) Blitz.
"No son ni estrellas ni í*dolos, son solo gente común que quiere hacer historia"
Muy interesante tu aporte. En cuanto pueda, lo echo un ojo.
¿Para cuando el Soft Libre,
hará un programa de cad
y que a ser posible,
tenga calidad.
Y que ya no sea imprescindible,
usar AutoCad?.
(Cervantes revolviéndose en la tumba).
Muy bueno el manual, es bonito ver cómo alguien intenta hacer entender lo que ama. viva la programación.
Muy buenas a ver si alguien o entre todos me podéis ayudar a mejorar este código, pongo el código y los archivos para que los descargueis. Gracias de antemano.
-- IMÁGENES ADJUNTAS --Código:Graphics3d 800,600,32,2. Setbuffer backbuffer(). Movemouse graphicswidth()/2.8, graphicsheight()/2. Hidepointer. Player = createpivot(). Camera=createcamera (player). Cameraclscolor Camera, 0,162,232. Camerarange Camera,0.1,10000. Light=createlight(). Rotateentity light,90,0,0. Cursor=loadimage (puntero1.png). Plane=createplane (). Grass_tex=loadtexture (textura_suelo_piedra.jpg). Entitytexture plane, grass_tex. Cerdo=loadanimmesh(asalto, b3d). Scaleentity cerdo,0.01,0.01,0.01. Rotateentity cerdo,0,180,0. Cerdo_hijo=findchild (cerdo, cylinder01). Extractanimseq(cerdo_hijo,1,10) ;anim seque 1: frames 0.10 are parado. Extractanimseq(cerdo_hijo,11,20) ;anim seque 2: frames 11.21 are correr. Animate cerdo_hijo,2. 020, 1. Cerdo_spine1 = findchild (cerdo, bip01 spine1). Cerdo_arma = findchild (cerdo, jamon_asalto). Entityparent cerdo_arma, cerdo_spine1. While not keydown(1) tif keydown(32)=true then Turn Entity Camera,0,-1,0 tif keydown(30)=true then Turn Entity Camera,0,1,0 tif keydown(32)=true then Turn Entity cerdo,0,-1,0 tif keydown(30)=true then Turn Entity cerdo,0,1,0 tif keydown(31)=true then if animseq(cerdo_hijo)=1 then t animate cerdo_hijo,1,0.2,2 endif moveentity cerdo,0,0,0.04 telseif keydown(17)=true then t if animseq(cerdo_hijo)=1 then t animate cerdo_hijo,1,0.2,2 endif moveentity cerdo,0,0,-0.04 telse if animseq(cerdo_hijo)=2 or animseq(cerdo_hijo)=3 then t animate cerdo_hijo, 2.020,1 endif tendif tmxs#=mxs# + mousexsped() tmys#=mys# + mouseysped() tif mxs# > 45 then mxs# = 45 tif mxs# < -45 then mxs# = -45 tif mys# > 30 then mys# = 30 tif mys# < -30 then mys# = -30 trotateentity cerdo_spine1, mxs#, mys#,0 tpositionentity Camera, entityx(cerdo),entityy(cerdo),entityz(cerdo) tmoveentity Camera,0.5,1,-1 trenderworld tupdateworld tdrawimage cursor,mousex(),mousey() ttext 0,0, para mover y girar son w,a,s,d y el ratón para apuntar o eso intento hacer tflip t. Wend. End.
![]()
Hola Damian, lo que querías conseguir es con cameraproject, el problema es que tú modelo animado tiene las coordenadas cambiadas, y aún encima al animarlo estas coordenadas no son reales. Por ello, o bien pones un join (hueso) en la punta del cañón del arma y luego proyectas sus coordenadas a la pantalla, o haces lo que hice yo, -> una animación manual echa con funciones. Luego todo lo que queda hacer es trabajo las coordenadas a la pantalla 2d y dibujar el cursor en ellas, por cierto, la más mínima duda que tengas del código te la explicaré sin ningún problema.
-- IMÁGENES ADJUNTAS --
![]()
Buenas aprendiz, antes de nada gracias por el código, lo descargo y me pongo a investigarlo, en verdad la programación no es mi fuerte, lo mío es más el diseño gráfico.
Bueno no pasa nada, el código es imprescindible en un juego al igual que el diseño. Si investigas y aprendes más código, podrás llegar a crear cualquier juego.