本
Vite+TypeScript+Babylon.jsでWebARをはじめる本 (技術の泉シリーズ(NextPublishing)) | 堤 海斗 | 工学 | Kindleストア | Amazon
本の感想
説明にもある通り、座標系の説明とか全部すっ飛ばされて、ViteとかAzure Web Hostingとか3D好きそうなオタクがそんな興味なさそうな説明に結構ページが割かれてしまっています。あっさりしてて良い人もいるかも。
この本ではSceneでCreateBoxしてマウスでグリグリさせる方法だけが書いてあります。この本でBabylon.jsを色々学ぶというよりは、取っ掛かり的な書物と感じました。
その代わり、エディタの設定等が詳細に書いてあり、Babylonで型の恩恵を感じられます。設定したら、この本とほぼ同じ内容をCoPilot先輩が全部サジェストしてくれました。
Babylon.jsはMicroSoft製なのに、ドキュメントがドキュメントになっていて、Playgound まであるということに驚きました(MicroSoftなのに良い事してる!?)。
「Viteとかホスティングとか興味ないのでyarn/npm install babylonしてCanvasにCube表示さる方法を教えろ!」という方はp17からp26だけ読めばいいと思います。
物足りなかったので
床と玉生成していじってみました
床と玉の生成とCanvasの生成するコンポーネント
Nextで作ってその中に見て作ったキャンバス入れてたので、コンポーネントを追加した ObjBabylon.tsxを書いて
import * as BABYLON from "@babylonjs/core"; import { render } from "react-dom"; import { useRef } from "react"; import "babylonjs-loaders"; const objToBabyon = async (canvasId: string) => { const renderCanvas = document.getElementById( canvasId ) as HTMLCanvasElement | null; if (!renderCanvas) { console.log("cant render canvas"); } if (renderCanvas) { console.log("render canvas"); const engine = new BABYLON.Engine(renderCanvas, true); const scene = new BABYLON.Scene(engine); scene.createDefaultCameraOrLight(true, true, true); scene.createDefaultEnvironment(); var sphere = BABYLON.MeshBuilder.CreateSphere( "sphere", { diameter: 2, segments: 32 }, scene ); sphere.position.y = 1; // Our built-in 'ground' shape. Params: name, options, scene var ground = BABYLON.MeshBuilder.CreateGround( "ground", { width: 5, height: 10 }, scene ); engine.runRenderLoop(() => { scene.render(); }); } }; export default function ObjBabylon() { const elementId = "renderCanvasObj"; objToBabyon(elementId); return ( <> <canvas id={elementId} ref={useRef(null)}></canvas> </> ); }
index.tsxはこのようにする、ToyBabylon.tsxは本見て書いたコードが入っている
import type { NextPage } from "next"; import Head from "next/head"; import Image from "next/image"; import styles from "../styles/Home.module.css"; import ToyBabylon from "../components/ToyBabylon"; import ObjBabylon from "../components/ObjBabylon"; const Home: NextPage = () => { return ( <main> <h1 className=" text-10xl font-bold text-blue-700"> 本に書いてあったやつ↓ </h1> <ToyBabylon /> <h1 className=" text-10xl font-bold text-blue-700">床と玉作った↓</h1> <ObjBabylon /> </main> ); }; export default Home;
他の本
Packtから9月にめちゃくちゃ面白そうな本が出るらしく全裸待機中
疑問?
.objローダーが動かなくて泣いているので調査中、ホントは親の顔より見たうさぎを読み込みたかった。
終わりに
WebGLでテドリイッセンマン!!とまではいかなくても、仕事でやりたいなぁという気持ちになっています。
自分のdiscordサーバーでBabylonとかTHREEの作業実況してるので良かったら連絡ください discord: nomorepython#5654, twitter: 永久凍結, instagram:nomorepython
たまにAWSキーぽろりもあるよ