过去,当我浏览各种网站时,我总是被第一眼看到的动态物体和具有深度感的动画所吸引,不禁发出“哇!”的惊叹。那时我就想,“我也想做出这样的东西!”Three.js或者Blender我曾经尝试过。
我当初怀着无比的敬佩之情加入Liberlogic,但最终……最近我主要从事一些更扎实的实施工作,比如构建业务应用程序和Headless CMS(笑)。我并不是想贬低他们什么的!
现在我们已经进入第四年了,我回想起当时我对“动态网络”的渴望。WebGL我想简要介绍一下周边地区的基本情况。
什么是WebGL?
什么是WebGL?用于在网站上显示 3D 图形的技术它适用于所有主流浏览器,包括 Chrome、Firefox 和 Safari。
很久以前,像 Flash Player 这样的插件很常见,但它们存在难以在智能手机上运行的问题。
在这方面,WebGL 得到了原生支持,所以接下来开创移动时代3D表达技术先河的技术也可以说……
我真的试过了
使用 Three.js 在浏览器中显示 3D 内容
Three.js使用 JavaScript一个无商标限制的库,让您可以轻松创建 3D 内容。
首先,就 WebGL 概念而言,你需要渲染器、场景和摄像机。
Renderer 是 Three.js 中的主要对象。Scene的Camera相机视锥体Renderer3D 内Scene该部件将以 2D 图像的形式渲染(绘制)在画布上。
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(
1000, // 視野角
window.innerWidth / window.innerHeight, // 側面
75, // 近く
1000 // 遠い
);
camera.position.set(0, 0, 400);
//マウスで制御
const controls = new OrbitControls(camera, document.body);
//html側の<canvas id="myCanvas"></canvas>を取得
const renderer = new THREE.WebGLRenderer({
canvas: document.querySelector("#myCanvas"),
antialias: true,
});
//setSize()メソッドでサイズを設定
renderer.setSize(window.innerWidth, window.innerHeight);
//背景色も変更可能
renderer.setClearColor("#000")
//htmlの<canvas id="myCanvas"></canvas>へ流し込み
document.body.appendChild(renderer.domElement);
3D立方体部件是使用称为网格的显示对象创建的。要创建网格,您需要准备几何体(形状)和材质(材料)。
//几何体(立方体)
const geometry = new THREE.BoxGeometry(100, 100, 100)
//材质(颜色)
const material = new THREE.MeshNormalMaterial
const box = new THREE.Mesh(geometry, material);
//添加到场景
scene.add(box);
//光源
const light = new THREE.DirectionalLight(0xffffff, 1);
light.position.set(1, 1, 1);
//添加到场景
scene.add(light);
最后,添加动画效果。
这次我将省略周围粒子的实现!
function animate() {
requestAnimationFrame(animate);
box.rotation.x += 0.005;
box.rotation.y += 0.005;
renderer.render(scene, camera);
}
animate()
当您使用设定好的摄像机、几何体、材质和灯光渲染场景时,它将在浏览器中绘制出来。
查看视频文字稿(日语)
(直方体のジオメトリが3Dレンダリングされてブラウザに表示されている)
使用 Blender 创建 3D 模型
混合器免费、开源、集成的软件,涵盖整个 3D 制作流程,包括 3D 建模、动画、渲染、游戏开发和视频编辑。单靠Blender无法创建WebGL网站。
Blender 使用与 Three.js 相同的概念,使用网格对象创建形状,使用材质添加颜色和纹理,使用灯光调整光线照射和投射阴影的方式,并调整相机位置和方向以执行渲染。
你可以通过组合节点来创建逼真的纹理,例如渐变、金属效果和发光效果。
参考:https://www.youtube.com/watch?v=DsNZzUZPhw4
使用 Three.js 在浏览器中显示用 Blender 创建的 3D 模型。
将 Blender 中创建的 3D 模型导出为 .glb 文件,并将其集成到 Three.js 中。
OrbitControls、GLTFLoader、DRACOLoader从 Three.js 库中导入每个函数。
OrbitControls是一个用于通过鼠标控制相机的实用程序,GLTFLoader和DRACOLoader分别是用于加载 GLTF 格式及其压缩版本 DRACO 格式的 3D 模型的实用程序。
模拟的苹果现在显示在浏览器中了!
但是,当我使用 Three.js 在浏览器中显示用 Blender 创建的模型时,渲染环境和材质兼容性的差异颜色和纹理会因设置不同而有所差异,因此您可能需要进行一些调整才能获得想要的效果。
查看视频文字稿(日语)
(Blenderで作成したりんごのモデリングをThree.jsでブラウザ表示した様子)
我的日常工作涉及 CMS 集成和业务应用程序的前端设计/构建,因此我在自己的工作中很少接触到 3D 表现形式。
但是当我这样玩的时候,我又一次意识到这真的很有趣。
那时候移动网络或许正是因为他对过去的崇敬,他才自然而然地被现代科技所吸引。
今天又是 Next 和 Nuxt!
以另一种形式重返该网站移动网络我一定能成功。🚀
我使用 JavaScript、React 和 Next.js 进行前端开发,专注于标记语言。看到自己参与开发的网站成功上线,我感到非常开心!我的爱好是弹吉他。我喜欢编写代码,也喜欢演奏代码!
Hiratchi
前端工程师 / 2022年入职