Papervision3Dを使って3D Hello,world
さて、今日は Papervision3D を使ってみようと思います。
Papervision3DはFlashで動作する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
全面的にちゃんとしたコードに書き換えておきます。