马黑黑 发表于 2025-5-15 19:58

three.js几何体之二十面体

本帖最后由 马黑黑 于 2025-5-15 20:03 编辑 <br /><br /><style>
        #btnPrev { box-shadow: 2px 2px 6px rgba(0,0,0,.5); }
        #btnPrev:hover { box-shadow: 2px 2px 12px rgba(0,0,0,.5); font-weight: bold; }
</style>

<p>二十面缓冲几何体(IcosahedronGeometry)是一个用于生成二十面体的类。构造器:</p>
<blockquote>IcosahedronGeometry(radius : Float, detail : Integer)</blockquote>
<p> 其中:</p>
<blockquote>
        radius — 二十面体的半径,默认为 1<br>
        detail — 默认值为0。将这个值设为一个大于0的数将会为它增加一些顶点,使其不再是一个二十面体。当这个值大于1的时候,实际上它将变成一个球体
</blockquote>
<p>下面的代码,我们创建一个二十面几何体;材质是 MeshLambertMaterial,朗伯特材质,该材质光源才能呈现,我们打了两种光,一是环境光,二是方向光。本示例没有引入相机轨道控制器,只能观看:</p>
<div id="hEdiv"><pre id="hEpre">
&lt;script type="module"&gt;
        /* 二十面缓冲几何体 IcosahedronGeometry */
        import * as THREE from 'https://esm.sh/three';

        const scene = new THREE.Scene;
        const camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.1, 1000);
        camera.position.set(0, -1, 10);
        const renderer = new THREE.WebGLRenderer({ antialias: true });
        renderer.setSize(window.innerWidth, window.innerHeight);
        document.body.appendChild(renderer.domElement);

        const geometry = new THREE.IcosahedronGeometry(1.2, 0); // 创建二十面体
        const material = new THREE.MeshLambertMaterial({ color: 0x90ee90 }); // 创建朗伯特材质
        const ico = new THREE.Mesh(geometry, material); // 创建网格Mess对象(图像=几何体+材质)
        scene.add(ico); // 图像添加到场景成形
       
        const ambientLight = new THREE.AmbientLight(0xffeeee, 0.75); // 环境光 : 改善场景视觉
        scene.add(ambientLight);
       
        const dirLight = new THREE.DirectionalLight(0xffd700, 2.5); // 方向光 : 角度照亮
        dirLight.position.set(20,20,20); // 光来自右上靠近观者
        dirLight.target = ico; // 光作用的对象 : 二十面体图像
        scene.add(dirLight);

        const animate = () =&gt; {
                requestAnimationFrame(animate);
                ico.rotation.x += 0.01;
                ico.rotation.y += 0.01;
                renderer.render(scene, camera);
        };

        window.onresize = () =&gt; renderer.setSize(window.innerWidth, window.innerHeight);

        animate();

&lt;/script&gt;
</pre></div>
<blockquote><button id="btnPrev" name="btnPrev" type="button" value="prev">运行代码</button></blockquote>

<script type="module">
        import hlight from 'https://638183.freep.cn/638183/web/helight/helight1.js';
        hlight.hl(hEdiv, hEpre);

        btnPrev.onclick = () => {
                const value = hEpre.textContent + '<style>body {margin: 0; }</style>';
                const previewWindow = window.open('', 'preview1', 'width=1200,height=768,top=100,left=100');
                previewWindow.document.open();
                previewWindow.document.write(value);
                setTimeout(function() { previewWindow.document.title = "预览" }, 100);
                previewWindow.document.close();
        };
</script>

马黑黑 发表于 2025-5-15 19:59

二十面体和十二面体很接近,所以一天里发了

红影 发表于 2025-5-15 20:34

二十面体的每一面是三角形,十二面的是五边形,感觉还是十二面体的更好看{:4_173:}

红影 发表于 2025-5-15 20:35

这光线设置很漂亮{:4_187:}

马黑黑 发表于 2025-5-15 20:54

红影 发表于 2025-5-15 20:34
二十面体的每一面是三角形,十二面的是五边形,感觉还是十二面体的更好看

十二面体是有历史的,二十面体嘛,我绝对更漂亮,给人沉稳、永固的感觉

马黑黑 发表于 2025-5-15 20:54

红影 发表于 2025-5-15 20:35
这光线设置很漂亮

慢慢也把光源介绍进来吧,从简单的弄起

小辣椒 发表于 2025-5-15 21:17

二十面体,会更加惊艳了吧

花飞飞 发表于 2025-5-15 21:20

马黑黑 发表于 2025-5-15 19:59
二十面体和十二面体很接近,所以一天里发了

这个二十面体又有光了。。
{:4_173:}
适用于十二面体么

花飞飞 发表于 2025-5-15 21:22

它的材质设定每面颜色又相同了。。。光源从右上部来。。
朗伯特材质,这个材质有中文名字了啊。。

马黑黑 发表于 2025-5-15 21:32

花飞飞 发表于 2025-5-15 21:22
它的材质设定每面颜色又相同了。。。光源从右上部来。。
朗伯特材质,这个材质有中文名字了啊。。

所有的材质都有中文名字

马黑黑 发表于 2025-5-15 21:33

花飞飞 发表于 2025-5-15 21:20
这个二十面体又有光了。。

适用于十二面体么

光和几何体无关,跟材质有关。之前说过,有些材质自发光、有的材质自带颜色、有些材质需要光照才能看到

马黑黑 发表于 2025-5-15 21:34

小辣椒 发表于 2025-5-15 21:17
二十面体,会更加惊艳了吧

面子是越多越好{:4_170:}

红影 发表于 2025-5-15 22:40

马黑黑 发表于 2025-5-15 20:54
十二面体是有历史的,二十面体嘛,我绝对更漂亮,给人沉稳、永固的感觉

个人感觉不一样吧,我更喜欢十二面体{:4_173:}

红影 发表于 2025-5-15 22:40

马黑黑 发表于 2025-5-15 20:54
慢慢也把光源介绍进来吧,从简单的弄起

嗯嗯,太好了{:4_187:}

马黑黑 发表于 2025-5-15 23:13

红影 发表于 2025-5-15 22:40
嗯嗯,太好了

光源是相对抽象的一个知识体系

马黑黑 发表于 2025-5-15 23:14

红影 发表于 2025-5-15 22:40
个人感觉不一样吧,我更喜欢十二面体

十二面体由于有历史,所以很多人会有所偏好

花飞飞 发表于 2025-5-16 20:18

马黑黑 发表于 2025-5-15 21:32
所有的材质都有中文名字

{:4_170:}还很少见。。听着怪时尚的

花飞飞 发表于 2025-5-16 20:18

马黑黑 发表于 2025-5-15 21:33
光和几何体无关,跟材质有关。之前说过,有些材质自发光、有的材质自带颜色、有些材质需要光照才能看到

这个关于材质和光的回复是昨天的,我才看到{:4_170:}

马黑黑 发表于 2025-5-16 20:38

花飞飞 发表于 2025-5-16 20:18
这个关于材质和光的回复是昨天的,我才看到

很多次了,不止昨天的

马黑黑 发表于 2025-5-16 20:38

花飞飞 发表于 2025-5-16 20:18
还很少见。。听着怪时尚的

时尚谈不上,材料学它是跟不上的
页: [1] 2 3
查看完整版本: three.js几何体之二十面体