Por cierto, como agrupais un grupo de Planes en PV3D para, por ejemplo, moverlos todos a la vez?
Un movieclip? un sprite? Estoy usando DisplayObject3D y no se si es por eso o no tengo problemas de visibilidad (se me muestra antes una cosa que esta por debajo y tal)... :S
bueno, viendo que no me desenvuelvo bien, creo que voy a preguntar cosas mas básicas:
-el código actionscript que funciona como clases, que veo que es la base de todo el proceso papervision, se puede aprender de alguna manera? Es decir, me gustaria saber el código a que se refiere cada cosa porque voy borrando cosillas pero no hacen el efecto que yo quiero.
Por ejemplo, en el archivo de los cubos que preparaste, me gustaria quitar el efecto que hace referencia al movimiento del raton (es decir, que se vea fijo la imagen de los cubos). He probado con quitar todas aquellas ordenes que hacen referencia al "visor", pero cuando lo ejecuto ya no se ve nada.
editar: jejeje lo he conseguido!!! He modificado los valores de la class MenuCubos, en las últimas lineas:
geometria.rotationY = 0;
geometria.rotationX = 0;
poniendo los valores a 0 impido el rotar la imagen!!! buenoooo, poco a poco!
Vayamos por partes:
1. Si estás tostando las texturas en Max y no tienes mucha experiencia ahí va una "traca" de posibles problemas.
- El mapeado de la textura tostada, por defecto lo hace en el canal 3 del objeto (deberías cambiar el canal a 1) para no interferir con el canal 1 que es el que inicialmente utiliza el objeto para su mapeado.
- Para no perder el material original, Max te crea por defecto un material shell (una carcasa) con el material tostado. Si cargas en el editor de materiales un material ya tostado, verás que tiene 2: el original y el nuevo. Debes dejar sólo el nuevo en el material (el que lleva las texturas tostadas y llama shell el programa); o bien, cuando vayas a tostar en la ventana Render to texture selecciona en el apartado "Baked material" la opción "Output Into Source". Esto es peligroso, porque si no tienes guardada una versión previa del archivo, vas a perder el material original, si tienes que repetir el tostado. Pero la ventaja es que automáticamente el material del objeto es el material tostado, valga la redundancia.
Como te dije, la forma de comprobar que todo va bien es desactivar las luces y ver que la escena parece que sigue iluminada (las luces y sombras ahora están "tostadas" en las texturas). Por cierto, no sé a quién se le ocurrió esto del tostado/Baked de texturas :-D.
- Por defecto, Max guarda las texturas como tga, cambialas a jpg (en la casilla File Name and Type).
Por cierto, como agrupais un grupo de Planes en PV3D para, por ejemplo, moverlos todos a la vez?
Un movieclip? un sprite? Estoy usando DisplayObject3D y no se si es por eso o no tengo problemas de visibilidad (se me muestra antes una cosa que esta por debajo y tal)... :S
Hola:
Sí, yo también utilizo esté método para agrupar objetos y que se muevan juntos; lo que no me ha ocurrido es lo que comentas de problemas de visibilidad. Me creo un nodo DisplayObject3D y es al que añado los objetos como hijos, para después moverlo y que se muevan los hijos con él
editar: jejeje lo he conseguido!!! He modificado los valores de la class MenuCubos, en las últimas lineas:
geometria.rotationY = 0;
geometria.rotationX = 0;
poniendo los valores a 0 impido el rotar la imagen!!! buenoooo, poco a poco!
Sí, por ahí está la clave :-). Si quieres que no se mueva el escenario deja en el método onEnterFrame sólo la linea:
engine.renderScene(escena, camara, visor)
En este sentido, PV es muy explicativo de lo que hace: le estamos diciendo al motor de render que renderice la escena donde hemos añadido la geometría Collada, con la cámara que hemos creado y que lo muestre en el visor.
Ah, se me ha pasado el "tema" de Flex. La razón de utilizar Flex es que publicando así es muy fácil adjuntar el código: eclipse tiene una opción que rápidamente te publica el código de la aplicación que estás haciendo, y símplemente pulsando boton derecho accedes a él.
De hecho, los ejemplos que subo yo no tienen
"aspecto Flex", sino más bien parecen hechos en Flash (el IDE).
El único problema que te puedes encontrar al reutilizar el código es que estas clases extienden de la clase "canvas" de Flex, que por así decirlo es su "movieclip" (perdón a los puristas por la comparación, pero es para entendernos ;-)).
Verás que las clases que utilizo extienden de Canvas, todas ellas tienen una primera línea del tipo:
public class MiClaseTal extends Canvas
si esta definición la cambias por
public class MiClaseTal extends Sprite
o por
public class MiClaseTal extends MovieClip
puedes utilizarlas directamente desde Flash cambiando todo lo que sea UIComponent por Sprite o Movieclip
El blog coconnut estaba originalmente pensado para Flex, y yo soy un simple "invitado" en él. Ya se sabe, no saques mucho los piés del plato si no quieres que te "desinviten". Esto último es broma..., si en el fondo me gusta Flex y todo :-D.
Un saludo.
P.D.:Lo que sí te recomendaría es que si vas a programar en actionscript te busques un editor más "amigable" que el que trae Flash. Yo utilizo Eclipse, pero hay muchos más, como SEPY. Si pides opinión seguro en en este foro te recomiendan alguno más.
bueno bueno parece que tengo faena para estudiar jejejej
voy a probar todo lo que me dices y ya te contaré que tal.
varios temas:
- he modificado el tema del canal. Es verdad, estaba en 3 y lo he cambiado a 1. No ha funcionado.
Estoy pensando que el error puede que sea problema del código. Te cuento. La nueva prueba que habia realizado son unas esferas (como si fueran planetas) en el espacio en 3d studio. Les puse a todas la misma textura, las ... vaya, creo que he encontrado un posible error jejej (escribo mientras pruebo). Las imágenes no estan bien tostadas, porque quito las luces y no permanece en la textura. puede que el error venga de ahi. Me puedes explicar como tostar? Puede que no lo hiciera bien siguiendo un tutorial que encontre.
siguiendo con el tema, la orden que tenemos para los cubos es:
private function onLoadComplete(evt:FileLoadEvent):void {
var cubo:TriangleMesh3D;
var material:BitmapFileMaterial;
for (var i:uint=1;i<7; i++) {
cubo = TriangleMesh3D(geometria.getChildByName("caja"+i.toString()));
material = BitmapFileMaterial(cubo.getMaterialByName("mat"+i.toString()));
material.interactive = true;
cubo.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, onMouseClick);
}
this.addEventListener(Event.ENTER_FRAME, onEnterFrame);
para las esferas, habia probado de cambiar el triangleMesh3d por sphere. Esto es correcto? O el programa carga los materiales por triangulación. En el ejemplo de los cubos, inserté un plano en 3dstudio, le di un material, importe a .dae y al ejecutar el flash me aparece perfectamente. Si no le daba material me aparecia el plano definido por triangulos, supongo que esta es la orden. o no?
- estoy mirando, linea a linea, el código para comprender que hace cada parte para saber que lo que toco sirve para algo jejejej
la primera parte que observo es la cámara (de momento me parece mas fácil). He ido modificando los valores para ver que efectos me hace. Ahora, me surge la duda de la orden:
camara.z = -900;
camara.y=250;
me da la sensacion que hacen el mismo efecto, pero no puede ser ya que tengo un poco de conocimiento de ejes en el espacio y estas dos direcciones no son lo mismo jejejej
- una dudilla menor (aunque no menos importante). Cuando publico en flash el proyecto, me crea el archivo .html y .swf complementario, y un archivo javascript .js. Estos son los 3 archivos que necesito subir a mi ftp para poder verlo en la web no? O hace falta que suba todos los archivos que utilizo?
Lo comento porque subi los archivos, cambié el nombre del archivo creado (MenuCubosFlash) por el de index, para que me lo reconozca como página principal pero no me funciona.
de nuevo, agradecerte mucho la paciencia que tienes conmigo porque ya ves que soy muy muy novato. Como no encuentro tutoriales para super-inexpertos como yo cuesta un poco, pero bueno, con paciencia...
nada, pruebo y pruebo y no me sale. Creo que lo que hago mal es algun paso de 3dstudio en materiales, camaras o objetos... o tostar no se. Algo debe ser que no hago bien porque el fallo me hace referencia a collada.
te cuento lo que hago yo para un ejemplo sencillo:
-creo un cubo, un plano bajo el y una luz skylight.
-creo un material con un diffuse que es un archivo de imagen.
-escojo el cubo; en el menu modificar -> lista de modificadores. Busco la opcion Unwrap UVW. Busco la pestaña del menu Parameters y edit.
-Me aparece una nueva ventana nueva. Bajo esta pantalla, en el apartado Selection Modes, selecciono la tercera opcion (Face Sub-Object Mode).
-En esta pantalla, menu superior -> Mapeado (Mapping) -> Aplanar mapeado (Flatten Mapping).
-Pongo spacing 0, acepto y cierro la ventana.
-En el menu principal, selecciono Renderización -> Renderizar a textura.
-Otra nueva pantalla. Selecciono el cubo, y le doy en la pestaña Output -> Add -> CompleteMap.
-Modifico estas características:
-Name: Textura
-FileName and Type: busco la ruta y hago un archivo nuevo textura1.jpg
-Size: 1024
-En la siguiente pestaña de esta pantalla (Baked Material), selecciono la opcion Render to Files Only.
-Le doy a cerrar la pantalla.
-Ahora ya me voy al menu principal Archivo -> Exportar -> creo un archivo .DAE y lo grabo en la carpeta dae (como tu ejemplo).
Esto es todo lo referente a lo que hago en el 3d studio. Este sistema me lo baje de un tutorial que encontré en una web. Puede que contenga errores y por eso no lo hago bien. a ver que te parece.
gracias!
pd. acabo de ver en una web de papervision que tenia que hacer referencia a la carpeta papervision3d/as3/trunk/scr . puede que coja los códigos de ahi y por eso me diera error. he probado pero ahora me aparece este nuevo mensaje:
Vertices3d.as, linea 195 -> 1000: Referencia ambigua a Vertex3D.
puede ser porque una esfera no tiene vertices verdad? o es por otro tema?
Creo que la mejor opción, si no tienes mucha experiencia, es que mapees los objetos como harías normalmente, los ilumines, y cuando estés contento con el aspecto renderizado que obtengas (sin hacer nada especial de wrappers, shells etc ;-). entres a la ventana de Baked to texture y elijas la opción en el apartado Baked Material: Output intoSource. Esto va a hacer que pierdas el material original (por lo que guarda el archivo max antes con otro nombre) pero no te dará problemas de exportación. Una vez tostados, elige los objetos y conviertelos en malla (los seleccionas y boton derecho/Convert to editable mesh.
si te sigue dando problemas tienes la opción de no renderizar a textura: lo único que ahora va a parecer que la escena no está iluminada y te va a exportar las texturas originales que has aplicado a los materiales.
Lo de actionscript te lo pongo en otro mensaje para diferenciarlo un poco.
private function onLoadComplete(evt:FileLoadEvent):void {
var cubo:TriangleMesh3D;
var material:BitmapFileMaterial;
for (var i:uint=1;i<7; i++) {
cubo = TriangleMesh3D(geometria.getChildByName("caja"+i.toSt ring()));
material = BitmapFileMaterial(cubo.getMaterialByName("mat"+i .toString()));
material.interactive = true;
cubo.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, onMouseClick);
}
this.addEventListener(Event.ENTER_FRAME, onEnterFrame);
</fieldset>
TriangleMex3D es la clase padre de la que heredan la primitivas de Papervision. Así, un cubo, un plano, una esfera... "son" TriangleMex3D, y las llamo así para no tener que particularizar cada caso de primitiva.
Este método lo que hace es obtener por medio de getChildByName la geometría que he exportado desde Max. Si te fijas, estoy localizando los objetos por su nombre que di en Max. Yo llamé a las cajas: caja1, caja2,... y ahora utilizo un bucle para obtenerlas. Si tu tienes, por ejemplo 8 objetos llamados "miCaja1", "miCaja2"... tendrías que cambiar "caja" por "miCaja" para que ese bucle que ahora iría de 1 a 8, recorra todos "TUS OBJETOS".
Lo mismo hay que hacer en la línea que recupero los materiales para decirles que sean interactivos: En getMaterialByName tienes que cambiar el literal "mat" para que se adapte al nombre del material que diste en Max.
Con respecto al tema del archivo javascript que te crea Flash, también hay que subirlo. Si no tienes muchas nociones de javascript mejor no toques esta parte. Este archivo sirve para que el explorador no muestre el fastidioso mensaje de "pulsa sobre este componente si quieres activarlo" (o algo así) que aparece en una página cuando lleva contenidos Flash, y también sirve, junto al código de la página html (que tampoco sería convieniente que cambiaras si no tienes muy claro lo que hace) para detectar la versión de Flash y en caso de no ser la 9, indicar al usuario que se actualice.
bueno, creo que he llegado a tal punto de explosion mental que voy a ir hacia atras como los cangrejos.
De momento dejare todos estos elementos 3d studio para un poco mas adelante, cuando comprenda mejor el lenguaje actionscript y papervision. Perdona por todo el follon que he armado pero me ha servido mucho para animarme a trabajar.
bueno, pues empezando por ahi (y ya que mi post era "como empezar con papervision"), he cogido uno de los archivos de ejemplo que venia con el paquete papervision y lo he simplificado, dejando solo un plano con textura. El código es este:
<code>//inicio del paquete
package
//importar aquellos elementos que hay creados ya en flash
{
import flash.display.*;
import flash.events.*;
// Iniciacion del conjunto de elementos que forman el D
function init3D():void
{
// Añadir contenedor (Sprite) y centrado en la pantalla
container = new Sprite();
addChild( container );
container.x = 320;
container.y = 240;
// Añadir escena
scene = new Scene3D( container );
// Añadir camera
// Hay la posibilidad de una Camera3d (movimiento del visor)
camera = new FreeCamera3D();
// Añadir plano con textura Space
addSpace();
}
// añadimos la funcion de plano y sus caracteristicas
function addSpace():void
{
// Crea textura con un bitmap de la libreria
var materialSpace :BitmapAssetMaterial = new BitmapAssetMaterial( "Space" );
// Creacion del plano
// segmentado en parrilla de 8x8
var plane:DisplayObject3D = new Plane( materialSpace, 4800, 3000, 8, 8 );
// Posicion del plano (distancia)
plane.z = 1500;
// Añadir el plano creado a la escena
scene.addChild( plane );
}
// efecto loop
function loop3D(event:Event):void
{
// Movimiento de la cámara con el raton
// para modificarlo escribir +/-container.mouseX/3 o +/-container.mouseY/3
camera.x = 0;
camera.y = 0;
// Renderizar la escena
scene.renderCamera( camera );
}
}
}
</code>
crees que son correctas todas las anotaciones? El programa funciona bien. me sale un plano fijo, que no puedo mover ahora mismo porque tengo los valores de la cámara a 0.
Ahora vienen dos preguntas, para ir practicando con este ejemplo:
- como incluir un nuevo plano (esta vez sin textura y luego con la misma textura que el anterior).
-como incluir una esfera (de momento estática).
yo de mientras voy mirando el blog de papervision a ver (ya podria estar tambien en español!!!!).
Hola:
Para crear un plano sin texturas, de un color determinado te creas un material de dicho color y se lo asignas al plano:
<code>
var miPlano:Plane = new Plane(new BitmapColorMaterial(0xff0000), 100, 100, 8, 6)
miEscenario3D.addChild(miPlano)
//para crear una esfera azul
var miEsfera:Sphere = new Sphere(new BitmapColorMaterial(0x0000ff, 100, 8, 6)
miEscenario3D.addChild(miEsfera)
</code>
Lo he escrito directamente aquí, por lo que no sé si me he saltado algo ;-)
Junto a las clases que te has bajado, puedes encotrar la documentación de toda la API. Explica las propiedades y métodos de todas las clases y sólo tienes que ir a la que quieras utilizar y ver cómo se crea.
Por otro lado, quizá es que comprendí mal tus intenciones iniciales. Me pareció que querías utilizar Max para crear la geometría y por eso cogí ese camino (que me sirvió para descubrir que en mi blog no se pueden subir archivos collada; todo en esta vida tiene un propósito ;-)). Visto lo visto he reconducido el tema y he hecho el mismo menú directamente en Papervision. La entrada está en el mismo blog:
El archivo rar tiene la misma estructura que el que subí el otro día. Abres el archivo Fla y configuras la ruta donde están las clases GreatWhite en tu disco duro, y a correr.
El ejemplo carga la geometría de un xml. Los 6 cubos tienen las mismas texturas, pero si te creas texturas nuevas basta con cambiar el xml diciendo los nombres de las nuevas. También puedes especificar la posición, orientación y tamaño de los cubos (se crearán tantos cubos como haya en el archivo xml)
Por cierto, recuerdo que me preguntaste cuál es la orientación de los ejes en Papervision, pues... un poco peculiar, pero bastante habitual en el mundo del 3D:
Eje x: Horizontal, positivo hacia la derecha.
Eje y: Vertical, positivo hacia arriba.
Eje z: Dirección hacia el interior de la pantalla, sentido positivo alejandose del espectador.
Ahora, al pulsar sobre sobre un cubo se llama a una función javascript que está en el código html: "funciónJavascript "(qué original soy :-D). La función no hace mucho, sólo emite un mensaje con el nombre del cubo que se haya pulsado; pero puede servirte para ver cómo se utiliza la clase ExternalInterface que te comenté anteriormente.
Un saludo.
P.D.: Por cierto, las clases que estás utilizando en ese ejemplo creo que son de la versión 1.7 de Papervision; la actual 2.0 es bastante más rápida y fácil de utilizar, por eso fue que la elegí para hacer este ejemplo (que al final se ha convertido en un calvario para tí).
Si, al principio te comenté lo del 3d studio porque pensaba que seria mucho mas fácil que trabajar con código. Pero claro, tener que aprender aspectos que no conocia en 3d studio y al final igualmente hay que escribir código actionscript, habia pensado en aprender el codigo y hacer los elementos con el mismo. Poco a poco, mientras lo estudio, me parece menos complicado. solo es cuestion de saber como hay que escribir el codigo y para realizar los efectos que ordenes son necesarias.
Estos dias estoy aprendiendo mucho gracias a tu ayuda, asi que seguire siendo un poco mas pesado para seguir aprendiendo este mundillo. Creo que con un buen nivel de aprendizaje se pueden hacer cosas realmente buenas.
de nuevo agradecerte tu ayuda y seguimos en contacto, porque tengo muuuuuuuchas preguntas que hacerte jejejej. pero poco a poco!!! :)
empecemos por un poco de explicacion de xml. Como funciona y en que consiste?
he visto el archivo que contiene los elementos que forman el efecto (cubos) en el archivo objetos.xml y veo muy fácil el modificar los datos relacionados con cada uno. Hay otros archivos en carpetas "notes" que no se muy bien para que funcionan.
crear simplemente una esfera, o un plano, o otro elemento es tan solo invocarlo y dar sus caracteristicas (posicion, tamaño, textura...)?
ahora toca descifrar el codigo actionscript, a ver si me es tan facil jejeje.
Te comentare a través del ejemplo de los cubos.
capitulo1: camaras.
-Camera3d.
He visto que la orden hover sirve para el movimiento de la cámara en funcion del movimiento del raton. En el ejemplo de los cubos no veo esa orden, sino una funcion EnterFrame y las variables nodo y visor. Son lo mismo las dos cosas?
-FreeCamera3d.
Con la orden TransformView, se pueden crear esos efectos de que al pulsar en un objeto lejano, la cámara se acerque? Como funciona? O este sistema se realiza con una freecamera (no depende del objeto).
camara.z se refiere a girar entorno del objeto? porque no acabo de ver mucho la diferencia entre camara.y y camara.z
no se si te voy a marear, pero querria comentarte otro tema, que tiene que ver con la opcion camera3D y un BlurFilter de flash.
He visto el ejemplo del blog de enfoque y desenfoque. Un poco complicado para mi entender de momento tanto código.
Para ser mas sencillo, como seria, por ejemplo, tener un plano en la lejania desenfocado (por ejemplo conteniendo una foto) y que cuando se pulse sobre el, la cámara haga un zoom al objeto, enfocandolo y acercandose a el?
Esto me servira para complementar el tema de los cubos, para poder hacer que, al pulsar en uno de los cubos me lleve a uno de los planos que esten detras desenfocados. Este efecto de zoom lo he visto en el ejemplo que me decias del carrusel3d. Le dare tambien un vistazo.
gracias de nuevo!
pd. si deseas enviarme documentacion o algun ejemplo sobre lo que comentamos por mail lo he activado para que esté visible
He subido un nuevo ejemplo al blog. Ahora, cuando pulsas sobre un cubo, la cámara hace un travelling hacia él. No sé si es el efecto que vas buscando; variaciones hay miles ;-).
La geometría sigue estando generada directamente desde PV3D, he mapeado cada cara de los cubos con su textura tostada por lo que puede tardar algo más en descargarse.
Con respecto a tus "dudillas", vayamos por partes.
1. Xml. Es un formato de intercambio de datos muy extendido en Internet. No está relacionado directamente con PV3D, pero Flash lo procesa muy bien y es fácil obtener datos de cualquier xml. A poco que te mentas en este mundillo, te vas a "jartar" de verlo/utilizarlo.
Lo he empleado para pasarle las posiciones, tamaños y texturas de los cubos (estos datos ya los conocía del modelo de Max. En la ayuda de Flash puedes encontrar abundante información sobre cómo leer y procesar un xml.
2. Las cámaras en PV. Son objetos 3D como los cubos, planos, etc. Por tanto tienen las propiedades x, y, z (sus coordenadas en 3D). Además tienen un target (el mismo concepto del target de las cámaras de Max) El target es el punto hacia donde mira la cámara. Si lo mueves haces que la cámara cambie de punto de vista. También existen FreeCameras (igual que en Max) que no tienen target; esta cámara debes rotarlas en el espacio para que cambien el punto de vista. Según que casos, pueden ser más, o menos, difíciles de utilizar.
3. Los filters (glowFilter, blurFilter, etc.) se aplican a nivel de sprite. Tienes que acceder al container del objeto 3D que estés manipulando y aplicarle el filtro a su propiedad filters (igual que un sprite de Flash normal). No sé si sabes que un filtro es un array, por lo que debes meterlo entre corchetes:
<code>
miSprite.filters = [new BlurFilter(...)];
</code>
Te comenté anteriormente la posibilidad de que utilizaras un editor distinto del que trae el IDE de Flash. Hay varios. Yo utilizo Eclipse y para todo esto de ver qué métodos/propiedades tiene cada objeto es muy fácil. De hecho, la mayoría de propiedades/métodos las voy descubriendo conforme utilizo las clases. También tiene un debugger "bastante mejor" que el de Flash. Puedes consultar practicamente cualquier cosa de la aplicación que estés desarrollando en tiempo de ejecución (valores que va tomando una propiedad, cuándo se produce un evento y quién lo lanzó, etc.).
Hay más, hace tiempo utilizaba el editor SEPY, menos potente que Eclipse. No sé si actualmente habrá mejorado algo, le tengo bastante perdida la pista.
voy a descargarme ahora mismo el eclipse a ver que tal me desenvuelvo!
- El menu cubos: Nos vamos acercando jejeje. No era exactamente lo que decia pero me parece muy bueno el efecto. Puede que incluso me guste mas que el que yo pretendia :). He intentado descargarme el codigo pero la pagina me da error.
Por cierto, una muy buena calidad en el segundo ejemplo de los cubos. En este caso tambien se crean las texturas con el tostado de las superficies?
-No he entendido muy bien la conexion que me dices del xml y 3d studio. He podido ver que no se puede exportar un archivo desde max a xml ( o por lo menos en el mio no). No se si te refieres en decir que has dibujado el elemento (cubo) en max y has cogido sus características y las has escrito en el xml.
-lo de las camaras perfecto. Lo he entendido muy bien. El ser igual que en max me ha resultado claro!!
Con respecto al xml, no me expliqué muy bien. El archivo xml lo creo yo y le digo a la aplicación Flash que lo cargue. Lo que hice fue ver (pero vamos, yo mismo con mi mecanismo ;-)) las coordenadas de cada cubo y escribirlas en el xml.
Y las texturas de los cubos son "tostados" de max, como has adivinado, pero mapeadas sobre primitivas de PV3D. De hecho, puede ser así más rápido, si utilizas código, que exportar el archivo Collada. El único problemas es que los cubos no tienen biseladas las aristas, y canta un poco cuando te acercas a ellas.
ya me lo he descargado, y al probarlo (dandole la ruta de mi greatwhite), me dice que hay una ruta que no exitse haciendo referencia a un archivo menu/bin/MenuCubosFlash.swf que no existe.
otra cosa. me he descargado e instalado el eclipse. Hay alguna manera de cambiar el idioma al español? El tema de este programa es hacer lo mismo que con flash ( a lo que se refiere de código), pero no entiendo de que manera facilita la creacion de proyectos.
yo veo muy bien el ejemplo de los cubos sin collada jejeje. Voy a ver como mapeas las texturas en primitivas de pv3d mirando el código.
buff, vaya lio de programas jejeje a ver si me acabo de aclarar!
bueno, he instalado el archivo nuevo de los cubos dentro del antiguo y ahora me da error en el archivo menucuboszoom.as en las lineas 167, 185 y 189 del tipo:
1046: No se encontró el tipo o no es una constante en tiempo de compilación: InteractiveScene3DEvent.
pd. me gustaria saber a que direccion te puedo enviar unos documentos (no me gustaria colgarlos aqui) o si me envias un mail a mi direccion si no quieres hacerla publica.
El error que te da es que en el rar se me olvidó adjuntar la carpeta bin, con las texturas el xml, y "to la pesca". Esta noche lo arreglaré ;-).
El otro error puede ser que no hayas configurado la ruta a Great White, que seguirá apuntando al GreatWhite de MI ORDENADOR.
Es que estoy habituado a publicar el código con aplicaciones Flex, y con las hechas directamente en Flash tengo que hacerlo a mano, y siempre se me olvida algo.
Por otro lado, Flex/Eclipse están en inglés; no sé si hay alguien por ahí que haya hecho un plugin para pasarlo a español, o algo así. Pero vamos, estos IDE's son siempre lo mismo: que si debugger, que si Run application... :D
Lo bueno es poder elegir, como decía aquel anuncio de móviles.Para gustos los colores ;-).
Flex en principio lo concibió Macromedia (antes de Adobe también había vida) como una herramienta para que los desarrolladores web pudieran utilizar la tecnología Flash sin necesidad de recurrir a editores de páginas web. Para entendernos, si utilizas Flash para hacer una página web, tienes que pasar por Dreamweaver, o programa similar, para "acabar" la página. Esto Flex lo evita.
Además, tiene la grandísima ventaja (creo que es por lo que se ha extendido algo su uso, y no la razón del párrafo anterior XD) de que es un entorno de programación bastante más amigable que el IDE de Flash. Está en inglés, pero como si estuviera en español, te ayuda muchísimo a escribir código, a depurarlo, a organizar el código de tus proyectos...
Puedes encontrar dos versiones de Flex Builder:
1. Un entorno de programación que desarrolló Macromedia (ahora Adobe :-() propio y que no utilizo, básicamente porque en el "curro" han optado por la otra opción.
2. Flex en entorno Eclipse. Te bajas Eclipse (Flex 2 no admite versiones posteriores a Eclipse 3.2) lo descomprimes e instalas Flex eligiendo la opción de instalarse como plugin de Eclipse. Y a correr.
En mi empresa, como utilizan también Java, conocían bastante bien Eclipse y optaron por esta segunda opción.
Ya dentro de Flex tienes dos opciones:
a) Hacer un proyecto Flex propiamente dicho y que es autosuficiente. Una vez acabado, lo subes a tu dominio web, y a funcionar ;-).
b) Hacer un proyecto ActionScript. Esta opción es muy parecida a la de hacer un proyecto dentro de Flash, pero con todas las ventajas de Eclipse:
- Sugerencia de código bastante más "acertada" que la que puede hacerte Flash.
- Un depurador de código que te lo enseña TODO-TODO. Casi se te olvida en socorrido "trace" ;-).
me he instalado eclipse version 3.3.1.1, hasta ahi todo bien.
ahora me he descargado el flex 2 plugin para eclipse, y lo he empezado a instalar.
llego al apartado donde me dice que redireccione la ruta a la carpeta donde se encuentra el archivo eclipse.exe y la carpeta configuration. Se lo indico, le digo a continuar pero me da un mensaje de error, como si no fuera correcta la ruta. raro raro no? dice que no me lo encuentra.
pd. te querria hacer una propuesta para un proyecto que llevo entre manos pero por privado.
Creo que el problema que tienes es el que comenté de la versión de Eclipse. Flex 2, creo, no se puede instalar sobe versiones de Eclipse superiores a la 3.2. Pásate por la página de Eclipse y bájate la versión 3.2. La página tiene un historial de versiones y te puedes descargar antiguas.
bueno, ya tengo instalado flex y eclipse. No habia acabado aun de entender papervision y ahora a utilizar otro mas jejejeje
por lo que he probado, he creado un proyecto de flash dentro de eclipse y se me ha creado lo que yo entiendo como los archivos necesarios para el funcionamiento de la aplicacion.
mientras lo creo, me aparece una ventana con "source path" y "library path". Me podrias hacer un breve resumen de esta ventana? Supongo que es para estrucurar el proyecto.
si sigo adelante y le doy a finish, ya me aparece para escribir en el archivo creado prueba.mxml. Este era el archivo donde rellenabas la informacion de los cubos verdad? Bueno, era un archivo .xml no se si son lo mismo.
Entonces, por ejemplo, en este archivo podria escribir ahora:
jeejee el cubo lo se por el ejemplo, pero seria asi para una esfera, plano o cualquier otro elemento??
Es que tengo muy claro como quiero que sea mi web pero claro, el problema de no saber como hacer cada efecto hace que lo vea muy dificil. suerte que viendo que has hecho el menu de los cubos como queria en pocos dias, me anima a intentar aprender todo lo que pueda.
Lo que se refiere a crear un proyecto, no se si es de otra manera, no se como enfocarlo. Puede ser que se creen todos los archivos necesarios mientras vas cambiando el codigo de los archivos?? Seria la caña jejeje
ufff vaya listado. te dejo descansar un rato (hasta el proximo mensaje ;P)
por cierto, sobre el tema del proyecto que te comenté en la post-data de un mensaje anterior.
Somos un grupo de 16 personas que nos hemos unido para crear una web. Hemos pensado en crear un entorno 3d para la misma. Estoy aprendiendo papervision por este tema y, a la vez, para hacer mi web personal mucho mas atractiva que la que habia realizado en flash (de ahi todo el tema del menu cubos).
He podido comprovar que tienes bastante dominio sobre este tema y por la forma en que te dedicas a contestar los mensajes, siempre ayudando, y el blog en el cual cuelgas aquellos experimentos realizados habia pensado en preguntarte si te gustaria formar parte. nos serias de mucha ayuda, de verdad.
Si te apetece participar o saber mas sobre el tema, enviame un mail a mi direccion y asi te cuento. Si estas muy ocupado o no te apetece no hay problema. Yo sigo aqui preguntandote jejeje asi aprendo para mi web y para el otro proyecto.
de nuevo, agradecerte toda la ayuda que me estas prestando.
Si quieres empezar con Flex, puedes bajarte algún ejemplo del blog. Entra al que más te guste, pulsa botón derecho y elige "View Source". Se te abrirá una ventana con código: eso es Flex. Utiliza un tipo de xml propio llamado mxml (o sea, xml de macromedia :-)).
Sigue los pasos:
1. Verás que hay un enlace a un archivo zip. Te lo descargas y lo descomprimes en la carpeta que tengas configurada como workspace de Eclipse.
2. Creas un nuevo proyecto de Flex: File/New/Flex project.
3. En la ventana "Create a Flex project" en la casilla "Project name" le das EL MISMO NOMBRE que la carpeta donde has descomprimido el zip. Por ejemplo, si te has bajado el ejemplo PuzzleClasico, que se ha descomprimido en la carpeta "PuzzleClasico" introduces en ese campo dicho nombre (es bueno hacer copy&paste para que no falle ningún carácter ;-))
4. Si vas a utilizar algún paquete de clases concreto, por ejemplo, Papervision, en la siguiente ventana, y dentro de la lengûeta Source path, pulsarías el bótón Add Folder y buscarías la ruta del paquete. Por ejemplo, si te has bajado el ejemplo del efecto de desenfoque, que utiliza papervision 1.7, tendrías que darle la ruta donde tengas el paquete con todas estas clases.
5. Pulsas el botón Finish y listo. Verás que te aparecerá una estructura de carpetas a la izquierda de la pantalla con todos los recursos que tiene ese proyecto. Pulsas Ctrl F11 y ejecutarás la aplicación; pulsando F11 sólo, la ejecutas en modo debug, para depurar el código.
Por cierto, en los ejemplos que tienen archivos de imágenes no suelo adjuntar las imágenes con el código fuente para no hacer muy pesado el archivo zip. Si te bajas alguno, por ejemplo el puzzle, bùscate unas imágenes que te gusten, editas el xml donde las lee (así practicas :-)) y le das los nombres de dichas imágenes.
Un saludo.
P.D.: Con respecto a la colaboración, muchas gracias por el ofrecimiento ;-) pero esto es mi hobby y hago cosillas en Flash/Flex para relajarme y olvidar la infografía que es a lo que dedico mi jornada laboral. La verdad es que no quiero comprometerme en algo que hago por diversión. Pero esto no quita que estamos aquí para echarte una mano en lo que haga falta, un nuevo saludo y ánimo con vuestro proyecto :-)
ozke
Por cierto, como agrupais un grupo de Planes en PV3D para, por ejemplo, moverlos todos a la vez?
Un movieclip? un sprite? Estoy usando DisplayObject3D y no se si es por eso o no tengo problemas de visibilidad (se me muestra antes una cosa que esta por debajo y tal)... :S
FR_xx
bueno, viendo que no me desenvuelvo bien, creo que voy a preguntar cosas mas básicas:
-el código actionscript que funciona como clases, que veo que es la base de todo el proceso papervision, se puede aprender de alguna manera? Es decir, me gustaria saber el código a que se refiere cada cosa porque voy borrando cosillas pero no hacen el efecto que yo quiero.
Por ejemplo, en el archivo de los cubos que preparaste, me gustaria quitar el efecto que hace referencia al movimiento del raton (es decir, que se vea fijo la imagen de los cubos). He probado con quitar todas aquellas ordenes que hacen referencia al "visor", pero cuando lo ejecuto ya no se ve nada.
editar: jejeje lo he conseguido!!! He modificado los valores de la class MenuCubos, en las últimas lineas:
geometria.rotationY = 0;
geometria.rotationX = 0;
poniendo los valores a 0 impido el rotar la imagen!!! buenoooo, poco a poco!
tpmmds
Hola:
Vayamos por partes:
1. Si estás tostando las texturas en Max y no tienes mucha experiencia ahí va una "traca" de posibles problemas.
- El mapeado de la textura tostada, por defecto lo hace en el canal 3 del objeto (deberías cambiar el canal a 1) para no interferir con el canal 1 que es el que inicialmente utiliza el objeto para su mapeado.
- Para no perder el material original, Max te crea por defecto un material shell (una carcasa) con el material tostado. Si cargas en el editor de materiales un material ya tostado, verás que tiene 2: el original y el nuevo. Debes dejar sólo el nuevo en el material (el que lleva las texturas tostadas y llama shell el programa); o bien, cuando vayas a tostar en la ventana Render to texture selecciona en el apartado "Baked material" la opción "Output Into Source". Esto es peligroso, porque si no tienes guardada una versión previa del archivo, vas a perder el material original, si tienes que repetir el tostado. Pero la ventaja es que automáticamente el material del objeto es el material tostado, valga la redundancia.
Como te dije, la forma de comprobar que todo va bien es desactivar las luces y ver que la escena parece que sigue iluminada (las luces y sombras ahora están "tostadas" en las texturas). Por cierto, no sé a quién se le ocurrió esto del tostado/Baked de texturas :-D.
- Por defecto, Max guarda las texturas como tga, cambialas a jpg (en la casilla File Name and Type).
Un saludo.
tpmmds
ozke
Por cierto, como agrupais un grupo de Planes en PV3D para, por ejemplo, moverlos todos a la vez?
Un movieclip? un sprite? Estoy usando DisplayObject3D y no se si es por eso o no tengo problemas de visibilidad (se me muestra antes una cosa que esta por debajo y tal)... :S
Hola:
Sí, yo también utilizo esté método para agrupar objetos y que se muevan juntos; lo que no me ha ocurrido es lo que comentas de problemas de visibilidad. Me creo un nodo DisplayObject3D y es al que añado los objetos como hijos, para después moverlo y que se muevan los hijos con él
Un saludo.
tpmmds
FRACTO
editar: jejeje lo he conseguido!!! He modificado los valores de la class MenuCubos, en las últimas lineas:
geometria.rotationY = 0;
geometria.rotationX = 0;
poniendo los valores a 0 impido el rotar la imagen!!! buenoooo, poco a poco!
Sí, por ahí está la clave :-). Si quieres que no se mueva el escenario deja en el método onEnterFrame sólo la linea:
engine.renderScene(escena, camara, visor)
En este sentido, PV es muy explicativo de lo que hace: le estamos diciendo al motor de render que renderice la escena donde hemos añadido la geometría Collada, con la cámara que hemos creado y que lo muestre en el visor.
Un saludo, y ánimo que ya lo tienes "dominao" ;-)
tpmmds
Ah, se me ha pasado el "tema" de Flex. La razón de utilizar Flex es que publicando así es muy fácil adjuntar el código: eclipse tiene una opción que rápidamente te publica el código de la aplicación que estás haciendo, y símplemente pulsando boton derecho accedes a él.
De hecho, los ejemplos que subo yo no tienen
"aspecto Flex", sino más bien parecen hechos en Flash (el IDE).
El único problema que te puedes encontrar al reutilizar el código es que estas clases extienden de la clase "canvas" de Flex, que por así decirlo es su "movieclip" (perdón a los puristas por la comparación, pero es para entendernos ;-)).
Verás que las clases que utilizo extienden de Canvas, todas ellas tienen una primera línea del tipo:
public class MiClaseTal extends Canvas
si esta definición la cambias por
public class MiClaseTal extends Sprite
o por
public class MiClaseTal extends MovieClip
puedes utilizarlas directamente desde Flash cambiando todo lo que sea UIComponent por Sprite o Movieclip
El blog coconnut estaba originalmente pensado para Flex, y yo soy un simple "invitado" en él. Ya se sabe, no saques mucho los piés del plato si no quieres que te "desinviten". Esto último es broma..., si en el fondo me gusta Flex y todo :-D.
Un saludo.
P.D.:Lo que sí te recomendaría es que si vas a programar en actionscript te busques un editor más "amigable" que el que trae Flash. Yo utilizo Eclipse, pero hay muchos más, como SEPY. Si pides opinión seguro en en este foro te recomiendan alguno más.
FR_xx
bueno bueno parece que tengo faena para estudiar jejejej
voy a probar todo lo que me dices y ya te contaré que tal.
varios temas:
- he modificado el tema del canal. Es verdad, estaba en 3 y lo he cambiado a 1. No ha funcionado.
Estoy pensando que el error puede que sea problema del código. Te cuento. La nueva prueba que habia realizado son unas esferas (como si fueran planetas) en el espacio en 3d studio. Les puse a todas la misma textura, las ... vaya, creo que he encontrado un posible error jejej (escribo mientras pruebo). Las imágenes no estan bien tostadas, porque quito las luces y no permanece en la textura. puede que el error venga de ahi. Me puedes explicar como tostar? Puede que no lo hiciera bien siguiendo un tutorial que encontre.
siguiendo con el tema, la orden que tenemos para los cubos es:
private function onLoadComplete(evt:FileLoadEvent):void {
var cubo:TriangleMesh3D;
var material:BitmapFileMaterial;
for (var i:uint=1;i<7; i++) {
cubo = TriangleMesh3D(geometria.getChildByName("caja"+i.toString()));
material = BitmapFileMaterial(cubo.getMaterialByName("mat"+i.toString()));
material.interactive = true;
cubo.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, onMouseClick);
}
this.addEventListener(Event.ENTER_FRAME, onEnterFrame);
para las esferas, habia probado de cambiar el triangleMesh3d por sphere. Esto es correcto? O el programa carga los materiales por triangulación. En el ejemplo de los cubos, inserté un plano en 3dstudio, le di un material, importe a .dae y al ejecutar el flash me aparece perfectamente. Si no le daba material me aparecia el plano definido por triangulos, supongo que esta es la orden. o no?
- estoy mirando, linea a linea, el código para comprender que hace cada parte para saber que lo que toco sirve para algo jejejej
la primera parte que observo es la cámara (de momento me parece mas fácil). He ido modificando los valores para ver que efectos me hace. Ahora, me surge la duda de la orden:
camara.z = -900;
camara.y=250;
me da la sensacion que hacen el mismo efecto, pero no puede ser ya que tengo un poco de conocimiento de ejes en el espacio y estas dos direcciones no son lo mismo jejejej
- una dudilla menor (aunque no menos importante). Cuando publico en flash el proyecto, me crea el archivo .html y .swf complementario, y un archivo javascript .js. Estos son los 3 archivos que necesito subir a mi ftp para poder verlo en la web no? O hace falta que suba todos los archivos que utilizo?
Lo comento porque subi los archivos, cambié el nombre del archivo creado (MenuCubosFlash) por el de index, para que me lo reconozca como página principal pero no me funciona.
de nuevo, agradecerte mucho la paciencia que tienes conmigo porque ya ves que soy muy muy novato. Como no encuentro tutoriales para super-inexpertos como yo cuesta un poco, pero bueno, con paciencia...
gracias de nuevo!!
FR_xx
nada, pruebo y pruebo y no me sale. Creo que lo que hago mal es algun paso de 3dstudio en materiales, camaras o objetos... o tostar no se. Algo debe ser que no hago bien porque el fallo me hace referencia a collada.
te cuento lo que hago yo para un ejemplo sencillo:
-creo un cubo, un plano bajo el y una luz skylight.
-creo un material con un diffuse que es un archivo de imagen.
-escojo el cubo; en el menu modificar -> lista de modificadores. Busco la opcion Unwrap UVW. Busco la pestaña del menu Parameters y edit.
-Me aparece una nueva ventana nueva. Bajo esta pantalla, en el apartado Selection Modes, selecciono la tercera opcion (Face Sub-Object Mode).
-En esta pantalla, menu superior -> Mapeado (Mapping) -> Aplanar mapeado (Flatten Mapping).
-Pongo spacing 0, acepto y cierro la ventana.
-En el menu principal, selecciono Renderización -> Renderizar a textura.
-Otra nueva pantalla. Selecciono el cubo, y le doy en la pestaña Output -> Add -> CompleteMap.
-Modifico estas características:
-Name: Textura
-FileName and Type: busco la ruta y hago un archivo nuevo textura1.jpg
-Size: 1024
-En la siguiente pestaña de esta pantalla (Baked Material), selecciono la opcion Render to Files Only.
-Le doy a cerrar la pantalla.
-Ahora ya me voy al menu principal Archivo -> Exportar -> creo un archivo .DAE y lo grabo en la carpeta dae (como tu ejemplo).
Esto es todo lo referente a lo que hago en el 3d studio. Este sistema me lo baje de un tutorial que encontré en una web. Puede que contenga errores y por eso no lo hago bien. a ver que te parece.
gracias!
pd. acabo de ver en una web de papervision que tenia que hacer referencia a la carpeta papervision3d/as3/trunk/scr . puede que coja los códigos de ahi y por eso me diera error. he probado pero ahora me aparece este nuevo mensaje:
Vertices3d.as, linea 195 -> 1000: Referencia ambigua a Vertex3D.
puede ser porque una esfera no tiene vertices verdad? o es por otro tema?
chicote
Menudo coñazo programar esto. Que alguien le haga una UI ya!! :P
tpmmds
Hola, con respecto al tostado de texturas:
Creo que la mejor opción, si no tienes mucha experiencia, es que mapees los objetos como harías normalmente, los ilumines, y cuando estés contento con el aspecto renderizado que obtengas (sin hacer nada especial de wrappers, shells etc ;-). entres a la ventana de Baked to texture y elijas la opción en el apartado Baked Material: Output intoSource. Esto va a hacer que pierdas el material original (por lo que guarda el archivo max antes con otro nombre) pero no te dará problemas de exportación. Una vez tostados, elige los objetos y conviertelos en malla (los seleccionas y boton derecho/Convert to editable mesh.
si te sigue dando problemas tienes la opción de no renderizar a textura: lo único que ahora va a parecer que la escena no está iluminada y te va a exportar las texturas originales que has aplicado a los materiales.
Lo de actionscript te lo pongo en otro mensaje para diferenciarlo un poco.
Un saludo
tpmmds
Hola:
<fieldset>
private function onLoadComplete(evt:FileLoadEvent):void {
var cubo:TriangleMesh3D;
var material:BitmapFileMaterial;
for (var i:uint=1;i<7; i++) {
cubo = TriangleMesh3D(geometria.getChildByName("caja"+i.toSt ring()));
material = BitmapFileMaterial(cubo.getMaterialByName("mat"+i .toString()));
material.interactive = true;
cubo.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, onMouseClick);
}
this.addEventListener(Event.ENTER_FRAME, onEnterFrame);
</fieldset>
TriangleMex3D es la clase padre de la que heredan la primitivas de Papervision. Así, un cubo, un plano, una esfera... "son" TriangleMex3D, y las llamo así para no tener que particularizar cada caso de primitiva.
Este método lo que hace es obtener por medio de getChildByName la geometría que he exportado desde Max. Si te fijas, estoy localizando los objetos por su nombre que di en Max. Yo llamé a las cajas: caja1, caja2,... y ahora utilizo un bucle para obtenerlas. Si tu tienes, por ejemplo 8 objetos llamados "miCaja1", "miCaja2"... tendrías que cambiar "caja" por "miCaja" para que ese bucle que ahora iría de 1 a 8, recorra todos "TUS OBJETOS".
Lo mismo hay que hacer en la línea que recupero los materiales para decirles que sean interactivos: En getMaterialByName tienes que cambiar el literal "mat" para que se adapte al nombre del material que diste en Max.
Un saludo
tpmmds
Hola:
Con respecto al tema del archivo javascript que te crea Flash, también hay que subirlo. Si no tienes muchas nociones de javascript mejor no toques esta parte. Este archivo sirve para que el explorador no muestre el fastidioso mensaje de "pulsa sobre este componente si quieres activarlo" (o algo así) que aparece en una página cuando lleva contenidos Flash, y también sirve, junto al código de la página html (que tampoco sería convieniente que cambiaras si no tienes muy claro lo que hace) para detectar la versión de Flash y en caso de no ser la 9, indicar al usuario que se actualice.
Un saludo.
FR_xx
vaya, ahora otro problema que no entiendo.
cuando intento ejecutar cualquier elemento (como el de los cubos que tenia, o los nuevos que estoy haciendo) siempre me aparece este error:
Vertices3D.as, Linea 195 -> 1000: Referencia ambigua a Vertex3D.
siempre me sale esto ahora y no se me ejecuta nada. buff que rollo no entender!!! jejeje
pd. nada nada, ya lo he solucionado. un error tonto (como no)!!
FR_xx
bueno, creo que he llegado a tal punto de explosion mental que voy a ir hacia atras como los cangrejos.
De momento dejare todos estos elementos 3d studio para un poco mas adelante, cuando comprenda mejor el lenguaje actionscript y papervision. Perdona por todo el follon que he armado pero me ha servido mucho para animarme a trabajar.
bueno, pues empezando por ahi (y ya que mi post era "como empezar con papervision"), he cogido uno de los archivos de ejemplo que venia con el paquete papervision y lo he simplificado, dejando solo un plano con textura. El código es este:
<code>//inicio del paquete
package
//importar aquellos elementos que hay creados ya en flash
{
import flash.display.*;
import flash.events.*;
// Importar elementos Papervision3D
import org.papervision3d.scenes.*;
import org.papervision3d.cameras.*;
import org.papervision3d.objects.*;
import org.papervision3d.materials.*;
public class main extends Sprite
{
// Creacion de variables necesarias 3D
var container :Sprite;
var scene :Scene3D;
var camera :FreeCamera3D;
// Llamada al archivo de clases main y las funciones siguientes
function main()
{
init3D();
// onEnterFrame
this.addEventListener( Event.ENTER_FRAME, loop3D );
}
// Iniciacion del conjunto de elementos que forman el D
function init3D():void
{
// Añadir contenedor (Sprite) y centrado en la pantalla
container = new Sprite();
addChild( container );
container.x = 320;
container.y = 240;
// Añadir escena
scene = new Scene3D( container );
// Añadir camera
// Hay la posibilidad de una Camera3d (movimiento del visor)
camera = new FreeCamera3D();
// Añadir plano con textura Space
addSpace();
}
// añadimos la funcion de plano y sus caracteristicas
function addSpace():void
{
// Crea textura con un bitmap de la libreria
var materialSpace :BitmapAssetMaterial = new BitmapAssetMaterial( "Space" );
// Creacion del plano
// segmentado en parrilla de 8x8
var plane:DisplayObject3D = new Plane( materialSpace, 4800, 3000, 8, 8 );
// Posicion del plano (distancia)
plane.z = 1500;
// Añadir el plano creado a la escena
scene.addChild( plane );
}
// efecto loop
function loop3D(event:Event):void
{
// Movimiento de la cámara con el raton
// para modificarlo escribir +/-container.mouseX/3 o +/-container.mouseY/3
camera.x = 0;
camera.y = 0;
// Renderizar la escena
scene.renderCamera( camera );
}
}
}
</code>
crees que son correctas todas las anotaciones? El programa funciona bien. me sale un plano fijo, que no puedo mover ahora mismo porque tengo los valores de la cámara a 0.
Ahora vienen dos preguntas, para ir practicando con este ejemplo:
- como incluir un nuevo plano (esta vez sin textura y luego con la misma textura que el anterior).
-como incluir una esfera (de momento estática).
yo de mientras voy mirando el blog de papervision a ver (ya podria estar tambien en español!!!!).
tpmmds
Hola:
Para crear un plano sin texturas, de un color determinado te creas un material de dicho color y se lo asignas al plano:
<code>
var miPlano:Plane = new Plane(new BitmapColorMaterial(0xff0000), 100, 100, 8, 6)
miEscenario3D.addChild(miPlano)
//para crear una esfera azul
var miEsfera:Sphere = new Sphere(new BitmapColorMaterial(0x0000ff, 100, 8, 6)
miEscenario3D.addChild(miEsfera)
</code>
Lo he escrito directamente aquí, por lo que no sé si me he saltado algo ;-)
Junto a las clases que te has bajado, puedes encotrar la documentación de toda la API. Explica las propiedades y métodos de todas las clases y sólo tienes que ir a la que quieras utilizar y ver cómo se crea.
Por otro lado, quizá es que comprendí mal tus intenciones iniciales. Me pareció que querías utilizar Max para crear la geometría y por eso cogí ese camino (que me sirvió para descubrir que en mi blog no se pueden subir archivos collada; todo en esta vida tiene un propósito ;-)). Visto lo visto he reconducido el tema y he hecho el mismo menú directamente en Papervision. La entrada está en el mismo blog:
http://blog.coconnut.com/
El archivo rar tiene la misma estructura que el que subí el otro día. Abres el archivo Fla y configuras la ruta donde están las clases GreatWhite en tu disco duro, y a correr.
El ejemplo carga la geometría de un xml. Los 6 cubos tienen las mismas texturas, pero si te creas texturas nuevas basta con cambiar el xml diciendo los nombres de las nuevas. También puedes especificar la posición, orientación y tamaño de los cubos (se crearán tantos cubos como haya en el archivo xml)
Por cierto, recuerdo que me preguntaste cuál es la orientación de los ejes en Papervision, pues... un poco peculiar, pero bastante habitual en el mundo del 3D:
Eje x: Horizontal, positivo hacia la derecha.
Eje y: Vertical, positivo hacia arriba.
Eje z: Dirección hacia el interior de la pantalla, sentido positivo alejandose del espectador.
Ahora, al pulsar sobre sobre un cubo se llama a una función javascript que está en el código html: "funciónJavascript "(qué original soy :-D). La función no hace mucho, sólo emite un mensaje con el nombre del cubo que se haya pulsado; pero puede servirte para ver cómo se utiliza la clase ExternalInterface que te comenté anteriormente.
Un saludo.
P.D.: Por cierto, las clases que estás utilizando en ese ejemplo creo que son de la versión 1.7 de Papervision; la actual 2.0 es bastante más rápida y fácil de utilizar, por eso fue que la elegí para hacer este ejemplo (que al final se ha convertido en un calvario para tí).
FR_xx
hola muchacho,
ahora mismo me pongo a trabajar.
Si, al principio te comenté lo del 3d studio porque pensaba que seria mucho mas fácil que trabajar con código. Pero claro, tener que aprender aspectos que no conocia en 3d studio y al final igualmente hay que escribir código actionscript, habia pensado en aprender el codigo y hacer los elementos con el mismo. Poco a poco, mientras lo estudio, me parece menos complicado. solo es cuestion de saber como hay que escribir el codigo y para realizar los efectos que ordenes son necesarias.
Estos dias estoy aprendiendo mucho gracias a tu ayuda, asi que seguire siendo un poco mas pesado para seguir aprendiendo este mundillo. Creo que con un buen nivel de aprendizaje se pueden hacer cosas realmente buenas.
de nuevo agradecerte tu ayuda y seguimos en contacto, porque tengo muuuuuuuchas preguntas que hacerte jejejej. pero poco a poco!!! :)
empecemos por un poco de explicacion de xml. Como funciona y en que consiste?
he visto el archivo que contiene los elementos que forman el efecto (cubos) en el archivo objetos.xml y veo muy fácil el modificar los datos relacionados con cada uno. Hay otros archivos en carpetas "notes" que no se muy bien para que funcionan.
crear simplemente una esfera, o un plano, o otro elemento es tan solo invocarlo y dar sus caracteristicas (posicion, tamaño, textura...)?
ahora toca descifrar el codigo actionscript, a ver si me es tan facil jejeje.
Te comentare a través del ejemplo de los cubos.
capitulo1: camaras.
-Camera3d.
He visto que la orden hover sirve para el movimiento de la cámara en funcion del movimiento del raton. En el ejemplo de los cubos no veo esa orden, sino una funcion EnterFrame y las variables nodo y visor. Son lo mismo las dos cosas?
-FreeCamera3d.
Con la orden TransformView, se pueden crear esos efectos de que al pulsar en un objeto lejano, la cámara se acerque? Como funciona? O este sistema se realiza con una freecamera (no depende del objeto).
camara.z se refiere a girar entorno del objeto? porque no acabo de ver mucho la diferencia entre camara.y y camara.z
gracias mil!
FR_xx
hola de nuevo
no se si te voy a marear, pero querria comentarte otro tema, que tiene que ver con la opcion camera3D y un BlurFilter de flash.
He visto el ejemplo del blog de enfoque y desenfoque. Un poco complicado para mi entender de momento tanto código.
Para ser mas sencillo, como seria, por ejemplo, tener un plano en la lejania desenfocado (por ejemplo conteniendo una foto) y que cuando se pulse sobre el, la cámara haga un zoom al objeto, enfocandolo y acercandose a el?
Esto me servira para complementar el tema de los cubos, para poder hacer que, al pulsar en uno de los cubos me lleve a uno de los planos que esten detras desenfocados. Este efecto de zoom lo he visto en el ejemplo que me decias del carrusel3d. Le dare tambien un vistazo.
gracias de nuevo!
pd. si deseas enviarme documentacion o algun ejemplo sobre lo que comentamos por mail lo he activado para que esté visible
tpmmds
Hola:
He subido un nuevo ejemplo al blog. Ahora, cuando pulsas sobre un cubo, la cámara hace un travelling hacia él. No sé si es el efecto que vas buscando; variaciones hay miles ;-).
La geometría sigue estando generada directamente desde PV3D, he mapeado cada cara de los cubos con su textura tostada por lo que puede tardar algo más en descargarse.
Con respecto a tus "dudillas", vayamos por partes.
1. Xml. Es un formato de intercambio de datos muy extendido en Internet. No está relacionado directamente con PV3D, pero Flash lo procesa muy bien y es fácil obtener datos de cualquier xml. A poco que te mentas en este mundillo, te vas a "jartar" de verlo/utilizarlo.
Lo he empleado para pasarle las posiciones, tamaños y texturas de los cubos (estos datos ya los conocía del modelo de Max. En la ayuda de Flash puedes encontrar abundante información sobre cómo leer y procesar un xml.
2. Las cámaras en PV. Son objetos 3D como los cubos, planos, etc. Por tanto tienen las propiedades x, y, z (sus coordenadas en 3D). Además tienen un target (el mismo concepto del target de las cámaras de Max) El target es el punto hacia donde mira la cámara. Si lo mueves haces que la cámara cambie de punto de vista. También existen FreeCameras (igual que en Max) que no tienen target; esta cámara debes rotarlas en el espacio para que cambien el punto de vista. Según que casos, pueden ser más, o menos, difíciles de utilizar.
3. Los filters (glowFilter, blurFilter, etc.) se aplican a nivel de sprite. Tienes que acceder al container del objeto 3D que estés manipulando y aplicarle el filtro a su propiedad filters (igual que un sprite de Flash normal). No sé si sabes que un filtro es un array, por lo que debes meterlo entre corchetes:
<code>
miSprite.filters = [new BlurFilter(...)];
</code>
Te comenté anteriormente la posibilidad de que utilizaras un editor distinto del que trae el IDE de Flash. Hay varios. Yo utilizo Eclipse y para todo esto de ver qué métodos/propiedades tiene cada objeto es muy fácil. De hecho, la mayoría de propiedades/métodos las voy descubriendo conforme utilizo las clases. También tiene un debugger "bastante mejor" que el de Flash. Puedes consultar practicamente cualquier cosa de la aplicación que estés desarrollando en tiempo de ejecución (valores que va tomando una propiedad, cuándo se produce un evento y quién lo lanzó, etc.).
Hay más, hace tiempo utilizaba el editor SEPY, menos potente que Eclipse. No sé si actualmente habrá mejorado algo, le tengo bastante perdida la pista.
Un saludo.
FR_xx
muy buenas
voy a descargarme ahora mismo el eclipse a ver que tal me desenvuelvo!
- El menu cubos: Nos vamos acercando jejeje. No era exactamente lo que decia pero me parece muy bueno el efecto. Puede que incluso me guste mas que el que yo pretendia :). He intentado descargarme el codigo pero la pagina me da error.
Por cierto, una muy buena calidad en el segundo ejemplo de los cubos. En este caso tambien se crean las texturas con el tostado de las superficies?
-No he entendido muy bien la conexion que me dices del xml y 3d studio. He podido ver que no se puede exportar un archivo desde max a xml ( o por lo menos en el mio no). No se si te refieres en decir que has dibujado el elemento (cubo) en max y has cogido sus características y las has escrito en el xml.
-lo de las camaras perfecto. Lo he entendido muy bien. El ser igual que en max me ha resultado claro!!
voy a ver como me desenvuelvo. Gracias!
tpmmds
Hola:
Nada, al escribir el enlace se me saltó una palabra. B ájatelo de aqui
http://blog.coconnut.com/source/jel/MenuCubosFlashZoom/MenuCubosFlash.rar
Esta tarde actualizaré el enlace en el blog.
Con respecto al xml, no me expliqué muy bien. El archivo xml lo creo yo y le digo a la aplicación Flash que lo cargue. Lo que hice fue ver (pero vamos, yo mismo con mi mecanismo ;-)) las coordenadas de cada cubo y escribirlas en el xml.
Y las texturas de los cubos son "tostados" de max, como has adivinado, pero mapeadas sobre primitivas de PV3D. De hecho, puede ser así más rápido, si utilizas código, que exportar el archivo Collada. El único problemas es que los cubos no tienen biseladas las aristas, y canta un poco cuando te acercas a ellas.
Un saludo
FR_xx
ya me lo he descargado, y al probarlo (dandole la ruta de mi greatwhite), me dice que hay una ruta que no exitse haciendo referencia a un archivo menu/bin/MenuCubosFlash.swf que no existe.
otra cosa. me he descargado e instalado el eclipse. Hay alguna manera de cambiar el idioma al español? El tema de este programa es hacer lo mismo que con flash ( a lo que se refiere de código), pero no entiendo de que manera facilita la creacion de proyectos.
yo veo muy bien el ejemplo de los cubos sin collada jejeje. Voy a ver como mapeas las texturas en primitivas de pv3d mirando el código.
buff, vaya lio de programas jejeje a ver si me acabo de aclarar!
FR_xx
bueno, he instalado el archivo nuevo de los cubos dentro del antiguo y ahora me da error en el archivo menucuboszoom.as en las lineas 167, 185 y 189 del tipo:
1046: No se encontró el tipo o no es una constante en tiempo de compilación: InteractiveScene3DEvent.
pd. me gustaria saber a que direccion te puedo enviar unos documentos (no me gustaria colgarlos aqui) o si me envias un mail a mi direccion si no quieres hacerla publica.
muchas gracias
tpmmds
Hola:
El error que te da es que en el rar se me olvidó adjuntar la carpeta bin, con las texturas el xml, y "to la pesca". Esta noche lo arreglaré ;-).
El otro error puede ser que no hayas configurado la ruta a Great White, que seguirá apuntando al GreatWhite de MI ORDENADOR.
Es que estoy habituado a publicar el código con aplicaciones Flex, y con las hechas directamente en Flash tengo que hacerlo a mano, y siempre se me olvida algo.
Por otro lado, Flex/Eclipse están en inglés; no sé si hay alguien por ahí que haya hecho un plugin para pasarlo a español, o algo así. Pero vamos, estos IDE's son siempre lo mismo: que si debugger, que si Run application... :D
Un saludo.
FR_xx
muy bien, veo que voy aprendiendo porque ya se los errores a que puede ser debidos jejeje
que me recomiendas, flex o eclipse? los dos? son fáciles de utilizar? Que diferencias hay entre Flex 2, Flex Builder, Flex 3... no se cual descargar.
saludos!
tpmmds
Hola:
Lo bueno es poder elegir, como decía aquel anuncio de móviles.Para gustos los colores ;-).
Flex en principio lo concibió Macromedia (antes de Adobe también había vida) como una herramienta para que los desarrolladores web pudieran utilizar la tecnología Flash sin necesidad de recurrir a editores de páginas web. Para entendernos, si utilizas Flash para hacer una página web, tienes que pasar por Dreamweaver, o programa similar, para "acabar" la página. Esto Flex lo evita.
Además, tiene la grandísima ventaja (creo que es por lo que se ha extendido algo su uso, y no la razón del párrafo anterior XD) de que es un entorno de programación bastante más amigable que el IDE de Flash. Está en inglés, pero como si estuviera en español, te ayuda muchísimo a escribir código, a depurarlo, a organizar el código de tus proyectos...
Puedes encontrar dos versiones de Flex Builder:
1. Un entorno de programación que desarrolló Macromedia (ahora Adobe :-() propio y que no utilizo, básicamente porque en el "curro" han optado por la otra opción.
2. Flex en entorno Eclipse. Te bajas Eclipse (Flex 2 no admite versiones posteriores a Eclipse 3.2) lo descomprimes e instalas Flex eligiendo la opción de instalarse como plugin de Eclipse. Y a correr.
En mi empresa, como utilizan también Java, conocían bastante bien Eclipse y optaron por esta segunda opción.
Ya dentro de Flex tienes dos opciones:
a) Hacer un proyecto Flex propiamente dicho y que es autosuficiente. Una vez acabado, lo subes a tu dominio web, y a funcionar ;-).
b) Hacer un proyecto ActionScript. Esta opción es muy parecida a la de hacer un proyecto dentro de Flash, pero con todas las ventajas de Eclipse:
- Sugerencia de código bastante más "acertada" que la que puede hacerte Flash.
- Un depurador de código que te lo enseña TODO-TODO. Casi se te olvida en socorrido "trace" ;-).
Un saludo
FR_xx
nueva duda:
me he instalado eclipse version 3.3.1.1, hasta ahi todo bien.
ahora me he descargado el flex 2 plugin para eclipse, y lo he empezado a instalar.
llego al apartado donde me dice que redireccione la ruta a la carpeta donde se encuentra el archivo eclipse.exe y la carpeta configuration. Se lo indico, le digo a continuar pero me da un mensaje de error, como si no fuera correcta la ruta. raro raro no? dice que no me lo encuentra.
pd. te querria hacer una propuesta para un proyecto que llevo entre manos pero por privado.
gracias!
tpmmds
Hola:
Creo que el problema que tienes es el que comenté de la versión de Eclipse. Flex 2, creo, no se puede instalar sobe versiones de Eclipse superiores a la 3.2. Pásate por la página de Eclipse y bájate la versión 3.2. La página tiene un historial de versiones y te puedes descargar antiguas.
Un saludo.
FR_xx
bueno, ya tengo instalado flex y eclipse. No habia acabado aun de entender papervision y ahora a utilizar otro mas jejejeje
por lo que he probado, he creado un proyecto de flash dentro de eclipse y se me ha creado lo que yo entiendo como los archivos necesarios para el funcionamiento de la aplicacion.
mientras lo creo, me aparece una ventana con "source path" y "library path". Me podrias hacer un breve resumen de esta ventana? Supongo que es para estrucurar el proyecto.
si sigo adelante y le doy a finish, ya me aparece para escribir en el archivo creado prueba.mxml. Este era el archivo donde rellenabas la informacion de los cubos verdad? Bueno, era un archivo .xml no se si son lo mismo.
Entonces, por ejemplo, en este archivo podria escribir ahora:
<xml>
<mx>
<xml>
- <objetos>
- <cubo>
<posicion>
<rotacion>
<dimensiones>
- <texturas>
<textura>texturas/tex1.jpg</textura>
<textura>texturas/tex2.jpg</textura>
<textura>texturas/tex3.jpg</textura>
<textura>texturas/tex4.jpg</textura>
<textura>texturas/tex5.jpg</textura>
<textura>texturas/tex6.jpg</textura>
</texturas>
</cubo>
- <esfera>
<posicion>
<dimensiones>
- <textura></textura>
</esfera>
- <plano>
<posicion>...
<dimensiones>...
<textura>...
</plano>
jeejee el cubo lo se por el ejemplo, pero seria asi para una esfera, plano o cualquier otro elemento??
Es que tengo muy claro como quiero que sea mi web pero claro, el problema de no saber como hacer cada efecto hace que lo vea muy dificil. suerte que viendo que has hecho el menu de los cubos como queria en pocos dias, me anima a intentar aprender todo lo que pueda.
Lo que se refiere a crear un proyecto, no se si es de otra manera, no se como enfocarlo. Puede ser que se creen todos los archivos necesarios mientras vas cambiando el codigo de los archivos?? Seria la caña jejeje
ufff vaya listado. te dejo descansar un rato (hasta el proximo mensaje ;P)
gracias!
FR_xx
por cierto, sobre el tema del proyecto que te comenté en la post-data de un mensaje anterior.
Somos un grupo de 16 personas que nos hemos unido para crear una web. Hemos pensado en crear un entorno 3d para la misma. Estoy aprendiendo papervision por este tema y, a la vez, para hacer mi web personal mucho mas atractiva que la que habia realizado en flash (de ahi todo el tema del menu cubos).
He podido comprovar que tienes bastante dominio sobre este tema y por la forma en que te dedicas a contestar los mensajes, siempre ayudando, y el blog en el cual cuelgas aquellos experimentos realizados habia pensado en preguntarte si te gustaria formar parte. nos serias de mucha ayuda, de verdad.
Si te apetece participar o saber mas sobre el tema, enviame un mail a mi direccion y asi te cuento. Si estas muy ocupado o no te apetece no hay problema. Yo sigo aqui preguntandote jejeje asi aprendo para mi web y para el otro proyecto.
de nuevo, agradecerte toda la ayuda que me estas prestando.
muchas gracias!
tpmmds
Hola:
Si quieres empezar con Flex, puedes bajarte algún ejemplo del blog. Entra al que más te guste, pulsa botón derecho y elige "View Source". Se te abrirá una ventana con código: eso es Flex. Utiliza un tipo de xml propio llamado mxml (o sea, xml de macromedia :-)).
Sigue los pasos:
1. Verás que hay un enlace a un archivo zip. Te lo descargas y lo descomprimes en la carpeta que tengas configurada como workspace de Eclipse.
2. Creas un nuevo proyecto de Flex: File/New/Flex project.
3. En la ventana "Create a Flex project" en la casilla "Project name" le das EL MISMO NOMBRE que la carpeta donde has descomprimido el zip. Por ejemplo, si te has bajado el ejemplo PuzzleClasico, que se ha descomprimido en la carpeta "PuzzleClasico" introduces en ese campo dicho nombre (es bueno hacer copy&paste para que no falle ningún carácter ;-))
4. Si vas a utilizar algún paquete de clases concreto, por ejemplo, Papervision, en la siguiente ventana, y dentro de la lengûeta Source path, pulsarías el bótón Add Folder y buscarías la ruta del paquete. Por ejemplo, si te has bajado el ejemplo del efecto de desenfoque, que utiliza papervision 1.7, tendrías que darle la ruta donde tengas el paquete con todas estas clases.
5. Pulsas el botón Finish y listo. Verás que te aparecerá una estructura de carpetas a la izquierda de la pantalla con todos los recursos que tiene ese proyecto. Pulsas Ctrl F11 y ejecutarás la aplicación; pulsando F11 sólo, la ejecutas en modo debug, para depurar el código.
Por cierto, en los ejemplos que tienen archivos de imágenes no suelo adjuntar las imágenes con el código fuente para no hacer muy pesado el archivo zip. Si te bajas alguno, por ejemplo el puzzle, bùscate unas imágenes que te gusten, editas el xml donde las lee (así practicas :-)) y le das los nombres de dichas imágenes.
Un saludo.
P.D.: Con respecto a la colaboración, muchas gracias por el ofrecimiento ;-) pero esto es mi hobby y hago cosillas en Flash/Flex para relajarme y olvidar la infografía que es a lo que dedico mi jornada laboral. La verdad es que no quiero comprometerme en algo que hago por diversión. Pero esto no quita que estamos aquí para echarte una mano en lo que haga falta, un nuevo saludo y ánimo con vuestro proyecto :-)