Javascript 如何使用three.js在网站中创建圆形框架webgl窗口场景
我想要一个圆形的场景而不是矩形的场景框架,这样只有立方体在网站框架中可见。我不希望整个网页显示场景,而只是圆形框架中的立方体。能否修改场景“Javascript 如何使用three.js在网站中创建圆形框架webgl窗口场景,javascript,three.js,Javascript,Three.js,我想要一个圆形的场景而不是矩形的场景框架,这样只有立方体在网站框架中可见。我不希望整个网页显示场景,而只是圆形框架中的立方体。能否修改场景“var scene=new THREE.scene();”以将矩形帧更改为圆形帧?抱歉,如果这是一个愚蠢的问题,但在谷歌上找不到答案。请帮帮我,我只是个初学者 <!DOCTYPE HTML> <html> <head> <title>Learning 3JS</title> <
var scene=new THREE.scene();
”以将矩形帧更改为圆形帧?抱歉,如果这是一个愚蠢的问题,但在谷歌上找不到答案。请帮帮我,我只是个初学者
<!DOCTYPE HTML>
<html>
<head>
<title>Learning 3JS</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0" />
<meta name="theme-color" content="#ff3400" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<script src="../three.js-master/build/three.js"></script>
<script src="detector.js">
if (Detector.webgl) {
animate();
} else {
var warning = Detector.getWebGLErrorMessage();
document.getElementById('container').appendChild(warning);
}
</script>
<script src="OrbitControls.js"></script>
<script src="TrackballControls.js"></script>
</head>
<body>
<div id="container" style="width: 100%; height: 640px; background: aqua;"></div>
<script>
var container = document.querySelector('#container');
var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera(75, container.clientWidth/container.clientHeight, 0.1, 1000);
var renderer = new THREE.WebGLRenderer();
var geometry = new THREE.BoxGeometry(20, 20, 20);
var material = new THREE.MeshLambertMaterial( { color: 0xffffff } );
var mesh = new THREE.Mesh(geometry, material);
scene.add(mesh);
camera.position.z = 50;
var light = new THREE.PointLight(0xffff00);
/* position the light so it shines on the cube (x, y, z) */
light.position.set(-15, -10, 30);
scene.add(light);
var controls = new THREE.OrbitControls(camera);
//var controls = new THREE.TrackballControls( camera );
controls.target.set( 0, 0, 0 )
var loop = function()
{
requestAnimationFrame(loop);
controls.update();
renderer.render(scene, camera);
mesh.rotation.x += 0.02;
mesh.rotation.y += 0.005;
//mesh.rotation.z += 0.1;
}
loop();
renderer.setSize(container.clientWidth, container.clientHeight);
container.appendChild(renderer.domElement);
</script>
</body>
</html>
学习3JS
if(Detector.webgl){
制作动画();
}否则{
var warning=Detector.getWebGLErrorMessage();
document.getElementById('container').appendChild(警告);
}
var container=document.querySelector(“#container”);
var scene=new THREE.scene();
var摄像机=新的三视角摄像机(75,container.clientWidth/container.clientHeight,0.11000);
var renderer=new THREE.WebGLRenderer();
var geometry=新的3.BoxGeometry(20,20,20);
var material=new THREE.MeshLambertMaterial({color:0xffffff});
var mesh=新的三个网格(几何体、材质);
场景。添加(网格);
摄像机位置z=50;
var灯=新的三点灯(0xffff00);
/*放置灯光,使其照射在立方体上(x、y、z)*/
光。位置。设置(-15,-10,30);
场景。添加(灯光);
var控制装置=新的三个轨道控制装置(摄像机);
//var控制=新的三个轨迹球控制(摄像头);
控件.target.set(0,0,0)
var循环=函数()
{
请求动画帧(循环);
控件更新();
渲染器。渲染(场景、摄影机);
网格旋转.x+=0.02;
网格旋转y+=0.005;
//网格旋转.z+=0.1;
}
loop();
renderer.setSize(container.clientWidth,container.clientHeight);
container.appendChild(renderer.domeElement);
不,不能使用圆形画布/帧缓冲区,就像不能使用圆形图像一样。这是一种计算的一般规则
但与图像一样,您可以模拟圆形“视口”,有许多不同的方法来实现这一点。例如,通过使用透明像素,或通过将图像的矩形背景绘制为与背景相同的颜色,等等
此外,我认为THREE.js目前正在阻止您了解您所做的事情,因为它具有自动功能。您最好从头开始,至少要了解画布概念以及WebGL如何使用它:
好吧,你可以制作一个正方形画布,但随后使用一个圆形模具缓冲区,这样就不会有任何东西画在圆圈之外。三个模具不支持模具,与其他示例相比,它不会非常简单(需要获取
gl
上下文,启用模具,执行正确的调用),但却是一个有效的解决方案。嗯,“防止”听起来像是一个相当大胆的声明:)我认为它并没有阻止,因为它是开源的,可以研究。我认为学习足够多的webgl来完成这项工作与学习足够多的three.js并以其他方式完成这项工作一样困难。也应该可以在没有画布的情况下实现这一点,只需在画布上使用dom即可。三个选项将允许您编写剪辑着色器,并使全屏四边形比仅使用原始webgl容易得多。但是,您是否需要这样做可能并不明显。在本例中,我很清楚deepds14被THREE.js“误导”,因为它是如何在后台过程中自动创建canvas元素的。有些东西存在,但从未出现在代码中:画布,它实际上是一种图像。通过这些简单的信息(WebGL在一种称为画布的图像中绘制),可以帮助您了解搜索什么以实现“圆形视口”的目标。因为,答案从画布的组成、显示、填充等开始。