ThreeJs DREI.Mesh.position Problem
Ich bin Total neu three.js und versucht einfach den Griff zu bekommen, die three.js Bibliotheken.
Ich habe eine Kugel-rendering auf dem Bildschirm, aber ich kann nicht sagen, was es ist .position member verweist, nicht angezeigt werden Bildschirm Koordinaten.
Es ist x0 Punkt scheint zu sein, etwa auf halbem Weg über den Bildschirm (was ich verarbeiten kann und verstehen)
aber es ist y0 ist etwa 1/3 von der Unterseite des Bildschirms, und wenn ich mich bewege ihn sagen 300 es sich nicht bewegt und 300 Pixel.
Ich bin kinda outta meine Tiefe und nur hacken, jemand Beispiel-code, um zu versuchen und get a grip, aber das ist bluffen mir. Ich habe versucht, auf der Suche über 3js-API aber nicht finden alle Antworten.
Ich poste den relevanten code im Falle somethings falsch.
<script src="js/Three.js"></script>
<script src="js/Stats.js"></script>
<script src="js/mDetector.js"></script>
<script src="moddShape.js"></script>
<script language="javascript" type="text/javascript"></script>
<script>
var SCREEN_WIDTH = window.innerWidth;
var SCREEN_HEIGHT = window.innerHeight;
var container,stats;
var camera, scene;
var canvasRenderer, webglRenderer;
var mesh, zmesh, geometry, pointLight, pmesh, sphere, sphereMaterial;
var mouseX = 0, mouseY = 0;
var windowHalfX = window.innerWidth / 2;
var windowHalfY = window.innerHeight / 2;
var render_canvas = 1;
var render_gl = 1;
var has_gl = 0;
var targetX = 0, targetY = 0;
var CameraZPos = 240;
document.addEventListener( 'mousemove', onDocumentMouseMove, false );
document.addEventListener( 'mousedown', handleMouseEvent, false );
init();
animate();
function init()
{
container = document.createElement( 'div' );
document.body.appendChild( container );
camera = new THREE.PerspectiveCamera( 90, SCREEN_WIDTH / SCREEN_HEIGHT, 1, 100000 );
camera.position.z = CameraZPos;
scene = new THREE.Scene();
//RENDERER
webglRenderer = new THREE.WebGLRenderer
(
{
antialias: true
}
);
webglRenderer.setSize( SCREEN_WIDTH, SCREEN_HEIGHT );
webglRenderer.domElement.style.position = 'relative';
container.appendChild( webglRenderer.domElement );
has_gl = 1;
//STATS - FPS
stats = new Stats();
stats.domElement.style.position = 'absolute';
stats.domElement.style.top = '0px';
stats.domElement.style.left = '0px';
stats.domElement.style.zIndex = 0;
container.appendChild( stats.domElement );
{
createScene(0, 100, 5, 0 )
};
//LIGHT
var pointLight = new THREE.PointLight( 0xFFFFFF );
//set its position
pointLight.position.x = 10;
pointLight.position.y = 50;
pointLight.position.z = 130;
//add to the scene
scene.add(pointLight);
}
function createScene(x, y, z, b )
{
//create the sphere's material
sphereMaterial = new THREE.MeshLambertMaterial(
{
//red.
color: 0xCC0000
});
//set up the sphere vars
var radius = 50, segments = 16, rings = 16;
//create a new mesh with sphere geometry -
sphere = new THREE.Mesh( new THREE.SphereGeometry(radius, segments, rings), sphereMaterial);
sphere.position.set( x, y, z );
sphere.scale.set( 1, 1, 1 );
sphere.overdraw = true;
//add the sphere to the scene
scene.add(sphere);
}
function onDocumentMouseMove(event)
{
mouseX = ( event.clientX - windowHalfX );
mouseY = ( event.clientY - windowHalfY );
}
function animate()
{
requestAnimationFrame( animate );
render();
stats.update();//Update FPS
}
function handleMouseEvent(mouseEvent)
{
targetX = mouseX;
targetY = mouseY;
//Text field printouts
//Positions relevent to 0 0 midscreen
document.myform.XY_Coords.value = "X Pos " + targetX + "\n" + "Y Pos " + targetY;
//Positions relevent to 0 0 top left
document.myform.XY_Coords.value += "\n\nX Pos 2 " + mouseEvent.clientX + "\n" + "Y Pos 2 " + mouseEvent.clientY;
}
function render()
{
if (sphere.position.x < targetX)
{
sphere.position.x += .1;
}
if (sphere.position.y < targetY)
{
sphere.position.y += .1;
}
if (sphere.position.x > targetX)
{
sphere.position.x -= .1;
}
if (sphere.position.y > targetY)
{
sphere.position.y -= .1;
}
camera.lookAt( scene.position );
document.myform.shipCoords.value = "ShipX " + sphere.position.x + "\nShipY " + sphere.position.y + "\nShipZ " + sphere.position.z;
if ( render_gl && has_gl ) webglRenderer.render( scene, camera );
}
</script>
Vielen Dank im Voraus
InformationsquelleAutor Julz | 2012-04-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Koordinaten sind nicht ausgedrückt durch Pixel. Sie sind eine generische Art von "Einheiten". Ich denke, Sie würden gerne Lesen, ein bisschen mehr über WebGL (und 3D-Grundlagen) besser zu verstehen und zu verwenden Three.js.
Verwenden, die Kamera Perspektive man Mitte der Sphäre mit:
Müssen Sie auch ändern Sie das Vorzeichen (Richtung) Ihrer y-Achse in Schritten.
sphere.position.y += .1;
musssphere.position.y -= .1;
und...-= 1;
muss...+= 1;
Objekte für die Verwendung von Weltkoordinaten. Objekt-Transformationen (translation, rotation, scalation), Kamera-Parameter (Typ, position, lookat, field of view, aspect-ratio, min Tiefe max Tiefe) und viewport-definition (Länge, Höhe) werden verwendet, um die endgültige Bildschirm-Koordinaten. 2) 200? Überprüfen Sie eine veränderte version des Codes hier Kugel scheint zentriert werden.
Ich bin ein idiot (versteht sich wohl von selbst), es wurde die Tabelle am oberen Rand des Bildschirms werfen Sie es aus. Vielen Dank für deine Hilfe.
InformationsquelleAutor Juan Mellado