| zerAlex2 |
05.08.2012 12:11 |
Геометрия
Сделал сферу в PV3D, теперь нужно разместить ряд Plane-ов в соотвествии со смещениями по x,y относительно дифузной карты на сфере.
Есть XML c данными о смещении по x и y относительно картинки:
Код:
<plane id="1" shiftX="30" shiftY="0" distance="350" scale="20"></p>
<plane id="2" shiftX="235" shiftY="-220" distance="350" scale="20"></p>
<plane id="3" shiftX="663" shiftY="150" distance="350" scale="20"></p>
Данные читаются в массив planeArray.
И такой код:
Код AS3:
...
sphere_obj = new Sphere(mat, 400, 50, 50);//Сфера с текстурой
scene.addChild(sphere_obj);
...
var imgW:Number=3400;//Ширина картинки
var imgH:Number=1700;//Высота картинки
var arrCount:Number=planeArray.length;
for (var i:Number=0; i<arrCount; i++)
{
//0-id, 1-shiftX, 2-shiftY, 3-distance, 4-scale
var id=planeArray[i][1];
var shiftX=planeArray[i][1];
var shiftY=planeArray[i][2];
var distance=planeArray[i][2];
var scale=planeArray[i][2];
var plane:DisplayObject3D=new Plane(materialOn, scale, scale);
plane.name="pl"+id;
planeArray[i][7]=plane.name;
scene.addChild(plane);
var angleX=shiftX/(imgW/360);//смещение/(пикселей на 1 градус)
var angleY=(shiftY-(imgH/2))/(imgH/360);//смещение/(пикселей на 1 градус/2)<- 0 находится по центру img
//А тут у меня пробки выбивает (
plane.x=distance*Math.sin(toRadians(angleX));//toRadians - функия перевода в радианы
plane.z=distance*Math.cos(toRadians(angleX));
plane.y=distance*Math.sin(toRadians(angleY));//вот тут затык
plane.rotationY=angleX;
plane.rotationX=angleY;
}
Смещения по X получаются отлично, но как поднять или опустить Plane в соответствии со смщением по Y... сразу же должны меняться координаты Plane по .x и .z Не догоняю.
Добавлено через 54 часа 8 минут
[IMG]http://s2.********************/uploads/images/2012/08/05c4f90f160d6ef641e74f8f64968e5a.jpg[/IMG]
Короче, это чертёж. А как я сделал - не скажу )
|