Hey Everyone, so I have a simple rendering problem. It seems that when I move the camera around my scene the rendering at certain points is odd. Triangles become missing and it seems as though its just not working correctly. When you move the camera beside the cube, triangles along the side of the cube go missing.
Is there a way I can turn the clipping off?
Should I use more triangles?
Is it a material/render engine/viewport problem?
What can I change here?
Example: (Click on Flash window to use controls.)
indieeddy.com/bin-debug/KillFarm.html
Controls:
W, S, A, D
The Code:
package
{
import br.com.stimuli.loading.BulkLoader;
import com.greensock.*;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.events.MouseEvent;
import flash.geom.Vector3D;
import flash.media.Sound;
import flash.media.SoundChannel;
import jiglib.geometry.*;
import jiglib.math.*;
import jiglib.physics.*;
import jiglib.physics.constraint.*;
import jiglib.plugin.papervision3d.*;
import org.papervision3d.cameras.Camera3D;
import org.papervision3d.core.utils.Mouse3D;
import org.papervision3d.materials.*;
import org.papervision3d.materials.shadematerials.*;
import org.papervision3d.materials.utils.MaterialsList;
import org.papervision3d.objects.primitives.*;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.view.Viewport3D;
import org.papervision3d.view.layer.ViewportLayer;
import org.papervision3d.view.layer.util.ViewportLayerSortMode;
import org.papervision3d.view.stats.StatsView;
import src.*;
[SWF(width="800", height="600", backgroundColor="#000000", frameRate="60")]
public class Test extends Sprite
{
/*
-----
GAME VARs
-----
*/
private var scene:Scene3D;
private var viewport:Viewport3D;
private var camera:Camera3D;
private var renderEngine:BasicRenderEngine;
private var physics:Papervision3DPhysics;
public function Test()
{
super();
trace( "Program Started..." );
this.loadInGame();
}
public function startInGame( evt:Event ):void
{
scene = new Scene3D();
physics = new Papervision3DPhysics( scene , 5 );
Mouse3D.enabled = true;
camera=new Camera3D();
camera.x = 0;
camera.y = 60;
camera.z = 0;
viewport = new Viewport3D();
this.addChild(viewport);
renderEngine = new BasicRenderEngine();
var bitmapdata:BitmapData = this.bulkGameFiles.getBitmapData( "image-wall-a" );
var shadeMateria:BitmapMaterial = new BitmapMaterial(bitmapdata);
shadeMateria.baked = true;
shadeMateria.precise = true;
shadeMateria.smooth = true;
shadeMateria.doubleSided = true;
shadeMateria.tiled = true;
var materiaList:MaterialsList = new MaterialsList();
materiaList.addMaterial(shadeMateria, "all");
var wall:Cube = new Cube( materiaList , 500, 500, 100 , 2, 2,2 );
var wallViewport:ViewportLayer = new ViewportLayer(viewport, wall);
viewport.containerSprite.addLayer(wallViewport);
scene.addChild(wall);
viewport.containerSprite.sortMode = ViewportLayerSortMode.INDEX_SORT;
wallViewport.layerIndex = 1;
var stats:StatsView = new StatsView( renderEngine );
this.addChild( stats );
stage.addEventListener( KeyboardEvent.KEY_DOWN , this.keyDownHandler );
this.addEventListener( Event.ENTER_FRAME , render );
}
private function keyDownHandler( event:KeyboardEvent ):void
{
if ( event.keyCode == 87 )
{
camera.moveForward( 50 );
}
if ( event.keyCode == 65 )
{
camera.moveLeft( 50 );
}
if ( event.keyCode == 68 )
{
camera.moveRight( 50 );
}
if ( event.keyCode == 83 )
{
camera.moveBackward( 50 );
}
}
private function render(e:Event):void
{
physics.engine.integrate(0.1);
renderEngine.renderScene(scene, camera, viewport);
}
}
}
Cheers everyone,
Nick.