Voilà, j'ai fait une petite scène de test si jointe ou j'ai une sphère qui se déplace, et lorsque qu'une partie commence à devenir masquée ( intersect ) elle devient rouge.
J'arrive à détecter si ma sphère commence à être masqué hors de la camera, mais j'aimerais aussi détecter si elle commence à être masqué en passant derrière le cube, mais je n’ai rien trouvé à se sujet, est-ce possible ?
Action Script
package
{
import flash.display.Sprite;
import flash.events.*;
import flash.text.TextField;
import sandy.core.Scene3D;
import sandy.core.data.*;
import sandy.core.scenegraph.*;
import sandy.materials.*;
import sandy.materials.attributes.*;
import sandy.primitive.*;
public class test extends Sprite
{
private var scene:Scene3D;
private var camera:Camera3D;
private var app1:Appearance;
private var app2:Appearance;
private var app3:Appearance;
private var i:Number=0;
private var ObjMove:Sphere;
private var Cube:Box;
public function test()
{
camera = new Camera3D( 400, 400 );
camera.z = -450;
var root:Group = createScene();
scene = new Scene3D( "scene_test", this, camera, root );
addEventListener( Event.ENTER_FRAME, enterFrameHandler );
}
private function createScene():Group
{
var g:Group = new Group();
////////////////////////////////////////////////////////////////////////////////
var materialAttr1:MaterialAttributes = new MaterialAttributes(
new LineAttributes( 0.5, 0x40C89E, 0.4 ),
new LightAttributes( true, 0.1)
);
var material1:Material = new ColorMaterial( 0x31E843, 1, materialAttr1 );
material1.lightingEnable = true;
app1 = new Appearance( material1 );
////////////////////////////////////////////////////////////////////////////////
var materialAttr2:MaterialAttributes = new MaterialAttributes(
new LineAttributes( 0.5, 0x7B3E2F, 0.4 ),
new LightAttributes( true, 0.1)
);
var material2:Material = new ColorMaterial( 0xFF0909, 1, materialAttr2 );
material2.lightingEnable = true;
app2 = new Appearance( material2 );
////////////////////////////////////////////////////////////////////////////////
Cube = new Box( "Cube1",60,60,60);
Cube.appearance = app1;
Cube.rotateY = 45;
Cube.rotateX = 45;
g.addChild( Cube );
////////////////////////////////////////////////////////////////////////////////
ObjMove = new Sphere( "Sphere1",20,20,4);
ObjMove.appearance = app2;
ObjMove.z=100;
g.addChild( ObjMove );
////////////////////////////////////////////////////////////////////////////////
return g;
}
private function enterFrameHandler( event : Event ) : void
{
i+=0.05;
ObjMove.x=250*Math.sin(i);
////////////////////////////////////////////////////////////////////////////////
var C=ObjMove.culled;
if(C=="[sandy.view.CullingState] :: state : intersect")
ObjMove.appearance = app2; else ObjMove.appearance = app1;
INFOS.text=C;
////////////////////////////////////////////////////////////////////////////////
scene.render();
ObjMove.cull(scene, camera.frustrum, camera.matrix, false);
}
}
}