![]() |
|
Bienvenido a Foros 3DPoder.. Usted esta viendo este foro como invitado, no esta registrado todavía, lo que limita su visión del foro. Si quiere unirse gratis a la mayor comunidad del diseño gráfico de habla hispana, tener acceso a publicar y responder mensajes, tener mensajes privados con otros miembros(PM), responder encuestas, publicar sus imágenes para que las vea el resto del mundo, tener acceso a los video_tutoriales, y muchas cosas más, no lo dude. Registrarse es rápido, simple y gratuito, agregate hoy a la mayor comunidad 3D de habla hispana! ! Si usted tiene algún problema con su registro, por favor , díganoslo aquí.
|
![]() |
|
|||||||
|
|
#151 |
|
A-team
|
Aqui les dejo el codigo enviado por JuanYang, reducido hasta donde pude... para tratar de explicarlo...pero esta un jeroglifico para mi sobre todo el grupo dentro del while...
Haber si uds pueden comentarlo y explicar que sucede en esa parte del codigo ![]()
__________________
|
|
|
|
| Enlaces patrocinados |
|
|
#152 |
|
My Member
Fecha de Ingreso: enero-2008
Ubicación: Pamplona
Mensajes: 272
|
yo ni idea haber si se pasa JuanYang y nos explica, la verdad es que la camara se mueve fina fina, yo creo q realmete para hacer algo con mucha calidad hace falta tirar de funciones, aunq no se igual se podria convertir a codigo mas entendible.
|
|
|
|
|
|
#153 |
|
Miembro Nuevo
Fecha de Ingreso: mayo-2008
Mensajes: 9
|
Lo cierto es que soy muy mal profesor, todo el basic que se lo he aprendido por mi cuenta, con mucho tiempo, paciencia y empeño. Tanto el Visual Basic Net (que es a lo que dedico todo mi tiempo, haciendo porgramas a medida para empresas) como el blitz ( que casi más de 8 meses que no lo uso, pero me habeis vuelto a picar), lo puedo explicar a lo bruto ( tal y como yo lo entiendo) que seguramente no sea la forma más correcta.
Pero sobre todo, QUE NADIE SE QUEDE ATRAS. 1º discrepar sobre las faltas ortográficas, y aunque si que creo que hay que poner mucha atención en como se escriben las cosas ( mucho mejor si se hace bien) a mi personalmente me da igual un "ahora" que un "haora", sabiendo que el primero se entiende mejor que el segundo. En mis 35 años que ya tengo, he conocido grandes matematicos, informaticos y físicos que no tienen ni idea de escribir bien. Lo cierto es que a la hora de programar da igual: Dim datatable as new datatable que Dim DT as new datatable siempre y cuando el programador sepa que está haciendo. Como último comentario, decir que prefiero las faltas a que se escriba como en un móvil y tener que descifrar lo que pone. Sin entrar en polémica con nadie, ya he dicho que mejor escribir bien, esto no deja de ser un foro para que la gente pregunte de la mejor manera que lo sepa hacer. 2º EL CÓDIGO SIN TYPE. Código:
Graphics3D 640,480,16,2
AmbientLight 250,250,250
Global Camara=CreateCamera ()
Global Personaje=LoadMesh("tea.b3d")
Global Pivote=CreatePivot (Personaje)
MoveEntity Pivote,0,25,-30
Suelo=LoadMesh ("suelo.b3d")
periodo=33
tiempo = MilliSecs()-periodo
SeedRnd (MilliSecs())
SetBuffer BackBuffer()
While Not KeyHit(1)
Repeat
TiempoTranscurrido = MilliSecs() - tiempo
Until TiempoTranscurrido
ticks = TiempoTranscurrido/periodo
captura# = Float(TiempoTranscurrido Mod periodo) / Float(periodo)
For k=1 To ticks
tiempo = tiempo+periodo
If k = ticks Then CaptureWorld
movimientos_personaje()
movimientos_camara()
UpdateWorld
Next
RenderWorld(captura#)
Flip
Wend
End
Function Movimientos_Personaje()
If KeyDown(203) Then TurnEntity Personaje,0,1,0
If KeyDown(205) Then TurnEntity Personaje,0,-1,0
If KeyDown(200)=True Then z#=0.5
If KeyDown(208)=True Then z#=-0.5
MoveEntity Personaje,0,0,z#
End Function
Function Movimientos_Camara()
dx#=EntityX( Pivote,True )-EntityX( Camara )
dy#=EntityY( Pivote,True )-EntityY( Camara )
dz#=EntityZ( Pivote,True )-EntityZ( Camara )
TranslateEntity Camara,dx# * .015,dy# * .015,dz# * .015
PointEntity Camara,Personaje
End Function
Para que la camara vaya lentamente detrás del personaje, el truco está en la instruccion translateentity Camara. Lo único que estás haciendo es mover la camara a una velocidad inferior a la que mueves la "z#" del personaje y por supuesto tambien menor a la velocidad de rotacion del mismo. No ovides nunca que esto: TranslateEntity Camara,dx# * .015,dy# * .015,dz# * .015 es lo mismo que esto: TranslateEntity Camara,dx# * 0.015,dy# * 0.015,dz# * 0.015 y claro está, que cuanto menor sea el numero que pongamos, más tiempo tardará la camara en llegar al punto donde la hemos puesto en la instrucción pointentity.Por lo tanto con: 0.001 tardará mucho más que con 0.1. - Los frames por segundo: Digamos que las imagenes que vemos se componen de dos estados. Un fondo negro, una imagen, un fondo negro, una imagen etc. Esto pasado muy rapidamente hace que nuestro ojo sólo vea imagenes, siempre y cuando metamos más de 25 imagenes en un segundo. Menor que eso veremos un parpadeo. Por lo tanto entendiendo lo anterior, no es difícil comprender que en un Pentium II tardará más en ejecutar el bucle While / Wend que en una AMD phenom de 4 nucleos y que para que nuestro juego funcione a la misma velocidad en uno que en otro, pues habrá que controlar los frames (o capturas de imagenes que queremos volcar). Tu en tu caso le has puesto 33, que es un buen numero para blitz, y para que vaya constante a 33 y no a tope de tu computadora pues lo has controlado en esta parte de código: Repeat TiempoTranscurrido = MilliSecs() - tiempo Until TiempoTranscurrido ticks = TiempoTranscurrido/periodo captura# = Float(TiempoTranscurrido Mod periodo) / Float(periodo) For k=1 To ticks tiempo = tiempo+periodo If k = ticks Then CaptureWorld todo lo que pongas dentro del bucle for lo hará 33 veces por segundo. Todo esto es mucho más largo, número de polígonos que renderiza nuestra cámara en un determinado momento y un largo etc en el cual no voy a entrar, pero si entender que si tu personaje gira sobre un eje, por ejemplo y en una determinada posicion metes un arbol con 40.000 polígonos, pues si no controlases los frames he intentases volcar todas las capturas, verias que en ese punto se relentiza. Esto sucede porque pasar de vacio 12 polígonos a 400 frames,por ejempo, a 40.000 polígonos 45 frames pues es un cambio muy grande que nuestro ojo aprecia y claro, no es lo mismo capturar el vacio que 40.000 polígonos para blitz y para tener que capturar las máximas imagenes que pueda pues tendrá que tardar más en recorrer el bucle, reduciendo asi los frames. De ahí la importancia de controlarlos. Compiladores como el C++ dan mucho más frames que blitz, pero eso si que es otro tema. Ya que este mensaje empieza a ser demasiado largo dejaré el tema de los types para otro. Un saludo a todos. |
|
|
|
|
|
#154 |
|
My Member
Fecha de Ingreso: enero-2008
Ubicación: Pamplona
Mensajes: 272
|
A vale eso es para asignarle los frames/segundo para que sea a tu gusto y la animacin sea lo mas fluida posible. Bien, bien...
|
|
|
|
|
|
#155 |
|
Miembro Nuevo
Fecha de Ingreso: mayo-2008
Mensajes: 9
|
yuhu, uno que lo ha entendido, a ver cuantos más. Pero Rompecabezas, no es a tu gusto, es una manera de controlar que tu juego funcione a la misma velocidad tanto para un pentium I como para un pentium IV. Ya que todo influye: la velocidad del micro, la tarjeta gráfica etc., por lo tanto lo que controlas es para que ordenador quieres que fuciones tu juego. De esto deducimos, que perfectamente puedes crear un juego donde en un momento determinado tu camara recoja un millon de poligonos, por supuesto ningun compilador podrá con ello, pero quizad dentro de 5 años si que exista el pentium VI con una tarjeta gráfica de 4 gigas que te lo pueda leer.
Por lo tanto, y si todo el mundo entiende todo lo anterior, pasaremos a la siguiente parte, que es ni más ni menos que todo tiene un límite. La memoria gráfica y los polígonos que podemos renderizar se acaban y hace que los frames bajen. Aunque en un principio parece que todo lo que tenemos es infinito, y nunca se nos va acabar, esto no es asi, y pronto nos damos cuenta que nuestro juego va lento y poco después a saltos. Por ello la importancia de los Arrays y los Types, con los cuales podemos borrar y eliminar todos los objetos que ya no se utilicen en nuestro juego (imagenes jpg,bmp, arboles, sillas, coches, enemigos, etc). Por poner un pequeño ejemplo como pregunta: ¿ De que nos vale una bala que disparamos y no ha colisionado con nada? ¿ Esa bala, una vez que ha alcanzado una determinada distancia y ya no la vemos se sigue renderizando, pq no la hemos eliminado?, ¿ No seria mejor eliminarla y que no ocupara ni polígonos, ni texturas? y por último ¿ De alguna manera tendremos que controlar cada bala que disparamos y que tenemos que eliminar ( tanto si colisiona como si está muy lejos de donde fué disparada)? Todo eso son los Types ( Blitz basic lo hereda del "C") o las Structures ( Que se llamarian en visual basic net), y por la importancia que tienen ( ya que de ello depende nuestro juego en blitz, y sin ello no hay juego), dedicaré todo mi tiempo hasta que todo el mundo que sigue este hilo diga que lo entiende, aunque para ello se me tengan que ocurrir mil y un ejemplo. Por último decir, que espero estar por aqui más tiempo y escribir mucho más, aunque todo depende de mis hijos, mujer y trabajo. Se que lo entendeis. Hasta la siguiente vez, que será insertar una imagen 2d en el mundo 3d, antes de pasar a los types. Última edición por juanyang fecha: 03 jun 2008 a las 17:28. |
|
|
|
|
|
#156 |
|
Miembro Nuevo
Fecha de Ingreso: noviembre-2007
Mensajes: 29
|
Perdon por el poco tiempo que les dedico.
Bueno, les adjunto como siempre el codigo un poco mas simple con aclaraciones para lograr el mismo efecto. En cuanto a mantener el ratio de frame hay una sentencia mucho mas simple. Ej. ratio=CreateTimer(60) luego en el cuerpo del bucle WaitTimer(ratio) Adjunto el codigo con nuestro ejemplo del auto. Saludos |
|
|
|
|
|
#157 |
|
A-team
|
Que clase....(como diria viscosillo, no si si alguno de ud lo abra conocido, era el personaje de una revista de anaya multimedia justamente sobre Basic. hace muuuchoooo tiempo......mi primer maestro
Sinceramente aun estoy recuperandome de tan dulce empapada de conocimiento, mis mas grandes muestras de admiracion y respeto para todos uds.en especial a JuanYang y Estilo_sur Si bien aun estoy en eso de entender al 100% el codigo, ya casi.... aqui una modificada al codigo de para incluir una animacion Nuevamente gracias Ni bien lo entienda al 100% lo pongo en la revista(ha desde luego anotando sus respectivos creditos) para los que lleguen despues de nosotros. Mas bien si desearian darme sus correos, para ponerlos en la revista, mi ilucion es que la revista circule por la red, fuera de este foro incluso, y asi de ese modo alguien que lea la revista y no sea de este foro y tenga la oportunidad de comunicarse con ud. lo pueda hacer Nuevamtne Gracias Maestros......... Yo de grande quiero ser como ustedes
__________________
Última edición por Cibertronic fecha: 04 jun 2008 a las 00:53. |
|
|
|
|
|
#158 |
|
My Member
Fecha de Ingreso: enero-2008
Ubicación: Pamplona
Mensajes: 272
|
Muy bueno estilo sur esta genial tu adaptacion del codigo de juanyang a el estilo que estamos siguiendo.
De paso os subo este mini tutorial para ver si podemos hacer un modelo implementando unas ruedas que giren como en este ejemplo: |
|
|
|
|
|
#159 |
|
A-team
|
Cuanto por aprender y tan poco tiempo para hacerlo.......
Gracias Estilo_sur y Juan Yang, sus codigos estan faciiles de enternder, pero mejor hacerlo los boy leyendo con calma para matar cualquier duda mia Bueno para contitnuar otra pagina mas añadida a la revista
__________________
Última edición por Cibertronic fecha: 04 jun 2008 a las 10:46. |
|
|
|
|
|
#160 |
|
Miembro Nuevo
Fecha de Ingreso: noviembre-2007
Mensajes: 29
|
Siguiendo el aporte de rompecabezas les adjunto el auto con las ruedas puestas en su lugar y girando.
Me tome el atrevimiento de quitarle las ruedas originales a la maya del auto. Saludos a todos. P.D. la próxima les paso como hacer que el auto siga la inclinación del terreno. |
|
|
|
|
|
#161 |
|
Miembro Nuevo
Fecha de Ingreso: noviembre-2007
Mensajes: 29
|
Les envío el código para hacer que las ruedas sigan al terreno.
No pretende ser un gran terreno solo es para probar el programa. Comentario para entenderlo mejor 1----2 I I I I I I 3 --- 4 Lo que hace la rutina es comparar la diferencia de las x,y,z entre las ruedas 2 y 4 (derecha) y las ruedas 1 y 3 (Izquierda) entonces inclina hacia un costado según ese resultado Luego en la segunda parte compara las ruedas 1 y 2 (adelante) y las 3 y 4 (atrás) e inclina hacia adelante o atras segun el resultado. Recuerden que en la sentencia AlignToVector car,zx,zy,zz,1 pondremos en el ultimo lugar, donde esta el numero uno el eje hacia donde queremos que haga la alineación. (1 eje x, 2 eje y, 3 eje z) El resto es lo mismo que el anterior solo que un poco mas prolijo. Saludos. |
|
|
|
|
|
#162 |
|
A-team
|
Sencillamente Formidable
![]()
__________________
|
|
|
|
|
|
#163 |
|
Miembro Nuevo
Fecha de Ingreso: noviembre-2007
Mensajes: 29
|
Quería comentarles que hay un error de codigo en el bucle:
cnt=1 For z#=1.5 To -2 Step -3.5 For x#=-1.5 To 1.5 Step 3 ResetEntity wheels[cnt] PositionEntity wheels[cnt],x,-.5,z cnt=cnt+1 Next Next Deben quitar "ResetEntity wheels[cnt]" ya que al resetear las ruedas y reubicarlas en ocasiones las dejaba por debajo de la maya del terreno ocasionando que le vehículo quedara virtualmente metido en la maya. De esta dorma al no resetear no solo evita que traspase la maya sino que, hace un pequeño efecto amortiguador sobre el auto. Saludos. |
|
|
|
|
|
#164 |
|
Miembro Nuevo
Fecha de Ingreso: mayo-2008
Mensajes: 9
|
Joes que coche más chulo te está quedando estilo_sur. Bueno, he intentado mejorarlo girando las ruedas delanteras, pero no me ha gustado del todo como me ha quedado. Ahora me tengo que marchar a currar, pero esta noche intentaré mejorarlo un poquito más.
De todas formas os cuelgo el archivo por si alguien le da por mejorarlo y esta noche me encuentro la sorpresa. Hasta otro ratillo. |
|
|
|
|
|
#165 |
|
My Member
Fecha de Ingreso: enero-2008
Ubicación: Pamplona
Mensajes: 272
|
El def.bmp para que es?
Cuando giras a la izquierda y sueltas la tecla de girar y mantienes la de acelerar el coche no vuelve a su posicion original (solo girando a la izquierda). Al principio cuando gira y aceleras desde cero pega un tiron un tanto extraño. Ahora voy a echarle un vistazo mas detallado al codigo. |
|
|
|
![]() |
| Usuarios activos actualmente viendo este tema: 3 (2 miembros y 1 visitantes) | |
| eduardo777, ESTOPA |
| Herramientas | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Duda existencial, ¿merece la pena trabajar en 3D en España? | Sumatra | Infografía General< | ||