html - 将 Three.js 场景与网页结合作为背景

标签 html three.js

我创建了两个单独的 html 文档。其中渲染了 Three.js 场景和基本 html 页面。我的问题是如何正确组合它们?我的目标是在左角创建旋转的绿色立方体和移动的红色立方体,红色立方体将从左侧移动到右侧。当移动到灰色内容区域时,红色立方体应该是不可见的。

三。 js:

<!DOCTYPE html>
<html>
<head>
    <meta charset=utf-8>
    <title>Cube_v2</title>
    <style>
        body { margin: 0; }
        canvas { width: 100%; height: 100% }
    </style>
</head>
<body>
    <script src="build/three.js"></script>
    <script>
        var scene = new THREE.Scene();
        scene.background = new THREE.Color( 0xf0f0f0 );

        var camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 );

        var renderer = new THREE.WebGLRenderer();
        renderer.setSize( window.innerWidth, window.innerHeight );
        document.body.appendChild( renderer.domElement );

        var geometry = new THREE.BoxGeometry( 1, 1, 1 );
        var material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
        var cube = new THREE.Mesh( geometry, material );
        //cube.position.x = 100;
        //cube.translateX = 100;
        //three.cube.position.x = 100;
        scene.add( cube );

        camera.position.z = 10;     
        camera.position.x = 10;

        var geometry_2 = new THREE.BoxGeometry( 2, 2, 2 );
        var material_2 = new THREE.MeshBasicMaterial( { color: 0xff0000 } );
        var cube_2 = new THREE.Mesh( geometry_2, material_2 );
        scene.add( cube_2 );


        function animate() {
        requestAnimationFrame( animate );
        cube.rotation.y += 0.01;
        cube_2.position.x += 0.05;
        renderer.render( scene, camera );
        }
        animate();
    </script>
</body>
</html>

注意:我尝试使用 cube.position.x 移动绿色立方体, cube.translateXthree.cube.position.x 。但这不起作用,所以我通过移动相机解决了这个问题,但我不认为这是正确的方法。

HTML 我想要导入场景的文档可以在这里找到 JSfiddle

最佳答案

如果您想在网页中实现 Three.js 场景,请在基本 HTML 页面中您想要的位置创建一个 div。

<div id="myScene"></div>

并在脚本中代替:

document.body.appendChild( renderer.domElement );

写:

document.getElementById("myScene").appendChild( renderer.domElement );

代码片段:
var scene = new THREE.Scene();
scene.background = new THREE.Color( 0xf0f0f0 );

var camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 0.1, 1000 );

var renderer = new THREE.WebGLRenderer();
renderer.setSize( window.innerWidth, window.innerHeight );
document.getElementById("myScene").appendChild( renderer.domElement );

var geometry = new THREE.BoxGeometry( 1, 1, 1 );
var material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
var cube = new THREE.Mesh( geometry, material );
//cube.position.x = 100;
//cube.translateX = 100;
//three.cube.position.x = 100;
scene.add( cube );

camera.position.z = 10;    
camera.position.x = 10;

var geometry_2 = new THREE.BoxGeometry( 2, 2, 2 );
var material_2 = new THREE.MeshBasicMaterial( { color: 0xff0000 } );
var cube_2 = new THREE.Mesh( geometry_2, material_2 );
scene.add( cube_2 );


function animate() {
requestAnimationFrame( animate );
cube.rotation.y += 0.01;
cube_2.position.x += 0.05;
renderer.render( scene, camera );
}
animate();
canvas { 
    width: 100%;
    height: 100% 
}
.blue {
    color: #ffffff;  
    background-color: red;
    display: block;
    float: none;
    width: 400px;
    margin: 0 auto;
    text-align: center;
}
p {
   text-align: center;
   color: #ffffff;
}
.content {
    background-color: #e6e6e6;
    display: block;
    float: none;
    margin: 0 auto;
    overflow:hidden;
    width:400px;
    min-height: calc(100vh - 121px);
}
.footer {
    color: #ffffff;  
    background-color: red;
    display: block;
    float: none;
    width: 400px;
    margin: 0 auto;
    text-align: center;
    position: absolute;
    bottom: 0;
    left: 0;
    right: 0;
    height:30px;
}
body {
    margin:0;
    padding:0;
    font-family: 'Open Sans', sans-serif;
    line-height: 1.5;
    font-size: 14px;
    overflow-x:hidden;
    min-height: 100%;
}
html {
    position:relative;
    min-height: 100%;
}
<div >
    <div class=blue>Header</div>
    <p style=color:red>LOGO</p>
    <div class="blue">Navigation Bar</div>
    <div id="myScene" class="content">
        Content.
        <div class="footer">Footer</div>
    </div>
</div>

<script src="https://threejs.org/build/three.min.js"></script>

关于html - 将 Three.js 场景与网页结合作为背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47473858/

相关文章:

javascript - 允许使用 execCommand 在 contentEditable div 中使用 Tabbing

php - Laravel/Blade 表单添加 'required' 来选择元素

javascript - three.js 在平面上旋转相机

webpack - 使用 Webpack 加载 GLB 模型 - Three.js

javascript - 获取变量对其他函数的综合性

HTML/CSS : How to Prevent Single Word Orphans Near Floated Elements?

javascript - 表单提交后重定向

javascript - 在 three.js 游戏中使用 cannon.js 进行碰撞检测

javascript - 如何使用 Three.js 在点击到达特定位置后停止相机动画

javascript - 每个面有 K 个顶点的 3D 点的三 Angular 剖分