程序人生 | 与足球共舞的火柴人(致敬格拉利什,赋予足球更深的意义)

个人简介

👀个人主页: 前端杂货铺
🙋‍♂️学习方向: 主攻前端方向,也会涉及到服务端
📃个人状态: 在校大学生一枚,已拿多个前端 offer(秋招)
🚀未来打算: 为中国的工业软件事业效力n年
🥇推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2&Vue3项目实战 🥝Node.js
🌕个人推广:每篇文章最下方都有加入方式,旨在交流学习&资源分享&商务合作,快加入进来吧

文章目录

    • 一、前言
    • 二、使用 Three.js 渲染足球
    • 三、使用 Three.js 渲染跳舞的火柴人
    • 四、总结(充能)
    • 五、写在最后(观世界杯有感)


一、前言

2022 年的 卡塔尔足球世界杯 已经开赛 14 天。

2022.11.21 晚,格拉利什 进球后 庆祝动作 的背后其实有一段 非常感人的故事(格拉利什和患脑瘫的小球迷的暖心约定)

【格拉利什庆祝动作】【世界杯感动瞬间】

花有重开日,人无再少年。格拉利什 这类人的存在,赋予了足球更深的意义!

程序人生,用技术记录世界杯,接下来我们使用 Three.js 技术,来实现一个 与足球共舞的火柴人(致敬格拉利什)

备注:其实我自己在电脑上运行效果是非常顺滑流畅的,可能是录屏软件的问题,会导致观看效果不佳(看着卡顿,其实很丝滑)

与足球共舞的火柴人

二、使用 Three.js 渲染足球

简介:Three.js 是 JavaScript 编写的 WebGL 第三方库。提供了非常多的 3D 显示功能。

渲染足球前我们得先有一张足球的材质贴图(football.png),用于把图贴到我们创建的球体上。如下所示:

在这里插入图片描述

创建一个HTML文件,World_Cup.html

备注:以下仅简单的解释了部分代码的含义,详细内容请自行学习

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>2022世界杯</title><style>body {margin: 0px;}</style>
</head>
<body><script type="text/javascript" src="https://cdn.bootcss.com/three.js/90/three.min.js"></script><script src="https://threejs.org/examples/js/controls/OrbitControls.js"></script><script type="text/javascript">// 初始化相机let camera = new THREE.PerspectiveCamera(50, window.innerWidth / window.innerHeight, 1, 10000)camera.position.z = 500;// 初始化场景let scene = new THREE.Scene()// 初始化渲染器let renderer = new THREE.WebGLRenderer()renderer.setSize(window.innerWidth, window.innerHeight)document.body.appendChild(renderer.domElement)// 定义一个球体,这里的参数可以根据需要调节let geometry = new THREE.SphereGeometry(50, 32, 32)let texture = new THREE.TextureLoader().load('./imgs/football.png')let material = new THREE.MeshBasicMaterial({map: texture})// 将材质和几何体进行绑定let cube = new THREE.Mesh(geometry, material)// 将绑定后的几何体放入场景中scene.add(cube)// 进行渲染function animate() {requestAnimationFrame(animate)renderer.render(scene, camera)}animate()</script>
</body> 
</html>

在这里插入图片描述

三、使用 Three.js 渲染跳舞的火柴人

创建一个HTML文件,Matchman.html。该部分代码比较复杂,不仅需要创建场景生成火柴人,还需要给他添加一些列的动作,并完美的渲染出来(不白屏,不卡顿等)。所以需要引入很多内置的 js 文件,在此就不列举了,想要代码的可以找我要。

<!DOCTYPE html>
<html lang="en"><head><title>three.js webgl - loaders - BVHLoader</title><meta charset="utf-8"><meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"><link type="text/css" rel="stylesheet" href="main.css"><style>body {background-color: #eee;color: #444;}a {color: #08f;}h2 {color: orange;}</style>
</head><body><div id="info"><h2>与足球共舞的火柴人【前端杂货铺】</h2></div><script async src="https://unpkg.com/es-module-shims@1.3.6/dist/es-module-shims.js"></script><script type="importmap">{"imports": {"three": "../build/three.module.js","three/addons/": "./jsm/"}}</script><script type="module">import * as THREE from 'three';import { OrbitControls } from 'three/addons/controls/OrbitControls.js';import { BVHLoader } from 'three/addons/loaders/BVHLoader.js';const clock = new THREE.Clock();let camera, controls, scene, renderer;let mixer, skeletonHelper;init();animate();const loader = new BVHLoader();loader.load( 'models/bvh/pirouette.bvh', function ( result ) {skeletonHelper = new THREE.SkeletonHelper( result.skeleton.bones[ 0 ] );skeletonHelper.skeleton = result.skeleton; // allow animation mixer to bind to THREE.SkeletonHelper directlyconst boneContainer = new THREE.Group();boneContainer.add( result.skeleton.bones[ 0 ] );scene.add( skeletonHelper );scene.add( boneContainer );// play animationmixer = new THREE.AnimationMixer( skeletonHelper );mixer.clipAction( result.clip ).setEffectiveWeight( 1.0 ).play();} );function init() {camera = new THREE.PerspectiveCamera( 60, window.innerWidth / window.innerHeight, 1, 1000 );camera.position.set( 0, 200, 300 );scene = new THREE.Scene();scene.background = new THREE.Color( 0xeeeeee );scene.add( new THREE.GridHelper( 400, 10 ) );// rendererrenderer = new THREE.WebGLRenderer( { antialias: true } );renderer.setPixelRatio( window.devicePixelRatio );renderer.setSize( window.innerWidth, window.innerHeight );document.body.appendChild( renderer.domElement );controls = new OrbitControls( camera, renderer.domElement );controls.minDistance = 300;controls.maxDistance = 700;window.addEventListener( 'resize', onWindowResize );}function onWindowResize() {camera.aspect = window.innerWidth / window.innerHeight;camera.updateProjectionMatrix();renderer.setSize( window.innerWidth, window.innerHeight );}function animate() {requestAnimationFrame( animate );const delta = clock.getDelta();if ( mixer ) mixer.update( delta );renderer.render( scene, camera );}</script>
</body>
</html>

跳舞的火柴人

四、总结(充能)

把这两部分代码 结合一下 就可以完成 与足球共舞的火柴人 了。

怎么样,是不是觉得 Three.js 还是很有意思的。

扩展:其实 Three.js 的用途还是很多的

  • 智慧城市
  • 房屋 3D 视图
  • 开发工业软件(CAD,CAE等)

总的来说 Three.js 就是来渲染 3D 效果的。目前 Three.js 是个很强大好用的 3D 渲染库,接下来我也会进行这方面的学习,到时候可以 和大家一起探索 Three.js 的世界。

五、写在最后(观世界杯有感)

随着时代的进步,科技的发展。我们的生活也正变得更加精彩和便利。世界杯的勇士们在足球场上挥洒汗水,去取得属于他们的荣誉。

同时像 格拉利什 这样的人的存在,也暖心了很多人,给这个世界增添了一分温暖。

其实每个人都可以 做一颗小星星,用自己的那一分热,去散发着自己的那一分 微弱而又耀眼的光!


在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/42344.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

内测邀请:ChatGPT - PAM™ 工业界造车解决方案

作为 AI 界的「顶流」&#xff0c;生成式 AI 似乎正在变成无所不能的「创意机器」。它可以根据输入的信息&#xff0c;自动创造各种「新东西」&#xff0c;帮助人们在各个领域快速实现创作和开发。不仅仅是文字&#xff0c;设计、游戏、艺术作品…… 各种五花八门的需求&#x…

描述对未来计算机的畅想用英语作文,畅想未来人工智能的发展状况英语作文 关于畅想未来人工智能的发展状况的英语作文...

题目要求】H42答案圈 计算机科学的未来趋势是人工智能的一种&#xff0c;它是人类思维的研究和仿真&#xff0c;最终能够使人喜欢思考&#xff0c;为人类服务&#xff0c;帮助人们解决问题。随着科技越来越与人类生活相结合&#xff0c;随处可见的人工智能&#xff0c;让生活越…

小a的旅行计划

来源&#xff1a;牛客网 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 32768K&#xff0c;其他语言65536K 64bit IO Format: %lld文章目录 题目描述题解&#xff1a;代码&#xff1a; 题目描述 小a终于放假了&#xff0c;它想在假期中去一些地…

旅游计划

旅游n个城市&#xff0c;但并不是每一条路线花费都是一样的。想把所有的城市都旅游一遍&#xff0c;但是花费最小。 输入格式 第一行输入一个整数n,表示有n个城市 接下来有一个n*n的矩形&#xff0c;表示每两个城市之间的火车花费&#xff0c;每两个城市之间的花费不会超过100…

CHAP7:使用 R 编程进行数据分析

1.了解 R 的基础知识 R 是一种编程语言&#xff0c;可用于在数据分析过程的每个阶段执行任务。在这部分课程中&#xff0c;您将了解 R 和 RStudio&#xff0c;这是 R 的集成开发人员环境 (IDE)。您将探索使用 RStudio 与 R 一起工作的好处。RStudio 使您能够轻松利用 R 的特性…

记录常用的R语言的一些零碎知识(包括ggplot2作图)

平常使用R的时候&#xff0c;会遇到一些小问题&#xff0c;这时就会去上网查&#xff0c;但查到结果&#xff0c;如果不记录起来&#xff0c;常常会遇到相同的问题时再次查询&#xff0c;费时费力&#xff0c;因此决定记录下这些零碎的R语言知识&#xff08;不定时更新&#xf…

R语言入门-数据分析实操(tyidyverse工作流+代码)

1. 数据分析的开端&#xff0c;Tidyverse&#xff1f; tidyverse 是一个清晰的 R 包集合&#xff0c;在数据操作、探索和可视化领域提供统一的数据科学解决方案&#xff0c;这些解决方案具有共同的设计理念。它是由 RStudio 背后的首席科学家 Hadley Wickham 创建的。 tidyver…

从零开发基于chatGPT的社区交友系统 (前后端分离)丨主页框架 03

03 主页框架 前言开工引用iconfont字体图标template代码style代码页面展示 路由局部跳转script代码 总结 前言 上一章我们实现了基础的主题切换功能&#xff0c;这一章我们开始搭建主页主要框架&#xff0c;并测试一下我们的切换主题功能。 开工 引用iconfont字体图标 这里…

制造焦虑的一边去! AI 不会让我们失业,还会带来大量新机遇!

点击上方“编程技术进阶”&#xff0c;加"星标" 重磅干货&#xff0c;第一时间送达 大家好&#xff0c;我是编哥。先送上涛哥用 AI 画的美女&#xff0c;目测这个是涛哥最近的梦中情人 声明&#xff1a;本文引用图片来自涛哥&#xff08;公众号&#xff1a;涛哥聊Pyt…

AI崛起,我们应该保持自我意识!

目录 前言西部世界剧情&#xff1f;辅助还是威胁&#xff1f;如何自我保护?总结 前言 人工智能技术发展迅速&#xff0c;为我们的生活带来了很多便利。但就个人来说这些技术都是可控的&#xff0c;我并不怎么担心。直到ChatGPT的到来&#xff0c;把我惊呆了。一边感叹AI技术的…

GPT帮你写简历:求职日企篇

正文共 927 字&#xff0c;阅读大约需要 3 分钟 求职者必备技巧&#xff0c;您将在3分钟后获得以下超能力&#xff1a; 快速生成日文简历 Beezy评级 &#xff1a;B级 *经过简单的寻找&#xff0c; 大部分人能立刻掌握。主要节省时间。 推荐人 | nanako 编辑者 | Linda 在应聘…

chatgpt赋能Python-python如何构造矩阵

Intro Python是一门强大的编程语言&#xff0c;拥有广泛的应用领域&#xff0c;其中矩阵运算是其中一个重要的方向。在本文中&#xff0c;我们将介绍如何使用Python构造矩阵&#xff0c;并介绍常见的矩阵运算。 什么是矩阵&#xff1f; 矩阵是由一组有序数排列成的矩形阵列&…

chatgpt赋能python:Python怎么手动输入矩阵

Python怎么手动输入矩阵 若想在使用Python进行科学计算或机器学习时&#xff0c;我们经常会使用矩阵。要能够利用Python处理这些矩阵&#xff0c;我们需要了解如何输入一个矩阵。本文将介绍如何通过代码手动输入矩阵。 什么是矩阵 矩阵是一个二维数组&#xff0c;它包含了行…

新知实验室 TRTC在线上教育场景中的一种应用实践

一、参赛说明 很荣幸参与此次征文活动&#xff0c;我是从2年多以前&#xff0c;接触腾讯云TRTC相关产品&#xff0c;正逢疫情肆虐&#xff0c;很多业务迫切需要从线下转移到线上。 经过2年的实践&#xff0c;TRTC本身也经历了多次的迭代&#xff0c;功能更强大&#xff0c;也…

Auto_GPT:如何使用Auto-GPT、安装、开发

文章目录 前言一、使用前提二、如何在您的 PC 上安装 Auto-GPT第 1 步&#xff1a;安装 Python第 2 步&#xff1a;获取 Auto-GPT 源代码和 OpenAI API 密钥第 3 步&#xff1a;在 Windows、MacOS和 Linux上安装 Auto-GPT 三、如何在你的 PC 上运行Auto-GPT总结 前言 Auto-GPT…

【霸指拓客】抖音自动引流脚本源码终端开发

<<抖音自动引流脚本源码.>> auto(); //等待广告加载 launchApp("抖音极速版"); sleep(Math.random()*10010000); click("我知道了"); sleep(3000); back(); sleep(2000); var w device.width; var h device.height; while(true){ var i…

Autojs抖音小助手抢红包福袋脚本实战分享

此代码由日赚3万网autojs开发交流群整理提供&#xff0c;欢迎大家一起技术交流&#xff0c;查看更多脚本和源码&#xff1a; 一键加群。如有侵权,请联系我删除&#xff01; // 最新抖音小助手抢福袋脚本已更新至V5.18&#xff0c;可自动换号批量多开操作&#xff0c;单机日入15…

不要再用 C/C++ 的这种说法了!

我们对“C/C”这种写法或说法似乎在无形之中早已习以为常&#xff0c;然而&#xff0c;这种做法真的是对的吗&#xff1f; 在今天这篇文章中&#xff0c;有开发者呼吁应该立即停止使用“C/C”这种说法&#xff0c;因为这属于两种完全不同的编程语言&#xff0c;以下是他解释的原…