package {
import flash.display.*;
import flash.events.*;
import flash.geom.*;
import flash.text.*;
import org.papervision3d.scenes.*;
import org.papervision3d.objects.*;
import org.papervision3d.cameras.*;
import org.papervision3d.materials.*;
[SWF(width="400", height="400", backgroundColor="#000000", frameRate="30")]
// BitmapMaterial と MovieMaterial (テキスト表示) のサンプル
public class MaterialSample extends Sprite {
private var container : Sprite;
private var scene : Scene3D;
private var camera : Camera3D;
private var rootNode : DisplayObject3D;
private var obj:Array = new Array();
// 3Dオブジェクト踊らせ用パラメータ
private var valx : Number = 0;
private var valy : Number = 0;
// Bitmap
private var bitmapdata:BitmapData;
// Text
private var text:TextField;
private var material:MovieMaterial
public function MaterialSample():void {
// 画面いっぱいに表示(縦横比無視)したいときはコレを使う
// stage.scaleMode = StageScaleMode.EXACT_FIT;
// リサイズに対応(swfをブラウザで直接ひらいているときとか)
stage.addEventListener(Event.RESIZE, onStageResize);
// 定期的にイベント発生
addEventListener(Event.ENTER_FRAME, myLoopEvent);
// マウスクリックでイベント発生
stage.addEventListener(MouseEvent.CLICK, myClick);
// 表示用の Sprite オブジェクトを生成
container = new Sprite();
container.x = 400 / 2; // at center : swf width = 400
container.y = 400 / 2; // at center : swf height = 400
addChild(container);
// シーンオブジェクトを作る
scene = new Scene3D(container);
// カメラオブジェクトを作る
camera = new Camera3D();
camera.z = -200;
camera.focus = 500;
camera.zoom = 1;
// ルートノードを作る
rootNode = new DisplayObject3D();
scene.addChild(rootNode);
// いろんな3Dオブジェクトを作ってみて、配列に入れておく
obj.push(createWireframePlane());
obj.push(createBitmapPlane());
obj.push(createTextPlane());
obj.push(createTextCube());
// 3Dオブジェクトをルートノードに追加
for(var i:int; i<obj.length; i++){
rootNode.addChild(obj[i]);
}
}
private function createWireframePlane():DisplayObject3D {
var material:WireframeMaterial = new WireframeMaterial();
material.oneSide = false;
material.lineColor = 0x00FF00;
material.lineAlpha = 1;
var planeSize:int = 200;
var segment:int = 2;
var plane:Plane = new Plane(
material, planeSize, planeSize, segment, segment);
plane.x = 0;
plane.y = 180;
plane.z = 0;
return plane;
}
private function createBitmapPlane():DisplayObject3D {
var bd:BitmapData = new BitmapData(100, 100, false);
this.bitmapdata = bd; // using this
var material:BitmapMaterial = new BitmapMaterial(bd);
material.oneSide = false;
material.lineColor = 0x00FF00;
material.lineAlpha = 1;
var planeSize:int = 200;
var segment:int = 2;
var plane:Plane = new Plane(
material, planeSize, planeSize, segment, segment);
plane.x = -180;
plane.y = 0;
plane.z = 0;
return plane;
}
private function createTextPlane():DisplayObject3D {
var asset:MovieClip = createMovieClip();
var transparent:Boolean = true;
var initObject:Object = {animated:true, doubleSided:true};
var material:MovieMaterial = new MovieMaterial(asset, transparent, initObject);
this.material = material; // using this
var planeSize:int = 200;
var segment:int = 2;
var plane:Plane = new Plane(
material, planeSize, planeSize, segment, segment);
plane.x = 180;
plane.y = 0;
plane.z = 0;
return plane;
}
private function createTextCube():DisplayObject3D {
var planeSize:int = 200;
var segment:int = 2;
// using this
var cube:Cube = new Cube(
this.material, planeSize, planeSize, planeSize, segment, segment, segment);
cube.x = 0;
cube.y = 0;
cube.z = 0;
return cube;
}
private function createMovieClip():MovieClip {
var mc:MovieClip = new MovieClip();
var text:TextField = createTextField();
text.text = getPropertiesString(mc);
mc.addChild(text);
this.text = text; // using this
return mc;
}
private static function createTextField():TextField{
// 表示メッセージのスタイル
var format:TextFormat = new TextFormat();
format.bold = false;
format.italic = false;
format.size = 10;
format.underline = false;
format.font = "_等幅";
// 表示メッセージ
var text:TextField = new TextField();
text.autoSize = TextFieldAutoSize.LEFT;
text.selectable = false;
text.setTextFormat(format);
text.background = true;
text.backgroundColor = 0x000000;
text.border = false;
text.borderColor = 0xFFFFFF;
text.textColor = 0xFFFFFF;
return text;
}
// 最初だけこんなの表示してみる
private static function getPropertiesString(mc:MovieClip):String {
var str:String = ""
+ "currentFrame: " + mc.currentFrame + "\n"
+ "currentLabel: " + mc.currentLabel + "\n"
+ "currentScene: " + mc.currentScene + "\n"
+ "framesLoaded: " + mc.framesLoaded + "\n"
+ "totalFrames: " + mc.totalFrames + "\n"
+ "trackAsMenu: " + mc.trackAsMenu + "\n";
return str;
}
private function myClick(event:MouseEvent):void {
// update Bitmap
// Math.random: (0 <= n < 1)
var x:int = (int)(Math.random() * 100);
var y:int = (int)(Math.random() * 100);
// bitmapdata.setPixel(x, y, 0xFF0000);
var rect:Rectangle = new Rectangle(x, y, 20, 20);
bitmapdata.fillRect(rect, 0xFF0000);
// update Text
text.border = !text.border; // ワクを付けたり消したり
text.background = !text.background; // 背景を付けたり消したり
text.text = "マウスを\nクリックした位置:\nLocation(" + container.mouseX + "," + container.mouseY + ")";
material.updateBitmap(); // 更新を通知
//scene.renderCamera(camera);
}
private function myLoopEvent(event:Event):void {
valx += container.mouseX / 50;
valy += container.mouseY / 50;
for(var i:int; i<obj.length; i++){
obj[i].rotationY = valx;
obj[i].rotationX = valy;
}
scene.renderCamera(camera);
}
private function onStageResize(event:Event):void {
container.x = stage.stageWidth / 2;
container.y = stage.stageHeight / 2;
}
}
}
分享到:
相关推荐
7. **Papervision3D中文帮助**:这个教程包特别包含了中文帮助文档,对于中文使用者来说是一大福音,它可以帮助初学者更轻松地理解Papervision3D的概念和技术,克服语言障碍。 8. **实战教程**:教程可能涵盖了从...
综上所述,《Papervision3D.Essentials》不仅是一本入门指南,更是一部详尽的技术手册,旨在帮助读者克服在使用Papervision3D过程中可能遇到的各种挑战,并通过实际案例加深对这项技术的理解和掌握。无论是对于初学...
本资源包“Papervision3D-demo.rar”包含了7个使用Papervision3D引擎制作的实例源码,是学习和理解Papervision3D功能与应用的宝贵资料。 1. **Papervision3D基础知识** - **渲染引擎**:Papervision3D是一个强大的...
PaperVision3D使用ActionScript 3.0(AS3.0)进行编程,这是一种面向对象的脚本语言,相较于AS2.0,其性能显著提升,内存管理更加高效。通过PaperVision3D,开发者可以创建3D模型、纹理、灯光、相机视角等元素,并在...
Papervision3D是一个基于ActionScript 3.0的开源框架,专为在Adobe Flash环境中构建三维(3D)图形和应用而设计。这个框架的出现极大地扩展了Flash平台的功能,使得开发者能够利用Flash Player在网页上创建复杂的3D...
例如,可以使用Papervision3D构建一个3D购物网站,让用户从各个角度查看商品;或者开发一款3D游戏,提供沉浸式的游戏体验。同时,Papervision3D也支持自定义渲染管道,这意味着开发者可以根据需求调整和优化渲染过程...
《Papervision3D API详解》 Papervision3D(PV3D)是Flash平台上的一款强大的3D图形库,它允许开发者在网页上创建丰富的、交互式的三维图形和应用程序。本篇文章将深入探讨Papervision3D的API,帮助读者理解并掌握...
PaperVision3D是Flash Platform上的一个强大工具,它允许开发者使用熟悉的ActionScript语言来创建复杂的3D场景和动画。PV3D不仅提供了一整套的3D对象和渲染功能,还支持光照、纹理、碰撞检测等高级特性,使得在Web上...
使用Papervision3D,开发者可以创建自定义的3D对象,或者使用内置的几何对象库。同时,通过编程控制这些对象的位置、旋转和缩放,实现动态效果。此外,Papervision3D还支持导入3D模型文件,如 COLLADA 和 OBJ 格式,...
Papervision3D_2.0.869.swc
《Papervision3D+Essentials》是一本专注于Papervision3D技术的权威指南,对于深入了解和掌握这个强大的3D图形库至关重要。Papervision3D(简称PV3D)是Flash平台上最早的3D渲染引擎之一,它为开发者提供了在Web...
《Papervision3D:SWC源码与学习资源详解》 Papervision3D,作为一款强大的开源框架,为Flash平台提供了强大的3D渲染能力,它使得开发者能够利用ActionScript3在Web上创建出令人震撼的3D交互体验。本篇文章将围绕...
《Papervision3D与Box2DFlash结合的精彩DEMO解析》 在IT行业中,3D图形渲染和物理引擎的应用已经变得越来越普遍,尤其是在游戏开发和互动媒体设计领域。Papervision3D是一个基于Adobe Flash平台的开源3D库,它允许...
《Papervision3D精髓》一书是针对初学者及有一定基础的开发者设计的,旨在教授如何使用Papervision3D(PV3D)创建具有惊人效果和强大动画功能的交互式3D应用程序。PV3D是一种开源的3D引擎,用于Adobe Flash平台,它...
《PV3d Papervision3D API文档与全景案例解析》 Papervision3D(PV3D)是一款强大的开源3D图形引擎,专为Adobe Flash平台设计,支持ActionScript 3.0(AS3),是Flash AS3中实现3D效果的重要工具。在本文中,我们将...
接着,你需要在主类文件(Main.as)中编写使用Papervision3D的代码。以下是一个简单的示例,展示了如何创建一个基本的3D场景: ```actionscript package { import flash.display.Sprite; import org.papervision...