Papervision3Dを使って3D Hello,world

さて、今日は Papervision3D を使ってみようと思います。
Papervision3DFlashで動作する3Dエンジンです。

このPapervision3DをFlashDevelopに組み込んで、無料の3DFlashの開発環境を作ってみます。

設定などはこのサイトが非常に参考になりました。
http://phenotype.jpn.org/blog/archives/19

環境設定がちゃんと出来ているか確認のため、簡単なコードを書いてみます。

package 
{
    import flash.display.Sprite;
    import flash.display.BitmapData;
    import flash.events.Event;
    import flash.text.TextField;
    import flash.text.TextFormat;
    import flash.text.TextFieldAutoSize;
    import flash.geom.Matrix;
    
    import org.papervision3d.view.BasicView;
    import org.papervision3d.objects.primitives.Plane;
    import org.papervision3d.materials.BitmapMaterial;

    [SWF(width="400", height="400", backgroundColor="#0000FF", frameRate="30")]   
    public class Main extends BasicView 
    {
        private var plane:Plane;
        
        public function Main():void 
        {        
            // テキストフィールドを作る
            var text:TextField = new TextField();
            text.text = "hello, world";
            text.width = 200;
            text.height = 100;
            text.textColor = 0xFFFFFF;
            text.autoSize = TextFieldAutoSize.CENTER;
            // テキストフィールドのフォーマット
            var format:TextFormat = new TextFormat();
            format.font = "メイリオ";
            format.size = 30;
            format.bold = true;
            // 作ったフォーマットを設定
            text.setTextFormat( format );
            
            // テキストフィールドをビットマップデータに焼付け
            var bmpData:BitmapData = new BitmapData( 200, 200, true, 0xFF000000 );            
            var matrix:Matrix = new flash.geom.Matrix();
            matrix.translate( 0, 80 );
            bmpData.draw( text, matrix, null, "normal", null, true );        

            // マテリアル設定
            var bmpMat:BitmapMaterial = new BitmapMaterial( bmpData );  
            // 両面に設定
            bmpMat.doubleSided = true;
            // Plane生成
            plane = new Plane(bmpMat, 400, 400, 5);
            scene.addChild(plane);
            
            // ズーム設定
            camera.zoom = 70;
            
            startRendering();   
        }
            
        override protected function onRenderTick(event:Event=null):void  
        {   
            plane.rotationY += 2;
            renderer.renderScene(scene, camera, viewport);   
        }   
    }    
}

表示するだけなら必要のないコードが混ざっているので、ちょっと長めになってしまいましたが、やっていることは以前の記事と同じようなもので、Hello world と表示した TextField をテクスチャにして板に貼り付けているだけです。

うーん、テクスチャ歪みまくりw
他サイトの情報を見ていても、多少テクスチャのゆがみというのは起こるそうなんですが、結構ひどいですね。
ただ今回は特にカメラの設定をしていないので、その辺の設定をすれば回避できるものなのかもしれません。

セグメントの数を増やせばテクスチャは歪まなくなるようです、勉強不足で普通に基本的な部分をわかっていませんでしたw
全面的にちゃんとしたコードに書き換えておきます。