简体   繁体   中英

Change background colour, add a pointlight in three.js

I have been playing with three.js. I have made a cube within a wireframe cube. How do I alter the background colour? I know I have to do something regarding creating a skybox and/or a point light source but that just seems to make a black screen.

Here is COdepen: http://codepen.io/FredHair/pen/Cagpf

My code:

var width = window.innerWidth;
var height = window.innerHeight;

var scene, camera, renderer;
var cube;
var fov = 30,
isUserInteracting = false,
cameraDistance = 100,
onMouseDownMouseX = 0, onMouseDownMouseY = 0,
lon = 0, onMouseDownLon = 0,
lat = 0, onMouseDownLat = 0,
phi = 0, theta = 0;

$(function() {
init();
});

function init() {
scene = new THREE.Scene();
camera = new THREE.PerspectiveCamera( fov, window.innerWidth / window.innerHeight, 1, 1000 );
camera.position.set( 0, 0, 100 );
renderer = new THREE.WebGLRenderer({antialias:true});
renderer.setSize( window.innerWidth, window.innerHeight );
$('#container').append( renderer.domElement );

cube = new THREE.Mesh(
  new THREE.BoxGeometry( 23, 33, 18 ),
  new THREE.MeshBasicMaterial({color:0xFF6600, wireframe:true})
);

scene.add( cube );

cube2 = new THREE.Mesh(
  new THREE.BoxGeometry( 10, 10, 10 ),
  new THREE.MeshBasicMaterial({color:0xFF6600, })
);

scene.add( cube2 );

cube = new THREE.Mesh(
  new THREE.BoxGeometry( 23, 33, 18 ),
  new THREE.MeshBasicMaterial({color:0xFF6600, wireframe:true})
);

scene.add( cube );

$(document).on( 'mousedown', onMouseDown );
$(document).on( 'mousewheel', onMouseWheel );
$(window).on( 'resize', onWindowResize );
animate();
}

function animate() {
requestAnimationFrame( animate );
render();
}

function render() {

 lon += .15;
 lat = Math.max( - 85, Math.min( 85, lat ) );
 phi = THREE.Math.degToRad( 90 - lat );
 theta = THREE.Math.degToRad( lon );

 camera.position.x = cameraDistance * Math.sin( phi ) * Math.cos( theta );
 camera.position.y = cameraDistance * Math.cos( phi );
 camera.position.z = cameraDistance * Math.sin( phi ) * Math.sin( theta );

 camera.lookAt( scene.position );

 renderer.render( scene, camera );
}

function onMouseWheel(event) {

 cameraDistance += event.originalEvent.deltaY * 0.1;
 cameraDistance = Math.min( cameraDistance, camera.far );
 cameraDistance = Math.max( cameraDistance, camera.near );
}

function onMouseDown(event) {

event.preventDefault();
onPointerDownPointerX = event.clientX;
onPointerDownPointerY = event.clientY;
onPointerDownLon = lon;
onPointerDownLat = lat;

$(document).on( 'mousemove', onMouseMove );
$(document).on( 'mouseup', onMouseUp );
}

function onMouseMove(event) {
lon = ( event.clientX - onPointerDownPointerX ) * 0.1 + onPointerDownLon;
lat = ( event.clientY - onPointerDownPointerY ) * 0.1 + onPointerDownLat;
} 

function onMouseUp(event) {
$(document).off( 'mousemove' );
$(document).off( 'mouseup' );
}

function onWindowResize() {
 renderer.setSize( window.innerWidth, window.innerHeight );
 camera.projectionMatrix.makePerspective( fov, window.innerWidth / window.innerHeight, 1, 1000 );
}

Any help is greatly appreciated.

renderer.setClearColor( 0xffffff, 1 ); 

Should do you. The first argument is the background color in RGB, and the second argument is the alpha. For example:

renderer.setClearColor( 0xff0000, .5 ); 

This should set your rendered background to red, with 50% transparency. I've just started playing with three.js myself, so I hope this works for you.

Edit:: now that I've had more than a second, I've tried it out in your CodePen. I put the line above in your init() function, immediately after you initialize your renderer, and it worked.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM