Avec la BasicView une autre classe est apparue la ReflectionView, cette classe vous permet en l’étendant, de créer rapidement une scène 3D (comme la BasicView) mais en lui rajoutant des propriétés permettant de créer un reflet pour vos objets.
Il faut tout d’abord, étendre notre classe avec la ReflectionView (ligne 9), puis configurer notre reflet.
La ReflectionView consiste à prendre l’image de la caméra qui rend la scène, puis la retourne pour lui donner un effet de miroir, vous avez donc la possibilité d’appliquer des effets à cette image grâce à la propriété viewportReflection (ligne 31), comme un Blur, un Glow… setReflectionColor (ligne 32) permet de changer du reflet, et surfaceHeight (ligne 33) comme son nom ne l’indique pas, permet de rapprocher ou d’éloigner le reflet de la scène 3D.
Enfin chose importante, pour afficher le reflet il faut absolument créer un EnterFrame (ligne 16) et lui ajouter un singleRender(); (ligne 40)
-
package {
-
import org.papervision3d.core.effects.view.ReflectionView;
-
import org.papervision3d.materials.ColorMaterial;
-
import org.papervision3d.objects.primitives.Plane;
-
-
import flash.events.Event;
-
import flash.filters.BlurFilter;
-
-
public class BasicScene extends ReflectionView {
-
-
public function BasicScene()
-
{
-
buildPlane();
-
configReflection();
-
-
addEventListener(Event.ENTER_FRAME, enterFrameHandler);
-
}
-
-
private function buildPlane() : void
-
{
-
var colorMaterial : ColorMaterial = new ColorMaterial(0xff00ff);
-
colorMaterial.doubleSided = true;
-
plane = new Plane(colorMaterial, 50, 50, 4, 4);
-
scene.addChild(plane);
-
-
plane.z = ( camera.zoom * camera.focus ) – Math.abs(camera.z);
-
}
-
-
private function configReflection() : void
-
{
-
viewportReflection.filters = [new BlurFilter(3,3,1)];
-
setReflectionColor(.5, .5, .5);
-
surfaceHeight = -100;
-
}
-
-
private function enterFrameHandler(event : Event) : void
-
{
-
plane.rotationX ++;
-
plane.rotationY ++;
-
singleRender();
-
}
-
-
private var plane : Plane;
-
}
-
}



Bonjour,
Merci beaucoup !
Juste une minuscule erreur ligne 26..
plane.z = ( camera.zoom* camera.focus ) – (Math.abs(camera.z));
(et selon les claviers et les polices le « - » peut générer des erreurs au copier coller).
Merci encore Ocelyn pour tout ce travail!