Image three.js设置背景图像
如何创建静态背景图像 对于默认背景:Image three.js设置背景图像,image,background,static,three.js,set,Image,Background,Static,Three.js,Set,如何创建静态背景图像 对于默认背景: scene = new THREE.Scene(); // ... renderer = new THREE.WebGLRenderer( { antialias: false } ); renderer.setClearColor( scene.fog.color, 1 ); 如何为场景设置图像。fog,或为clearcolor设置不透明度?如果试图设置静态背景图像(即使旋转主摄像机,背景也不会改变),则必须创建两个场景和两个摄像机。 第一个场景将由
scene = new THREE.Scene();
// ...
renderer = new THREE.WebGLRenderer( { antialias: false } );
renderer.setClearColor( scene.fog.color, 1 );
如何为
场景设置图像。fog
,或为clearcolor
设置不透明度?如果试图设置静态背景图像(即使旋转主摄像机,背景也不会改变),则必须创建两个场景和两个摄像机。第一个场景将由应用纹理的基本平面组成。
第二个场景将包含所有对象。
下面是一段代码:
<html>
<body>
<script src="Three.js"></script>
<script>
var color = 0x000000;
// Create your main scene
var scene = new THREE.Scene();
// Create your main camera
var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
// Create lights
var light = new THREE.PointLight(0xEEEEEE);
light.position.set(20, 0, 20);
scene.add(light);
var lightAmb = new THREE.AmbientLight(0x777777);
scene.add(lightAmb);
// Create your renderer
var renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
// Create a cube
var geometry = new THREE.BoxGeometry(1, 1, 1);
var material = new THREE.MeshLambertMaterial({
color: 0xff00ff,
ambient: 0x121212,
emissive: 0x121212
});
var cube = new THREE.Mesh(geometry, material);
scene.add(cube);
// Set up the main camera
camera.position.z = 5;
// Load the background texture
var texture = THREE.ImageUtils.loadTexture( '1.jpg' );
var backgroundMesh = new THREE.Mesh(
new THREE.PlaneGeometry(2, 2, 0),
new THREE.MeshBasicMaterial({
map: texture
}));
backgroundMesh .material.depthTest = false;
backgroundMesh .material.depthWrite = false;
// Create your background scene
var backgroundScene = new THREE.Scene();
var backgroundCamera = new THREE.Camera();
backgroundScene .add(backgroundCamera );
backgroundScene .add(backgroundMesh );
// Rendering function
var render = function () {
requestAnimationFrame(render);
// Update the color to set
if (color < 0xdddddd) color += 0x0000ff;
// Update the cube color
cube.material.color.setHex(color);
// Update the cube rotations
cube.rotation.x += 0.05;
cube.rotation.y += 0.02;
renderer.autoClear = false;
renderer.clear();
renderer.render(backgroundScene , backgroundCamera );
renderer.render(scene, camera);
};
render();
</script>
</body>
</html>
var color=0x000000;
//创建主场景
var scene=new THREE.scene();
//创建主摄像机
var摄像机=新的三透视摄像机(75,window.innerWidth/window.innerHeight,0.11000);
//创建灯光
var灯=新的三点灯(0xEEEE);
光位置设置(20,0,20);
场景。添加(灯光);
var lightAmb=新的三个环境光(0x777777);
场景。添加(lightAmb);
//创建渲染器
var renderer=new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth、window.innerHeight);
document.body.appendChild(renderer.doElement);
//创建一个立方体
var geometry=新的3.BoxGeometry(1,1,1);
var material=新的3.0网格LambertMaterial({
颜色:0xff00ff,
环境温度:0x121212,
发射:0x121212
});
var cube=新的三个网格(几何体、材质);
场景.添加(立方体);
//设置主摄像机
摄像机位置z=5;
//加载背景纹理
var-texture=THREE.ImageUtils.loadTexture('1.jpg');
var backgroundMesh=新的三个网格(
新的三平面几何(2,2,0),
新的三网格基本材料({
贴图:纹理
}));
backgroundMesh.material.depthTest=假;
backgroundMesh.material.depthWrite=false;
//创建您的背景场景
var backgroundScene=new THREE.Scene();
var backgroundCamera=新的三个摄像头();
背景场景。添加(背景摄影机);
backgroundScene.add(backgroundMesh);
//渲染功能
var render=函数(){
请求动画帧(渲染);
//更新要设置的颜色
如果(颜色<0xDDDD)颜色+=0x0000ff;
//更新立方体颜色
立方体。材质。颜色。设置十六进制(颜色);
//更新立方体旋转
立方体旋转x+=0.05;
立方体旋转y+=0.02;
renderer.autoClear=false;
.clear();
渲染器。渲染(背景场景、背景摄影机);
渲染器。渲染(场景、摄影机);
};
render();
希望这有帮助
注意(2014/06/28):此代码适用于最新版本的Three.js:R67谢谢)
我找到了另一个解决方案:
<!DOCTYPE html>
<head>
<title>three.js webgl - orbit controls</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
<style>
body {
color: #000;
font-family:Monospace;
font-size:13px;
text-align:center;
font-weight: bold;
background-image:url(./foto.jpg);
margin: 0px;
overflow: hidden;
}
#info {
color:#000;
position: absolute;
top: 0px; width: 100%;
padding: 5px;
}
a {
color: red;
}
</style>
</head>
<body>
<div id="container"></div>
<div id="info">
<a href="http://threejs.org" target="_blank">three.js</a>
</div>
<script src="./three.min.js"></script>
<script src="js/loaders/OBJLoader.js"></script>
<script src="js/controls/OrbitControls.js"></script>
<script src="js/Detector.js"></script>
<script src="js/libs/stats.min.js"></script>
<!--используем для вывода информации fps-->
<script>
if ( ! Detector.webgl ) Detector.addGetWebGLMessage();
var container, stats;
var camera, controls, scene, renderer;
var cross;
init();
animate();
function init() {
camera = new THREE.PerspectiveCamera( 90, window.innerWidth / window.innerHeight, 0.1, 2000 );
camera.position.z = 100;
controls = new THREE.OrbitControls( camera );
controls.addEventListener( 'change', render );
scene = new THREE.Scene();
var manager = new THREE.LoadingManager();
manager.onProgress = function ( item, loaded, total ) {
console.log( item, loaded, total );
};
var texture = new THREE.Texture();
var loader = new THREE.ImageLoader( manager );
loader.load( './kos.jpg', function ( image ) {
texture.image = image;
texture.needsUpdate = true;
} );
// model
var loader = new THREE.OBJLoader( manager );
loader.load( './skull.obj', function ( object ) {
object.traverse( function ( child ) {
if ( child instanceof THREE.Mesh ) {
child.material.map = texture;
}
} );
object.position.y = 10;
scene.add( object );
} );
// lights
light = new THREE.DirectionalLight( 0xffffff );
light.position.set( 1, 1, 1 );
scene.add( light );
light = new THREE.DirectionalLight( 0xffffff );
light.position.set( -1, -1, -1 );
scene.add( light );
light = new THREE.AmbientLight( 0xffffff );
scene.add( light );
renderer = new THREE.WebGLRenderer( { antialias: false } );
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
container = document.getElementById( 'container' );
container.appendChild( renderer.domElement );
stats = new Stats();
stats.domElement.style.position = 'absolute';
stats.domElement.style.top = '0px';
stats.domElement.style.zIndex = 100;
container.appendChild( stats.domElement );
window.addEventListener( 'resize', onWindowResize, false );
}
function onWindowResize() {
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize( window.innerWidth, window.innerHeight );
render();
}
function animate() {
requestAnimationFrame( animate );
controls.update();
}
function render() {
renderer.render( scene, camera );
stats.update();
}
</script>
</body>
three.js webgl-动态观察控件
身体{
颜色:#000;
字体系列:Monospace;
字体大小:13px;
文本对齐:居中;
字体大小:粗体;
背景图片:url(./foto.jpg);
边际:0px;
溢出:隐藏;
}
#信息{
颜色:#000;
位置:绝对位置;
顶部:0px;宽度:100%;
填充物:5px;
}
a{
颜色:红色;
}
如果(!Detector.webgl)Detector.addGetWebGLMessage();
var容器,stats;
摄像机、控件、场景、渲染器;
变量交叉;
init();
制作动画();
函数init(){
摄像机=新的三视角摄像机(90,window.innerWidth/window.innerHeight,0.12000);
摄像机位置z=100;
控制装置=新的三个控制装置(摄像机);
控件。addEventListener('change',render);
场景=新的三个。场景();
var-manager=new-THREE.LoadingManager();
manager.onProgress=功能(项目、已加载、总计){
控制台日志(项目、已加载、总计);
};
var texture=new THREE.texture();
var loader=new THREE.ImageLoader(管理器);
loader.load('./kos.jpg',函数(图){
纹理.图像=图像;
texture.needsUpdate=true;
} );
//模型
var装入器=新的三个。对象装入器(管理器);
loader.load('./skull.obj',函数(对象){
遍历(函数(子对象){
if(三个.Mesh的子实例){
child.material.map=纹理;
}
} );
object.position.y=10;
场景。添加(对象);
} );
//灯光
灯光=新的三个方向灯光(0xffffff);
光。位置。设置(1,1,1);
场景。添加(灯光);
灯光=新的三个方向灯光(0xffffff);
灯。位置。设置(-1,-1,-1);
场景。添加(灯光);
灯光=新的三个环境灯光(0xffffff);
场景。添加(灯光);
renderer=new THREE.WebGLRenderer({antialas:false});
renderer.setSize(window.innerWidth、window.innerHeight);
document.body.appendChild(renderer.doElement);
container=document.getElementById('container');
container.appendChild(renderer.doElement);
统计数据=新统计数据();
stats.domElement.style.position='绝对';
stats.domElement.style.top='0px';
stats.domElement.style.zIndex=100;
容器附录C
scene = new THREE.Scene();
bgTexture = loader.load("https://i.stack.imgur.com/vDUZz.jpg",
function ( texture ) {
var img = texture.image;
bgWidth= img.width;
bgHeight = img.height;
resize();
} );
scene.background = bgTexture;
bgTexture.wrapS = THREE.MirroredRepeatWrapping;
bgTexture.wrapT = THREE.MirroredRepeatWrapping;
var aspect = window.innerWidth / window.innerHeight;
var texAspect = bgWidth / bgHeight;
var relAspect = aspect / texAspect;
bgTexture.repeat = new THREE.Vector2(
Math.max(relAspect, 1),
Math.max(1/relAspect,1) );
bgTexture.offset = new THREE.Vector2(
-Math.max(relAspect-1, 0)/2,
-Math.max(1/relAspect-1, 0)/2 );
//Load background texture
const loader = new THREE.TextureLoader();
loader.load('https://images.pexels.com/photos/1205301/pexels-photo-1205301.jpeg' , function(texture)
{
scene.background = texture;
});
<head>
<meta charset=utf-8>
<title>Temple7</title>
<style>
body { margin: 0;
}
canvas { width: 100%; height: 100%;
background-image:url(Clouds.jpg);
}
</style>
</head>