马黑黑 发表于 2025-5-20 19:21

Malfunction

<style>
        #tz { --state: running; margin: 30px 0; left: calc(50% - 81px); transform: translateX(-50%); width: clamp(600px, 90vw, 1400px); min-height: 80vh; aspect-ratio: 16/9; background: url('https://ts1.tc.mm.bing.net/th/id/R-C.c93abfd269ff10b63b99a124e7d093eb?rik=aEBnY3MFXu3WeA&riu=http%3a%2f%2fimage.woshipm.com%2fwp-files%2f2016%2f04%2f1756b215a1834ac2a831020e54884853.jpg&ehk=eYUtfBohsFX2U8bPPVAMqUit14EXFHJEG2UGcktktrk%3d&risl=&pid=ImgRaw&r=0') no-repeat center/cover; box-shadow: 2px 2px 8px #000; display: grid; place-items: center; z-index: 1; position: relative; }
        #btnFs { bottom: 20px; color: #eee; text-align: center; }
        #btnFs:hover { color: red; }
        #vid {position: absolute; width: 100%; height: 100%; object-fit: cover; mask: radial-gradient(transparent 20%, red); -webkit-mask: radial-gradient(transparent 20%, red); pointer-events: none; }
</style>

<div id="tz">
        <audio id="player" src="https://music.163.com/song/media/outer/url?id=423314145" autoplay loop></audio>
        <video id="vid" src="https://bpic.588ku.com/video_listen/588ku_video/25/03/10/15/53/06/video67ce9a62ce8b9.mp4" autoplay loop muted></video>
</div>

<script type="module">
        import * as THREE from 'https://638183.freep.cn/638183/web/ku/three.module.min.js';
        import { FS } from 'https://638183.freep.cn/638183/web/ku/FS.js';

        var scene = new THREE.Scene;
        var clock = new THREE.Clock(), pointer = new THREE.Vector2(), raycaster = new THREE.Raycaster();
        var camera = new THREE.PerspectiveCamera(45, tz.offsetWidth / tz.offsetHeight, 0.1, 1000);
        camera.position.set(0, 0.2, 5);
        var renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true });
        renderer.setSize(tz.offsetWidth, tz.offsetHeight);
        tz.appendChild(renderer.domElement);

        var mesh = new THREE.Mesh(
                new THREE.LatheGeometry(),
                new THREE.MeshBasicMaterial({ wireframe: true })
        );
        mesh.rotateX(-0.1);
        var son = new THREE.Mesh(
                new THREE.LatheGeometry(),
                new THREE.MeshBasicMaterial({ color: 0x071931, side: THREE.DoubleSide, transparent: true, opacity: .65 })
        );
        mesh.add(son);
        scene.add(mesh);

        var is3Obj = (event, obj) => {
                pointer.x = (event.clientX / window.innerWidth) * 2 - 1;
                pointer.y = - (event.clientY / window.innerHeight) * 2 + 1;
                raycaster.setFromCamera(pointer, camera);
                var intersects = raycaster.intersectObjects(obj, true);
                return intersects.length > 0
        }

        var animate = () => {
                requestAnimationFrame(animate);
                var delta = clock.getDelta();
                mesh.rotation.y -= delta;
                renderer.render(scene, camera);
        };

        window.onresize = () => {
                camera.aspect = tz.offsetWidth / tz.offsetHeight;
                camera.updateProjectionMatrix();
                renderer.setSize(tz.offsetWidth, tz.offsetHeight);
        }

        tz.onclick = (e) => {
                if (!is3Obj(e, )) return;
                player.paused ? player.play() : player.pause();
        };

        player.onpause = player.onplaying = () => player.paused ? clock.stop() : clock.start();
       
        tz.onmousemove = (e) => {
                tz.title = is3Obj(e, ) ? '播放/暂停 Alt+X' : '';
                tz.style.cursor = is3Obj(e, ) ? 'pointer' : 'default';
        };

        animate();
        FS(tz, player);
</script>

马黑黑 发表于 2025-5-20 19:21

帖子代码


<style>
        #tz { --state: running; margin: 30px 0; left: calc(50% - 81px); transform: translateX(-50%); width: clamp(600px, 90vw, 1400px); min-height: 80vh; aspect-ratio: 16/9; background: url('https://ts1.tc.mm.bing.net/th/id/R-C.c93abfd269ff10b63b99a124e7d093eb?rik=aEBnY3MFXu3WeA&riu=http%3a%2f%2fimage.woshipm.com%2fwp-files%2f2016%2f04%2f1756b215a1834ac2a831020e54884853.jpg&ehk=eYUtfBohsFX2U8bPPVAMqUit14EXFHJEG2UGcktktrk%3d&risl=&pid=ImgRaw&r=0') no-repeat center/cover; box-shadow: 2px 2px 8px #000; display: grid; place-items: center; z-index: 1; position: relative; }
        #btnFs { bottom: 20px; color: #eee; text-align: center; }
        #btnFs:hover { color: red; }
        #vid {position: absolute; width: 100%; height: 100%; object-fit: cover; mask: radial-gradient(transparent 20%, red); -webkit-mask: radial-gradient(transparent 20%, red); pointer-events: none; }
</style>

<div id="tz">
        <audio id="player" src="https://music.163.com/song/media/outer/url?id=423314145" autoplay loop></audio>
        <video id="vid" src="https://bpic.588ku.com/video_listen/588ku_video/25/03/10/15/53/06/video67ce9a62ce8b9.mp4" autoplay loop muted></video>
</div>

<script type="module">
        import * as THREE from 'https://638183.freep.cn/638183/web/ku/three.module.min.js';
        import { FS } from 'https://638183.freep.cn/638183/web/ku/FS.js';

        var scene = new THREE.Scene;
        var clock = new THREE.Clock(), pointer = new THREE.Vector2(), raycaster = new THREE.Raycaster();
        var camera = new THREE.PerspectiveCamera(45, tz.offsetWidth / tz.offsetHeight, 0.1, 1000);
        camera.position.set(0, 0.2, 5);
        var renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true });
        renderer.setSize(tz.offsetWidth, tz.offsetHeight);
        tz.appendChild(renderer.domElement);

        var mesh = new THREE.Mesh(
                new THREE.LatheGeometry(),
                new THREE.MeshBasicMaterial({ wireframe: true })
        );
        mesh.rotateX(-0.1);
        var son = new THREE.Mesh(
                new THREE.LatheGeometry(),
                new THREE.MeshBasicMaterial({ color: 0x071931, side: THREE.DoubleSide, transparent: true, opacity: .65 })
        );
        mesh.add(son);
        scene.add(mesh);

        var is3Obj = (event, obj) => {
                pointer.x = (event.clientX / window.innerWidth) * 2 - 1;
                pointer.y = - (event.clientY / window.innerHeight) * 2 + 1;
                raycaster.setFromCamera(pointer, camera);
                var intersects = raycaster.intersectObjects(obj, true);
                return intersects.length > 0
        }

        var animate = () => {
                requestAnimationFrame(animate);
                var delta = clock.getDelta();
                mesh.rotation.y -= delta;
                renderer.render(scene, camera);
        };

        window.onresize = () => {
                camera.aspect = tz.offsetWidth / tz.offsetHeight;
                camera.updateProjectionMatrix();
                renderer.setSize(tz.offsetWidth, tz.offsetHeight);
        }

        tz.onclick = (e) => {
                if (!is3Obj(e, )) return;
                player.paused ? player.play() : player.pause();
        };

        player.onpause = player.onplaying = () => player.paused ? clock.stop() : clock.start();
       
        tz.onmousemove = (e) => {
                tz.title = is3Obj(e, ) ? '播放/暂停 Alt+X' : '';
                tz.style.cursor = is3Obj(e, ) ? 'pointer' : 'default';
        };

        animate();
        FS(tz, player);
</script>

马黑黑 发表于 2025-5-20 19:23

本帖图片未上传到我的网盘。

帖子使用车削缓冲几何体默认参数制作播放器。关于车削缓冲几何体,稍后另发帖介绍

红影 发表于 2025-5-20 21:33

原来这个叫车削缓冲几何体,太漂亮了,跟钻石似的{:4_199:}

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

黑黑配的背景也很漂亮,充满科技感,十分震撼{:4_199:}

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

这个是先出效果后出说明啊,我赶紧去看看说明去{:4_187:}

花飞飞 发表于 2025-5-20 22:02

这颜色搭得太漂亮了,下方转动的视频跟背景还有几何体完全一体,高级。。
视频找得好,开始还以为是两个。。

花飞飞 发表于 2025-5-20 22:04

这个播放暂停是直接控制几何体的,没有另外设置小播。。。{:4_199:}

花飞飞 发表于 2025-5-20 22:04

音乐有金属感。。。跟画面科技风很搭配完美

马黑黑 发表于 2025-5-20 22:17

花飞飞 发表于 2025-5-20 22:04
音乐有金属感。。。跟画面科技风很搭配完美

谢谢

马黑黑 发表于 2025-5-20 22:17

花飞飞 发表于 2025-5-20 22:04
这个播放暂停是直接控制几何体的,没有另外设置小播。。。

嗯嗯

花飞飞 发表于 2025-5-20 22:19

马黑黑 发表于 2025-5-20 22:17
谢谢

{:4_190:}谢了就多喝一杯

花飞飞 发表于 2025-5-20 22:19

马黑黑 发表于 2025-5-20 22:17
嗯嗯

两种解决方法,这种是无痕

马黑黑 发表于 2025-5-20 22:19

花飞飞 发表于 2025-5-20 22:19
两种解决方法,这种是无痕

反正都有缺点

花飞飞 发表于 2025-5-20 22:49

马黑黑 发表于 2025-5-20 22:19
反正都有缺点

能解决问题的都是完美。。没有缺点

清茶煮雪 发表于 2025-5-21 17:20

欣赏老师精彩,代码技术厉害呀!给老师点赞{:4_199:}

马黑黑 发表于 2025-5-21 19:27

菲儿 发表于 2025-5-21 17:20
欣赏老师精彩,代码技术厉害呀!给老师点赞

谢点

马黑黑 发表于 2025-5-21 19:28

花飞飞 发表于 2025-5-20 22:49
能解决问题的都是完美。。没有缺点

我今天去研究了那个点击插件,天哪,个头并不比 three.js 核心库小。还要额外导入,罢罢

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

马黑黑 发表于 2025-5-21 19:28
我今天去研究了那个点击插件,天哪,个头并不比 three.js 核心库小。还要额外导入,罢罢

three.js 核心库啊,它这么逆天。。
刚看到你说不适合论坛,这么大看来别的地方也不怎么合适。。
导入,跟个程序软件差不多吧

马黑黑 发表于 2025-5-21 21:46

花飞飞 发表于 2025-5-21 21:20
three.js 核心库啊,它这么逆天。。
刚看到你说不适合论坛,这么大看来别的地方也不怎么合适。。
导入 ...

别的地方没问题,就是论坛运行的东东本来就非常多,一个帖子的代码一般也不建议超过两百行
页: [1] 2 3 4
查看完整版本: Malfunction