PV3D ReflectionView その2
ちょっと前に紹介したPV3DのReflectionViewですが、紹介だけでは悲しいので制作者さん(?)のサイトで紹介されているサンプルコードにちょっと追加してみたものと簡単な解説です。
サンプルSWF
(MTでSWF貼るのにいい方法ないだろうか)
で、続いてちょっと手を加えたサンプルコード。
珍しくコードの最初から最後までドーン!
package { import flash.events.Event; import flash.filters.BlurFilter; import org.papervision3d.cameras.Camera3D; import org.papervision3d.core.effects.view.ReflectionView; import org.papervision3d.materials.ColorMaterial; import org.papervision3d.materials.utils.MaterialsList; import org.papervision3d.materials.BitmapAssetMaterial; import org.papervision3d.objects.primitives.Cube; import org.papervision3d.objects.primitives.Sphere; public class ReflectionCubeSimple extends ReflectionView { private var cube:Cube; private var s:Sphere; public function ReflectionCubeSimple() { super(400,400,false, false); //the height of the reflection plane surfaceHeight = -100; // 反射面にブラー適用 viewportReflection.filters = [new BlurFilter(8, 8, 1)]; // 反射面のカラーを変化させる //setReflectionColor(0, 50, 0, 0, 50, 0); initCube(); initSphere(); camera.z = -800; addEventListener(Event.ENTER_FRAME, enterFrame); } public function initCube() : void { // create a materials list for the cube. var ml : MaterialsList = new MaterialsList(); ml.addMaterial(new ColorMaterial(0x880000), "all"); ml.addMaterial(new ColorMaterial(0x660000),"right"); ml.addMaterial(new ColorMaterial(0x440000),"bottom"); ml.addMaterial(new ColorMaterial(0xdd0000),"top"); ml.addMaterial(new ColorMaterial(0xdd0000),"left"); cube = new Cube(ml,100,100,100); cube.x = 200; // add the cube to the scene scene.addChild(cube); } private function initSphere() { var material = new BitmapAssetMaterial("worldmap"); s = new Sphere(material); s.x = -200; scene.addChild(s); } public function enterFrame(e:Event) : void { // rotate the cube dependent on the mouse position cube.yaw((320-mouseX)*0.05); cube.y = (150-(mouseY/2)); if(cube.y<0) cube.y = 0; s.yaw((320-mouseX)*0.05); s.y = (150-(mouseY/2)); if(s.y<50) s.y = 50; singleRender(); } } }
サンプルコードにSphereのコードを追加しただけなので、普段の自分のコーディングと少し違うし、ちょいと違和感があります。
- surfaceHeight
- Heightってなってるんですが、これは反射面のy軸の位置指定です。
サンプルでは-100を指定していて、CubeのHeightも100なのでCube.yが0のときに、Cubeの底面と反射面が接触します。Heightっていう使い方は3D的な用語の使い方なんだろうか、わからん。 - viewportReflection.filters = [new BlurFilter(8, 8, 1)];
- これでフィルタ適用できます。
- setReflectionColor()
- 反射面のカラーを変化させます。
正直、サイトの英語の解説見ても英語がわからんので、なんとなく「色を変える」しかわからなかったので、クラスを直接除いてみたら、内部でColorTransformやってるだけでした。
ColorTransform使ったことないから、どういう指定したらいい感じになるのかわかりませんが、とにかく、setReflectionColor()のパラメータもColorTransformとまったく同じです。
こんなとこです。