Просмотр полной версии : Вращение изображения, "натянутого на цилиндир"
Заранее извиняюсь, если неправильно выбрал ветку.
Есть изображение - стрелка. Нужно сделать следующее: как-будто стрелка нарисована на прозрачном цилиндре (сама стрелка изображена на цилиндрической поверхности), цилиндр вращается, и при этом цилиндр немного повернут в сторону наблюдателя (т.е. видно что цилиндр объемный). При этом самого цилиндра не видно. Насколько я понял, в Swift 3D этого сделать нельзя, вроде бы можно в Papervision, но это достаточно сложно. Может быть есть более легкие способы?
Варианты:
1. Нарисовать в любой знакомой вам программе 3d моделирования. Сделать серию картинок. Последовательно показать картинки.
2. Нарисовать текстуру со стрелкой. С помощью drawTriangles (http://help.adobe.com/ru_RU/as3/dev/WS84753F1C-5ABE-40b1-A2E4-07D7349976C4.html) создать цилиндр и натянуть на него текстуру. Вращать цилиндр.
3. Нарисовать текстуру со стрелкой. С помощью любого 3d движка (Papervision уже четыре года не обновлялся и устарел) создать цилиндр и натянуть на него текстуру. Вращать цилиндр.
Кстати, почему вы решили, что Swift 3D не справится?
Кстати, почему вы решили, что Swift 3D не справится?
Я так решил, бегло изучив его функционал (возможно, что то упустил). Информации о нем на русском практически нет, в английском не очень силен. Я так понимаю, задача бы решалась в Swift'те, если бы можно было загрузить свою текстуру со стрелкой, но я не нашел там подобной функции.
http://www.erain.com/swift_3d_v6.html#/3
http://www.erain.com/swift_3d_v6.html#/3
Спасибо! Буду разбираться.
если ограничений по wmode=direct нет, то имо самый простой это #3 из того, что alatar расписал
пример для away3d:
package
{
import away3d.containers.View3D;
import away3d.entities.Mesh;
import away3d.materials.TextureMaterial;
import away3d.primitives.CylinderGeometry;
import away3d.utils.Cast;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.geom.Vector3D;
public class Main extends Sprite
{
private var view:View3D;
private var cylinder:Mesh;
[Embed(source = "arrow.png")] private const arrow_png:Class;
public function Main():void
{
view = new View3D();
view.width = 256;
view.height = 256;
view.camera.z = 150;
view.camera.y = 50;
view.camera.lookAt(new Vector3D());
var mat:TextureMaterial = new TextureMaterial(Cast.bitmapTexture(arrow_png));
mat.bothSides = true;
mat.alphaBlending = true;
cylinder = new Mesh(new CylinderGeometry(50, 50, 100, 32, 1, false, false), mat);
addChild(view);
view.scene.addChild(cylinder);
addEventListener(Event.ENTER_FRAME, render);
}
private function render(e:Event):void
{
cylinder.rotationY -= 1;
view.render();
}
}
}
cylinder.swf
но не уверен, что флешка здесь правильно покажет, ибо wmode=direct нужен
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.