javascript - 来自透明图像的三个 js 形状
问题描述
嗨,我正在尝试创建一个 3d 模型,其上下两侧为透明图像形状,其他为单色(本例中为黄色)
var texture = new THREE.TextureLoader().load( 'img.png' );
var img = new THREE.MeshBasicMaterial( { map: texture } );
var geom = new THREE.BoxGeometry(25,25,1);
https://jsfiddle.net/k2aoh7um/
我怎样才能做到这一点?
解决方案
我可以想象如何实现这一目标的唯一方法是使用THREE.Shape()
and THREE.ExtrudeBufferGeometry()
:
var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera(60, window.innerWidth / window.innerHeight, 1, 1000);
camera.position.set(0, 1, 2);
var renderer = new THREE.WebGLRenderer({
antialias: true
});
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.setClearColor(0x101010);
document.body.appendChild(renderer.domElement);
var controls = new THREE.OrbitControls(camera, renderer.domElement);
var center = new THREE.Vector2();
var starLong = new THREE.Vector2(0, 1);
var starShort = new THREE.Vector2(0, 0.5).rotateAround(center, THREE.Math.degToRad(36));
var angle = THREE.Math.degToRad(72);
var points = [];
for (var i = 0; i < 5; i++) {
points.push(starLong.clone().rotateAround(center, angle * i));
points.push(starShort.clone().rotateAround(center, angle * i));
}
var path = new THREE.Shape(points);
var geom = new THREE.ExtrudeBufferGeometry(path, {
steps: 1,
amount: 0.0625,
bevelEnabled: false
});
geom.rotateX(-Math.PI * 0.5);
var star = new THREE.Mesh(geom, new THREE.MeshBasicMaterial({
color: "orange",
wireframe: true
}));
scene.add(star);
render();
function render() {
requestAnimationFrame(render);
renderer.render(scene, camera);
}
body {
overflow: hidden;
margin: 0;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/92/three.min.js"></script>
<script src="https://threejs.org/examples/js/controls/OrbitControls.js"></script>
推荐阅读
- javascript - 数组上有元素,但长度为零
- elasticsearch - 具有嵌套字段聚合和字段子聚合(从根)的弹性查询返回空的存储桶数组
- github - 不使用master时从开发者分支拉取,推送到生产来自开发者分支
- node.js - Google People API:请求具有无效的身份验证凭据 - 未设置授权承载标头
- sql-server - 是否可以在表行插入时从 AWS RDS SQL Server 调用 lambda?
- c# - C# 最多 10 个变量
- sql - 使用更新的 SQL 执行块
- python - 使用 Python 查找所有迷宫解决方案
- gstreamer - 无法使用 PyGObject 将 Nvstreamdemux 链接到 rtph264pay 元素
- google-cloud-platform - 在负载均衡器中仅支持 https