ETERNITY DESIGN BLOG

PV3D ReflectionView その2

ちょっと前に紹介したPV3DのReflectionViewですが、紹介だけでは悲しいので制作者さん(?)のサイトで紹介されているサンプルコードにちょっと追加してみたものと簡単な解説です。
サンプル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とまったく同じです。

こんなとこです。

ABOUT ME

名古屋を中心に、フリーランスでホームページ制作してます。 デザイン・サイト制作・WordPress案件・Flash制作、JavaScript(jQuery)と幅広く対応可能です。 案件のご依頼・ご相談はCONTACTよりご連絡ください。

CATEGORIES

ARCHIVES

TAGS