[ESPapervision3D - 559] girar los elementos de un cono

3 views
Skip to first unread message

Carlos A.G.

unread,
May 17, 2010, 2:07:02 PM5/17/10
to ESPapervision3D
Hola a todos haber si alguien me puede yudar... he creado un cono y he
puesto en cada uno de sus vertices un
plano. lo que quiero hacer es que los lados más cortos de los planos
miren al centro, como si fueran unas aspas de un molino.

este es el codigo que tengo:

package {

import org.papervision3d.view.BasicView;

import flash.display.DisplayObject;
import flash.display.Loader;
import flash.net.URLRequest;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.events.MouseEvent;

import
org.papervision3d.core.proto.MaterialObject3D;
import org.papervision3d.events.InteractiveScene3DEvent;
import org.papervision3d.materials.BitmapFileMaterial;
import org.papervision3d.materials.BitmapMaterial;
import org.papervision3d.materials.ColorMaterial;
import org.papervision3d.materials.MovieMaterial;
import org.papervision3d.objects.DisplayObject3D;
import org.papervision3d.events.FileLoadEvent;

import
org.papervision3d.objects.primitives.Cone;
import org.papervision3d.objects.primitives.Plane;



import
org.papervision3d.core.math.Number3D;




public class carrusel extends BasicView
{
private var pivotDO3D:DisplayObject3D;




public function carrusel()
{
stage.frameRate = 40;
init();
startRendering();
}


private function init():void
{

pivotDO3D = new DisplayObject3D();
scene.addChild(pivotDO3D);

//creo el cilindro pero no lo añado
var cono:Cone= new Cone(null,100,700,7,7);




//creo sus vertices
var numberOfVerts:uint = cono.geometry.vertices.length ;

for( var i:uint=0;i<26;i++)
{

var plane:Plane = new Plane(createBitmapMaterial(),75,50);

//añado un plano en cada coordenada
plane.x = cono.geometry.vertices[i].x;
plane.y = cono.geometry.vertices[i].y;
plane.z = cono.geometry.vertices[i].z;

plane.material.doubleSided = true;



plane.localRotationX = 90;
plane.localRotationZ = 90;




pivotDO3D.addChild(plane);



pivotDO3D.rotationX=270;
pivotDO3D.rotationZ=90;



}









viewport.interactive = true;


camera.z = 600;
camera.zoom = 80;
camera.target=pivotDO3D;



}










//creo el BitmapMaterial
private function
createBitmapMaterial():BitmapMaterial
{

var material:BitmapFileMaterial = new
BitmapFileMaterial("assets/image1.jpg",true);
return material;


}















override protected function
onRenderTick(e:Event=null):void
{


pivotDO3D.z +=(stage.mouseY - stage.stageHeight / 2) / 200;
super.onRenderTick();



}



}
}

--
Has recibido este mensaje porque estás suscrito al grupo "ESPapervision3D" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a ESPaper...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a ESPapervision...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/ESPapervision3D?hl=es.

laHabichuela

unread,
May 17, 2010, 6:00:15 PM5/17/10
to espaper...@googlegroups.com
No acabo de entender tu duda, un plano no tiene lado mas corto... Si lo que quieres es poder girar el plano de tal manera que visto desde arriba parezca que estan en un circulo, busca el angulo que forma ese punto con otro punto o en este caso con el centro del plano XZ (por el codigo intuyo que buscas el valor a meter en rotationY...).

En la wikipedia o en cualquier sitio de mates / libros de texto del cole (yo uso mucho la trigonometria del instituto) puedes ver como se haya el angulo que forma un punto con respecto a otro en un plano, y en principio con eso te valdria....(si no recuerdo mal es con el arco tangente)

Si no, pues cuentanos un poco mas... Suerte!!

Saludos

2010/5/17 Carlos A.G. <calg...@gmail.com>

Carlos A.G.

unread,
May 18, 2010, 8:57:04 AM5/18/10
to espaper...@googlegroups.com
Lo siento es que no sabía como explicarme y desde el correo de la web no me dejaba meter imagenes..

aqui mando dos imagenes una como lo tengo ahora y otra lo que quiero(recuadro rojo)...

El problema que tengo esque todos los planos forman el cono y no se como aplicalo dentro, he hecho pruevas pero me salen descolocados los ultimos...



gracias,
Sin título-2.jpg

laHabichuela

unread,
May 26, 2010, 1:17:50 PM5/26/10
to espaper...@googlegroups.com
como te decia en el primer correo, busca el angulo que forma el plano con el centro.

por ejemplo, si el eje del cono esta en x:0 y:0, si el plano de arriba a la derecha esta en x:30, y:40 y z:0, y teniendo en cuenta que todos los planos son paralelos a XY (que todos los planos de un nivel estan en la misma z):

calcula el angulo que forma el plano con el origen, arcotangente de 30/40, y ese angulo se lo aplicas a rotationZ. Ten en cuenta que el arcotangente es igual en la mitad de la circunferencia, por lo que se te quedaria "mal girados" la mitad de los planos. Para solucionarlo usa Math.atan2, y pasale directamente x e y.

En caso de que el eje no este en 0, 0 puedes o bien meter todo en un do3d y desplazar este, (asi todo estaria centrado por dentro y colocado por fuera) o restar el origen del punto que pases al calcular el arcotangente.

saludos

2010/5/18 Carlos A.G. <calg...@gmail.com>

Carlos A.G.

unread,
May 27, 2010, 11:36:09 AM5/27/10
to espaper...@googlegroups.com
gracias, pero ya lo resolvi la semana en vez de meterlos en un cono, los metí en un cilindro y  le quité las tapas despues meti cada plano en sus vertices y le aplique esta rotacion:

 plane.localRotationY = 360 / NumPlanos * i; 
                         
 plane.localRotationX  = 90;

contenedor.addChild(plane); 
                       
contenedor.rotationX = 270;

No se si es lo que me querias explicar  pero el resultado es lo que quería...

Bueno gracias otra vez por malgastar tu tiempo en estas bobadas, me imagino que esto será una pijada para ti, pero a mi me su llevo tiempo...

laHabichuela

unread,
May 27, 2010, 12:47:51 PM5/27/10
to espaper...@googlegroups.com
buena esa, mucho mas sencilla que la mia

yo mas o menos te explicaba como hacerlo de forma generica, para cualquier figura, digamos que haces que el plano "mire" al centro del cono...



2010/5/27 Carlos A.G. <calg...@gmail.com>
Reply all
Reply to author
Forward
0 new messages