ベジェ曲線とかスプライン曲線とかの勉強してたら、
なんかムラムラしてきたので勢いで載せてみました。
初めての投稿だったので勝手がわからず載せるだけでえらい時間かかった・・。
インデントをつけるとコンパイルエラーになるんですが、なんでですか?
どうせなら見やすいソースで載せたい!
↓
コメントアウトを手当たり次第に消していったらインデントできました。
wonderflではコメントアウトは最初だけにしといたほうがいいのかな?
原因はよくわからないままでした。
ベジェ曲線とかスプライン曲線とかの勉強してたら、
なんかムラムラしてきたので勢いで載せてみました。
初めての投稿だったので勝手がわからず載せるだけでえらい時間かかった・・。
インデントをつけるとコンパイルエラーになるんですが、なんでですか?
どうせなら見やすいソースで載せたい!
↓
コメントアウトを手当たり次第に消していったらインデントできました。
wonderflではコメントアウトは最初だけにしといたほうがいいのかな?
原因はよくわからないままでした。
PV3Dでオブジェクトの頂点座標を取得し、その位置を移動してみます。
DispalyObject3DはVertex3Dで表される頂点のデータをもとに形成されています。
頂点座標は配列で管理されており、下記の方法で取得できます。
var array:Array = DispalyObject3D.geometry.vertices
どの点がどこを指すかは一つ一つ調べていくしかないみたいです。
これようにチェッククラスみたいなのを作っておいた方が便利かもしれないですね。
サンプル
ドキュメントクラス
package
{
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.events.Event;
import net.hires.debug.Stats;
import org.papervision3d.core.geom.renderables.Vertex3D;
import org.papervision3d.materials.BitmapMaterial;
import org.papervision3d.objects.primitives.Plane;
import org.papervision3d.view.BasicView;
public class Main extends BasicView
{
private var _plane:Plane;
private var _segW:uint = 10;
private var _segH:uint = 10;
private var _rad:Number = 0;
private var _speed:Number=0.2;
private var _delay:Number = 10
public function Main():void
{
super(0, 0, true);
_init()
}
private function _init():void
{
var bmd:BitmapData = new Img(0, 0);
var bm:BitmapMaterial = new BitmapMaterial(bmd)
bm.doubleSided = true;
bm.smooth = true;
_plane = new Plane(bm, 300, 300, _segW, _segH);
scene.addChild(_plane);
startRendering();
addEventListener(Event.ENTER_FRAME, _onEnterFrameHandler);
addChild(new Stats())
}
private function _wave():void
{
for ( var i:String in _plane.geometry.vertices )
{
var v3d:Vertex3D = _plane.geometry.vertices[i] as Vertex3D;//頂点データ
var h:Number = v3d.x * v3d.y / (300*300) * _delay;
v3d.z = 40 * Math.sin(_rad + h);
}
_rad += _speed;
}
private function _onEnterFrameHandler(e:Event):void
{
_plane.yaw((mouseX - (stage.stageWidth >> 1) ) / 30);
_plane.pitch((mouseY - (stage.stageWidth >> 1)) / 30);
_wave();
}
}
}
Planeの頂点を取得し、そのx,yの座標に応じてz値を変化させてみました。
42行目でDispalyObject3Dが持つ各頂点座標を取得しています。
Vertex3Dが頂点を示しx,y,zを操作可能です。
分割数は10*10ですが、意外と滑らかに波打ってくれてました。
先日作ったペンギンをアニメーションさせてみました。
モデリングの段階で各パーツを別のファイルとして保存して
それらをFlash側でレイアウトしなおしました。
(もっといい方法がありそうですが・・・)
あとはそれらをTweenerで動かしただけです。
今回はとりあえず一番楽そうなのでその場でジャンプさせてみました。
サンプル
クリックするとジャンプし、そのまま押し続けるとジャンプし続けます。
簡単なはずだったのにやりだしてみたら意外とめんどうで、
たったこれだけのモーションに2時間もかかった・・・。
PV3Dを使って3D空間を多少なりとグリングリンできるようになったら
どうしてもやりたいことがでてきました。
mixiやTwitterのアイコンと使っているるペンギンをグリングリンしたい!
大昔にShade5を使って見よう見まねの適当モデリングにくわえ、
妥協だらけの集大成が「あれ」でした。
球と円柱をくっつけただけ。
それでもいいからとりあえず!と思ってファイルを探したけど見つからない・・・。
もうあれはあれでいい思い出として
モデリングしなおすことにしました。
モデリングソフトはMetasequoia。
Blenderも使ってみたけど2時間で心が折れました。
PV3DへはSparkProjectにコミットされてた Metasequoiaクラス を使ってmqoファイルを読み込みました。
結果は以下の通り。
サンプル
ドキュメントクラス
package
{
import flash.events.Event;
import org.libspark.pv3d.Metasequoia;
import org.papervision3d.view.BasicView;
public class Main extends BasicView
{
private var _metasequoia:Metasequoia;
public function Main():void
{
super(300,300,false);
_init();
}
private function _init():void
{
_metasequoia = new Metasequoia();
_metasequoia.addEventListener(Event.COMPLETE, _onLoadHandler)
_metasequoia.load("test.mqo");
addEventListener(Event.ENTER_FRAME, enterFrameHandler);
startRendering();
}
private function _onLoadHandler(e:Event):void
{
scene.addChild(_metasequoia);
}
private function enterFrameHandler(e:Event):void{
_metasequoia.yaw((150- mouseX )/30);
_metasequoia.pitch((150- mouseY )/30);
}
}
}
Metasequoiaクラスめちゃくちゃ便利ですね。
エクスポートとかするのかと思ってたけど、
Metasequoiaの保存形式のmpoを読み込むところがどこか新鮮でした。
感謝感謝です!
当初は毎日何か書こうと思っていたのに、
忙しさとずぼらがミックスされて
だいぶと放置してました。
とは言え、やっぱりあんまり余裕がないので
今日はスピード重視で書きます!
navigateToURLでPOSTでデータをPHPに渡すときに嵌りました。
何度やってもGETで渡ってしまいます。
ドキュメントクラス
package
{
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.net.navigateToURL;
import flash.net.URLRequest;
import flash.net.URLRequestMethod;
import flash.net.URLVariables;
public class Main extends Sprite
{
public function Main()
{
stage.addEventListener(MouseEvent.CLICK, _onClickHandler);
}
private function _onClickHandler(e:MouseEvent):void
{
var request : URLRequest = new URLRequest( "http://www.nanlow.com/labo/php/getpostchecker.php");
var variables:URLVariables = new URLVariables( );
var date:Date = new Date();
variables.decode('hours=' + date.getHours());
variables.decode('minutes=' + date.getMinutes());
variables.decode('seconds=' + date.getSeconds());
request.data = variables;
request.method = URLRequestMethod.POST;
navigateToURL( request );
}
}
}
特に変ったことしてないし・・・って悩んで2時間。
色々試して、最終的にググッたところでわかりました。
結論としては
コンパイル直後のプレビューで確認してたからみたい。
ブラウザで確認したら大丈夫でした。
こういう、よくわからない現象がまだまだありそうで怖いです。
最近のコメント