gpt4 book ai didi

javascript - 如何使用 three.js 制作带有 3d 模型的响应式 Canvas ?

转载 作者:行者123 更新时间:2023-11-30 20:55:02 32 4
gpt4 key购买 nike

我正在制作一个网页,其中我使用 threejs 创建了一个 Canvas 来显示 3d 对象(一个立方体)。我将此 Canvas 添加到一个 div 中(如多个文档所示)。
问题是,当我将屏幕的大小更改为小 Canvas 并且对象变小时,效果很好,但是当屏幕变大时, Canvas 会扩展并占据整个页面。
我正在寻找的是保持分配宽度和高度的尺寸
提前致谢。

<!DOCTYPE html>
<html>
<head>
<meta charset= UFT-8>
<title>tema</title>
<style type="text/css">

div{
width: 50%;
margin-left: 20px;
margin-right: 100px;
margin-top: 20px;
margin-bottom: 20px;
border: 2px solid blue;
}
</style>
</head>
<body>
<section class="menu">
<div id="container"></div>

<script src="https://ajax.googleapis.com/ajax/libs/threejs/r76/three.min.js" ></script>

<script type="text/javascript">
function init(){

width = 500;
height = 500;

scene = new THREE.Scene();

camera = new THREE.PerspectiveCamera( 75, width/height, 0.1, 1000 );

camera.position.z = 500;

renderer = new THREE.WebGLRenderer();
renderer.setSize( width, height);
renderer.setClearColor( 0xffffff);
renderer.setPixelRatio( window.devicePixelRatio );


contenedor = document.getElementById('container');

contenedor.appendChild(renderer.domElement);



var obj = new THREE.CubeGeometry(100,100,100);
var material = new THREE.MeshNormalMaterial();


body = new THREE.Mesh(obj,material);


scene.add( body );



window.addEventListener( 'resize', onWindowResize, false );

}

function onWindowResize() {

camera.aspect = window.innerWidth/ window.innerHeight;

camera.updateProjectionMatrix();
renderer.setSize( window.innerWidth, window.innerHeight );

}


var animate = function () {

requestAnimationFrame( animate );


body.rotation.x+=0.01;
body.rotation.y+=0.01;



renderer.render(scene, camera);
};
init();
animate();

</script>
</section>
</body>
</html>

最佳答案

这并不奇怪,您正在使用整个窗口的宽度/高度而不是实际的容器 div 宽度/高度来调整渲染器的大小,那么您期望什么...?

尝试将 onWindowResize 替换为:

function onWindowResize() {

camera.aspect = contenedor.clientWidth / contenedor.clientHeight;

camera.updateProjectionMatrix();

renderer.setSize(contenedor.clientWidth, contenedor.clientHeight);
}

关于javascript - 如何使用 three.js 制作带有 3d 模型的响应式 Canvas ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47756462/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com