【前端知识】Three 学习日志(十)—— 常见几何体(长方体、球体、圆柱、矩形平面、圆形平面)

这篇具有很好参考价值的文章主要介绍了【前端知识】Three 学习日志(十)—— 常见几何体(长方体、球体、圆柱、矩形平面、圆形平面)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Three 学习日志(十)—— 常见几何体(长方体、球体、圆柱、矩形平面、圆形平面)

一、构建常用几何体
const geometry_list = []

// BoxGeometry:长方体
const geometry_box = new THREE.BoxGeometry(100, 100, 100);
geometry_list.push(geometry_box);
// SphereGeometry:球体
const geometry_sphere = new THREE.SphereGeometry(50);
geometry_list.push(geometry_sphere);
// CylinderGeometry:圆柱
const geometry_cylinder = new THREE.CylinderGeometry(50, 50, 100);
geometry_list.push(geometry_cylinder);
// PlaneGeometry:矩形平面
const geometry_plane = new THREE.PlaneGeometry(100, 50);
geometry_list.push(geometry_plane);
// CircleGeometry:圆形平面
const geometry_circle = new THREE.CircleGeometry(50);
geometry_list.push(geometry_circle);

//通用材质对象Material
const material = new THREE.MeshLambertMaterial({
    color: 0x00ffff, // 设置材质颜色
    transparent: true,// 开启透明
    opacity: 0.5,// 设置透明度
    side: THREE.DoubleSide, // 矩形平面、圆形平面默认只有正面可见,需设置side来达到两面可见的目的
});
二、 遍历加入场景中
for (const gIdx in geometry_list) {
    const mesh = new THREE.Mesh(geometry_list[gIdx], material); //网格模型对象Mesh
    mesh.position.set(gIdx * 150, 0, 0);
    scene.add(mesh);
}
三、效果展示

【前端知识】Three 学习日志(十)—— 常见几何体(长方体、球体、圆柱、矩形平面、圆形平面),前端知识,Three.js,前端文章来源地址https://www.toymoban.com/news/detail-731678.html

四、完整代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Learn Three</title>
    <!-- 引入three,下载地址参考:http://www.webgl3d.cn/pages/aac9ab/#%E7%89%B9%E5%AE%9A%E7%89%88%E6%9C%ACthree-js%E6%96%87%E4%BB%B6%E5%8C%85%E4%B8%8B%E8%BD%BD -->
    <script src="../build/three.js"></script>
    <!-- 引入相机控件 -->
    <script type="importmap">
        {
            "imports": {
                "three": "../build/three.module.js",
                "three/addons/": "../examples/jsm/"
            }
        }
    </script>
</head>

<body>
    <script type="module">
        // 引入轨道控制器扩展库OrbitControls.js
        import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
        // 创建3D场景对象Scene
        const scene = new THREE.Scene();
        const axesHelper = new THREE.AxesHelper(150);
        scene.add(axesHelper);

        const geometry_list = []

        // BoxGeometry:长方体
        const geometry_box = new THREE.BoxGeometry(100, 100, 100);
        geometry_list.push(geometry_box);
        // SphereGeometry:球体
        const geometry_sphere = new THREE.SphereGeometry(50);
        geometry_list.push(geometry_sphere);
        // CylinderGeometry:圆柱
        const geometry_cylinder = new THREE.CylinderGeometry(50, 50, 100);
        geometry_list.push(geometry_cylinder);
        // PlaneGeometry:矩形平面
        const geometry_plane = new THREE.PlaneGeometry(100, 50);
        geometry_list.push(geometry_plane);
        // CircleGeometry:圆形平面
        const geometry_circle = new THREE.CircleGeometry(50);
        geometry_list.push(geometry_circle);

        //材质对象Material
        const material = new THREE.MeshLambertMaterial({
            color: 0x00ffff, // 设置材质颜色
            transparent: true,// 开启透明
            opacity: 0.5,// 设置透明度
            side: THREE.DoubleSide, // 矩形平面、圆形平面默认只有正面可见,需设置side来达到两面可见的目的
        });

        for (const gIdx in geometry_list) {
            const mesh = new THREE.Mesh(geometry_list[gIdx], material); //网格模型对象Mesh
            mesh.position.set(gIdx * 150, 0, 0);
            scene.add(mesh);
        }

        const ambient = new THREE.AmbientLight(0xffffff, 0.8);
        scene.add(ambient);

        const camera = new THREE.PerspectiveCamera();
        camera.position.set(800, 800, 800);
        camera.lookAt(200, 0, 0);
        const width = window.innerWidth; // 窗口宽度
        const height = window.innerHeight; // 窗口高度
        const renderer = new THREE.WebGLRenderer();
        renderer.setSize(width, height);
        renderer.render(scene, camera); //执行渲染操作
        document.body.appendChild(renderer.domElement);

        // 设置相机控件轨道控制器
        const controls = new OrbitControls(camera, renderer.domElement);
        // 如果OrbitControls改变了相机参数,重新调用渲染器渲染三维场景
        controls.addEventListener('change', function () {
            renderer.render(scene, camera); //执行渲染操作
        });//监听鼠标、键盘事件
    </script>
</body>
<style>
    body {
        overflow: hidden;
        margin: 0px;
    }
</style>

</html>

到了这里,关于【前端知识】Three 学习日志(十)—— 常见几何体(长方体、球体、圆柱、矩形平面、圆形平面)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Threejs学习05——球缓冲几何体背景贴图和环境贴图

    这是一个非常简单基础的threejs的学习应用!本节主要学习的是球面缓冲几何体的贴图部分,这里有环境贴图以及背景贴图,这样可以有一种身临其境的效果!这里环境贴图用的是一个.hdr的文件,可以在网上随便下载一些使用,我在这里的例子里面使用的hdr文件已经免费上传

    2024年02月11日
    浏览(15)
  • VTK 几何体连通区域分析 vtkPolyDataConnectivityFilter

    前言:    vtkPolyDataConnectivityFilter 使用过,但网上没有看到完事的教程;这里整理一下;   提取数据集中连通的多边形数据。 该类是一个滤波器,提取cell(区域) - 拥有公共点或者满足某个阈值 该类在提取连通区域时候有如下6种模式:    1 )提取数据集中的最大(最多

    2024年02月02日
    浏览(38)
  • 【ThreeJS基础教程-初识Threejs】1.6各种各样的几何体

    本段内容会写在0篇以外所有的,本人所编写的Threejs教程中 对,学习ThreeJS有捷径 当你有哪个函数不懂的时候,第一时间去翻一翻文档 当你有哪个效果不会做的时候,第一时间去翻一翻所有的案例,也许就能找到你想要的效果 最重要的一点,就是,绝对不要怕问问题,越怕找

    2024年02月08日
    浏览(34)
  • d3d12龙书阅读----绘制几何体(上)

    本节主要介绍了构建一个简单的彩色立方体所需流程与重要的api 下面主要结合立方体代码分析本节相关知识 输入装配器阶段的输入 首先,我们需要定义立方体的八个顶点 顶点结构体: 当然,对于更复杂的情况,我们不仅要定义顶点的位置与颜色,还要包括法线向量、纹理

    2024年03月27日
    浏览(44)
  • 【前端知识】常见的加密算法介绍

    略微介绍一下前端中常见的加密算法。前端中常见的加密算法主要形式包括——哈希函数,消息认证码,对称加密和非对称加密算法,其中: (1)哈希函数 图片来源于:知乎yaoyao——区块链100讲:盘点那些常用的加密算法原理 定义 :哈希也叫散列,是指将任意长度的消息

    2024年02月05日
    浏览(35)
  • 【Linux深造日志】运维工程师必会Linux常见命令以及周边知识!

    🎬 鸽芷咕 :个人主页  🔥 个人专栏 : 《linux深造日志》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活!   哈喽各位宝子们好啊!我是博主鸽芷咕。日志这个东西我相信大家都不陌生,在 linxu/Windows 系统中每天运行都会产生各种系统日志。而咱们每天学习知识也是一

    2024年04月17日
    浏览(40)
  • 【计算机基础知识9】前端设计模式与常见类型

    目录 一、前言 二、设计模式的基本概念和原则 三、创建型设计模式 四、结构型设计模式 五、行为型设计模式 六、MVC和MVVM框架中的设计模式 七、实际应用案例分析 在软件开发领域,设计模式是一种解决常见问题的最佳实践,它可以帮助开发者在面对不断变化的需求和环境

    2024年02月09日
    浏览(31)
  • Spring Boot日志系统大揭秘:从零开始学习Spring Boot日志:常见问题解答和最佳实践

    Spring Boot 日志机制和工具用于记录应用程序的日志信息和追踪应用程序的执行过程。它集成了常用的日志框架,如 Log4j、logback、Java Util Logging等,并提供简单易用的配置方式,让开发人员可以方便地监控应用程序的运行状态和性能。在项目启动时,日志已经开始输出,但尚未

    2024年02月08日
    浏览(48)
  • Linux:入门学习知识及常见指令

    操作系统(Operating System)是软件,操作系统的存在是为了让计算机更好用,这是操作系统的根本要义 在计算机内部大致是可以这样进行划分: 操作系统是一款进行软硬件资源管理的软件,具体如何理解这句话? 在C语言学习中我们写的第一个程序一般都是: 从最终效果来看,

    2024年02月15日
    浏览(24)
  • 深度学习·理论篇(2023版)·第002篇深度学习和计算机视觉中的基础数学知识01:线性变换的定义+基于角度的线性变换案例(坐标变换)+点积和投影+矩阵乘法的几何意义+图形化精讲

    💕 恭喜本博客浏览量达到两百万,CSDN内容合伙人,CSDN人工智能领域实力新星~ 🧡 本文章为2021版本迭代更新版本,在结合有效知识的基础上对文章进行合理的增加,使得整个文章时刻顺应时代需要 🧡 本专栏将通过系统的深度学习实例,从可解释性的角度对深度学习的原理

    2023年04月08日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包