three.js - three.js - 如何高效地生成星星
问题描述
我是尝试实现夜空的three.js 的新手,对于星星,我正在生成500 个6x6 段的球体,每个球体具有随机颜色和随机球坐标,生成后我正在动画整个场景的旋转。
有时这会冻结,所以我认为我的方法效率低下 - 我如何以有效的方式以编程方式生成星星?据我了解,更简单的解决方案可能是大外球内侧的额外纹理,但在这种情况下,我需要获得额外的资产,而且这可能非常平坦
function randomArbitrary(min, max) {
return Math.random() * (max - min) + min;
}
var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera(
35,
window.innerWidth / window.innerHeight,
0.1,
1000
);
var renderer = new THREE.WebGLRenderer({
antialias: false
});
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
let spheres = [];
for (let i = 1; i < 300; i++) {
let geometry = new THREE.SphereGeometry(0.02 * randomArbitrary(0.5, 1), 6, 6);
let material = new THREE.MeshBasicMaterial({
color: new THREE.Color(1, randomArbitrary(190, 220) / 255, Math.round(Math.random()))
});
let sphere = new THREE.Mesh(geometry, material);
scene.add(sphere);
spheres.push(sphere);
sphere.position.setFromSpherical(new THREE.Spherical(5 + 5 * Math.random(), 2 * Math.PI * Math.random(), 2 * Math.PI * Math.random()))
}
scene.rotation.x = 0.2;
scene.rotation.z = 0.6;
camera.position.z = 5;
var axesHelper = new THREE.AxesHelper(3);
scene.add(axesHelper);
var animate = function() {
requestAnimationFrame(animate);
scene.rotation.y += 0.001;
scene.rotation.z -= 0.001;
renderer.render(scene, camera);
};
animate();
body {
height: 100vh;
width: 100vw;
margin: 0;
padding: 0;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/100/three.min.js"></script>
解决方案
推荐阅读
- html - 添加了 UWP applicationcontenturirules url 规则,但不适用于 iframe
- node.js - 在节点 js 的另一个 cron 作业中执行一个 cron 作业
- python - 使用 python 子进程调用 docker-compose 以 FileNotFoundError 'docker-compose' 结尾
- nginx - 在等待长数据库查询 (uWSGI) 时释放工作人员进行处理?
- php - Symfony/Doctrine 推荐什么数据类型来持久化 ChoiceType 字段的选择?
- android - 反应原生动态评论头像图片
- sql-server - Sqlcmd:-h 和 -y 0 选项互斥?
- eclipse - CDT 9 取消了对不同 ASTCompletionNode 提案的支持
- java - SwingWorker 的 ExecutorService 参数
- javascript - 在弹出窗口上使用开启器时出现 Chrome 错误(跨域)