为什么下面的javascript函数(drawBorder())没有切割一个洞
Why the following javascript function (drawBorder()) is not cutting a hole?
我正在尝试通过在矩形内切割一个矩形孔来创建一个边界。这个矩形是按照它应该的方式显示出来的,但我不知道为什么这个洞没有显示出来。
var scene;
var camera;
var renderer;
var canvasWidth;
var canvasHeight;
var aspRat;
var viewLength;
init();
draw();
renderScene();
function init(){
renderer = new THREE.WebGLRenderer({antialias: true});
renderer.setClearColor(0x000000, 1);
canvasWidth = window.innerWidth - 50;
console.log(canvasWidth);
canvasHeight = window.innerHeight - 50;
console.log(canvasHeight);
renderer.setSize(canvasWidth, canvasHeight);
document.getElementById("WebGLCanvas").appendChild(renderer.domElement);
scene = new THREE.Scene();
viewLength = 1000;
aspRat = canvasWidth/canvasHeight;
camera = new THREE.OrthographicCamera(-aspRat*viewLength/2, aspRat*viewLength/2,
viewLength/2, -viewLength/2, -1000, 1000);
console.log(aspRat*viewLength);
console.log(aspRat);
console.log(viewLength);
camera.position.set(0, 0, 15);
camera.lookAt(scene.position);
scene.add(camera);
}
function draw(){
drawBorder();
}
function renderScene(){
renderer.render(scene, camera);
}
function drawBorder() {
var border = new THREE.Shape();
border.moveTo(-aspRat*viewLength/2, viewLength/2);
border.lineTo(aspRat*viewLength/2, viewLength/2);
border.lineTo(aspRat*viewLength/2, -viewLength/2);
border.lineTo(-aspRat*viewLength/2, -viewLength/2);
border.lineTo(-aspRat*viewLength/2, viewLength/2);
var rectHole = new THREE.Path();
rectHole.moveTo(-aspRat*viewLength/2 - 15, viewLength/2 - 10);
rectHole.lineTo(aspRat*viewLength/2 - 15, viewLength/2 - 10);
rectHole.lineTo(aspRat*viewLength/2 - 15, -viewLength/2 - 10);
rectHole.lineTo(-aspRat*viewLength/2 - 15, -viewLength/2 - 10);
rectHole.lineTo(-aspRat*viewLength/2 - 15, viewLength/2 - 10);
border.holes.push(rectHole);
var geometry = new THREE.ShapeGeometry( border );
var material = new THREE.MeshBasicMaterial({ color:0x663300});
var mesh = new THREE.Mesh(geometry, material );
scene.add(mesh);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r72/three.min.js"></script>
<!DOCTYPE html>
<html>
<head>
<title>StainedGlass</title>
<meta name="viewport" content= "width=640, height=480, initial-scale=1">
<style type= "text/css">
body{
background-color: #000000;
overflow: hidden;
margin: 0px, 0px, 0px, 0px;
}
#slider1{
position: relative;
left: 0px;
top: 0px;
}
</style>
<script type="text/javascript" src="src/three.min.js"></script>
</head>
<body>
<div id="WebGLCanvas">
<input id="slider1" type="range" min="0.0" max="1.0" step="0.1"/>
<script type="text/javascript" src="src/myScript.js"></script>
</div>
</body>
</html>
您正在创建一个有孔的THREE.Shape
,并使用如下模式:
var shape = new THREE.Shape();
var hole = new THREE.Path();
...
shape.holes.push( hole );
var geometry = new THREE.ShapeGeometry( shape );
你必须注意指定形状顶点和孔的顺序。
尝试以逆时针顺序指定形状的顶点,并以顺时针顺序指定孔的顶点。
three.js r.72
相关文章:
- 我应该如何从xml文件构建一个javascript页面
- 有没有一个javascript图形绘制库可以进行气球树布局
- 如何将一个JavaScript函数回调为多个函数
- 代码背后调用一个JavaScript函数的按钮点击-C#
- 多次调用另一个javascript函数中的javascript函数
- HTML外部javascript加载另一个javascript
- 在一个javascript文件中为整个网站创建标签
- 在任何AJAX调用之前触发一个javascript函数
- 如何用另一个Javascript更改Javascript函数值
- 动态创建一个javascript/jquery多级数组
- 将变量值从一个javascript传递到另一个javascript
- 获取一个javascript对象attr's
- 是一个javascript bookmarklet,可以设置破坏跨域安全的域cookie
- PNG图像被覆盖,但每个图像都有一个链接可以更改,每次一个-Javascript/jQuery/CSS
- 添加一个javascript函数来下载elfinder上的事件
- 有没有一个Javascript代码可以看到你的缓存有多满
- 使用jenkins从不同文件夹中的文件构建一个javascript文件
- 是否有一个javascript库来解析简单的查询
- 一个javascript实现base64图像编码并将结果写入文本文件
- 使用一个Javascript函数提交多个表单可以在FF中工作,而不需要其他浏览器