Synamon’s Engineer blog

Synamonはリアルとデジタルの融合を加速させるため、メタバース領域で法人向けにサービス提供を行うテックカンパニーです。現在開発を進めている「メタバース総合プラットフォーム」をはじめ、メタバース市場の発展に向けた事業展開を行っています。このブログでは、メタバース技術とその周辺の技術、開発全般に関してエンジニアがお話しします。

Rustで始めるOpenGLを読んでRustに入門した

はじめに

こんにちは、エンジニアのうぃすきー(@whisky_shusuky)です。

本記事は Synamon Advent Calendar 2022 の14日目の記事になります。

adventar.org

RustはWeb関連でもそこそこ使われており興味があったのですが難しそうな印象が有ったため手をつけられていませんでした。 そんな中Rustで始めるOpenGLという本に出会いました。 個人的に趣味でWebGLでGLSLを書いたことがあったため、Rustで動かしてみれば理解がとっつきやすいのではないかと思い読んで動かしてみました。

成果物

先に成果物を見せるとこのようなものができました。 本書の内容を実行すれば立方体をOpenGLで表示することができます。 そこに理解のために少し手を加えて画面上でx,y,z軸方向に立方体を回転できるようにしました。

コードはこちらに置いておきました。 github.com

Rust,sdl2をインストールしてcargo run で動作します。(macでのみ動作確認しています)

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
brew install sdl2
cargo run

手を加えた回転部分はRust側で回転行列を定義してシェーダーに渡しています。 rotation_x,rotation_y,rotation_zがそれぞれウィンドウ上で操作できる値になっておりそれらを増減することで回転します。

            let mut model_matrix = Matrix4::from_angle_x(cgmath::Rad(rotation_x));
            model_matrix = model_matrix * Matrix4::from_angle_y(cgmath::Rad(rotation_y));
            model_matrix = model_matrix * Matrix4::from_angle_z(cgmath::Rad(rotation_z));

Rust独特だと思ったのは単純にletだけで変数を定義しただけでは変数の再代入ができないことでした(それは定数では...?)

初期化の際にlet mutと宣言することで再代入できるようになります。

読んだ感想

個人でGLSLを書いていたときはシェーダー上で回転行列を直接定義していました。Rustで定義した値をシェーダー側に渡せるので色々面白いことができそうな気がしています。シェーダーエディタのデスクトップアプリとか作れそうです。

恐る恐る触ってみたRustですがなんとか動くものができました。Webに関わっていないので今度はAPIでも試しに作ってみたいです。