rust ~ 3D描画ライブラリ ~

rustの3D描画ライブラリkiss3dのサンプルを動作させてみました。その結果をまとめたいと思います。

# 環境
ubuntu18.04

# インストール


```
$ git clone https://github.com/sebcrozet/kiss3d.git
```

# サンプルの実行
どのようなサンプルが用意されているか確認すると次のようになります。

```
$ cd ~/kiss3d
$ cargo run --example
error: "--example" takes one argument.
Available examples:
    add_remove
    camera
    cube
    custom_material
    custom_mesh
    custom_mesh_shared
    decomp
    event
    group
    lines
    mouse_events
    obj
    persistent_point_cloud
    planar_lines
    points
    post_processing
    primitives
    primitives2d
    primitives_scale
    procedural
    quad
    rectangle
    screenshot
    stereo
    text
    texturing
    ui
    window
    wireframe
```

次に各サンプルの動作を確認していきます。

## サンプル1 add_remove
```
$ cargo run --example add_remove
```
このサンプルでは3Dのキューブ表示されます。写真ではわかりませんが、実際にはキューブがチカチカしていたため、描画したり消したりといった処理を行っていると考えられます。
![Screenshot from 2021-04-03 13-12-58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589906/c8862d44-7621-709e-1d73-f688b4a9c189.png)

## サンプル2 camera
```
$ cargo run --example camera
```
このサンプルでは座標軸が画面内で回転している様子を確認することができます。
![Screenshot from 2021-04-03 13-21-50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589906/7dd2c9d0-9dda-8068-bb20-31ed49eeb6a9.png)

## サンプル3 cube
```
$ cargo run --example cube
```
このサンプルでは3Dのキューブが表示されます。
![Screenshot from 2021-04-03 13-29-42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589906/e4d2c8f6-2ec4-ad15-0cb0-54466fd95c71.png)

## サンプル4 custom_material
```
$ cargo run --example custom_material
```
このサンプルでは3Dグラフィック上で、きれいな色の球体が回転します。
![Screenshot from 2021-04-03 13-32-44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589906/e92c5290-09d3-7be4-c829-6e70c1af9f43.png)

## サンプル5 custom_mesh
```
$ cargo run --example custom_mesh
```
このサンプルでは三角形のメッシュが回転します。
![Screenshot from 2021-04-03 13-34-10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589906/eb26199c-ce80-2a55-5ee3-f293ea08506f.png)

## サンプル6 custom_mesh_shared
```
cargo run --example custom_mesh_shared
```
このサンプルでは赤、緑２枚の三角形メッシュが回転します。
![Screenshot from 2021-04-03 13-36-09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589906/a09a4bf7-3b02-50bb-8282-3ff4d678f389.png)

## サンプル7 decomp
```
$ cargo run --example decomp
Usage: target/debug/examples/decomp obj_file scale clusters concavity

Options:
    obj_file  - the obj file to decompose.
    scale     - the scale to apply to the displayed model.
    clusters  - minimum number of clusters.
    concavity - the maximum concavity accepted by the decomposition
```
こちらのサンプルは何らかのファイルを入力必要があるようです。今回は試せていません。

## サンプル8 event
```
$ cargo run --example event
```
このサンプルは3Dグラフィック上のマウスカーソルの座標を出力します。
![Screenshot from 2021-04-03 13-40-24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589906/cbbc8639-076d-554b-2ac1-7fa17a8a305e.png)

## サンプル9 group
```
$ cargo run --example group
```
このサンプルでは写真のような3Dオブジェクトがそれぞれ回転します。
![Screenshot from 2021-04-03 13-45-22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589906/cf9a6785-00a5-9817-5d6a-082b3969d235.png)

## サンプル10 lines
```
$ cargo run --example lines
```
このサンプルでは２次元上に三角形のラインが描画されます。
![Screenshot from 2021-04-03 13-47-37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589906/4d4e9920-61b6-f94c-a8ef-c81ce2da8583.png)

## サンプル11 mouse_events
```
$ cargo run --example mouse_events
```
このサンプルではグラフィック上のクリックした位置を出力します。
![Screenshot from 2021-04-03 13-49-48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589906/29762c43-930f-e6ed-b16f-58f8caf126ab.png)

## サンプル12 obj
```
$ cargo run --example obj
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Os { code: 2, kind: NotFound, message: "No such file or directory" }', src/scene/scene_node.rs:865:16
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
```
このサンプルは何らかのエラーが発生して、今回は試すことができませんでした。

## サンプル13 persistent_point_cloud
```
$ cargo run --example persistent_point_cloud
error: aborting due to 2 previous errors

For more information about this error, try `rustc --explain E0277`.
error: could not compile `kiss3d`

To learn more, run the command again with --verbose.

```
このサンプルでも何らかのエラーが発生して、今回は試すことができませんでした。

## サンプル14 planar_lines
```
$ cargo run --example planar_lines
```
こちらのサンプルでは2Dグラフィック上に三角形のラインが描画されました。
![Screenshot from 2021-04-03 13-55-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589906/7a485ac9-dbf0-68b8-2f07-87936084aa94.png)

## サンプル15 points
```
$ cargo run --example points
```
写真では見えにくいですが赤、緑、青の３つの点が表示されます。
![Screenshot from 2021-04-03 13-56-46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589906/34744768-fca2-9ef7-9ed9-d2e8fdc7882e.png)

## サンプル16 post_processing
```
$ cargo run --example post_processing
```
このサンプルでは下の写真の物体が変形したり、縁の色を変化させたりといった様子が表示されます。
![Screenshot from 2021-04-03 13-58-14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589906/e3d95da7-7dcb-2bed-267d-134ff81fc93a.png)

## サンプル17 primitives
```
$ cargo run --example primitives
```
こちらのサンプルでは、上のサンプルと形状が似た物体が生成されますが、上のように変化はありません。
![Screenshot from 2021-04-03 14-01-55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589906/7b4e37d7-3822-98c6-265c-e4fb88256e29.png)

## サンプル18 primitives2d
```
$ cargo run --example primitives2d
```
このサンプルでは丸や四角形の図形が表示されます。
![Screenshot from 2021-04-03 14-04-42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589906/2ed53f2c-6066-be9e-286f-4f2c438d0247.png)

## サンプル19 primitives_scale
```
$ cargo run --example primitives_scale
```

このサンプルでは、次のようにとてもたくさんの物体が表示され回転している様子を確認できます。
![Screenshot from 2021-04-03 14-10-19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589906/43f8e00b-bdfe-9805-06e9-e78e00c028fd.png)

## サンプル20 procedural
```
$ cargo run --example procedural
error: aborting due to 2 previous errors

For more information about this error, try `rustc --explain E0277`.
error: could not compile `kiss3d`

To learn more, run the command again with --verbose.
```
このサンプルはエラーにより動作しませんでした。

## サンプル21 quad
```
$ cargo run --example quad
```
このサンプルでは、３次元空間上に平面が波打っている様子が確認できます。
![Screenshot from 2021-04-03 14-45-44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589906/11f58def-e80a-2eb2-469f-209fd41dfb3e.png)

## サンプル22 rectangle
```
$ cargo run --example rectangle
```
このサンプルでは2D空間上に四角形が回転している様子が確認できます

![Screenshot from 2021-04-03 14-51-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589906/5bd5a3c9-6f2c-fef4-8dba-f65392edbe21.png)

## サンプル23 screenshot
```
$ cargo run --example screenshot
```
このサンプルを実行すると3Dグラフィック上のスクリーンショットが生成されます。
![Screenshot from 2021-04-03 14-52-53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589906/f5388ebc-4903-a656-4a67-2c1274b923ce.png)
![screenshot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589906/aa901fb1-76ed-92d1-78e2-8222b377a4e2.png)

## サンプル24 stereo
```
$ cargo run --example stereo
```
下の写真のように四角形が２つ表示されます。マウスでグリグリするとどちらも同じように動くので、物体がコピーされて表示されているようです。
![Screenshot from 2021-04-03 15-06-20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589906/8f22850f-b25c-41ce-ea2c-c7447bca1177.png)

## サンプル25 text
```
$ cargo run --example text
```

![Screenshot from 2021-04-03 15-26-17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589906/c84c5942-007d-87ea-0632-9eff9fe602b9.png)

## サンプル26 texturing
```
$ cargo run --example texturing
```
このサンプルでは、キューブにテキスチャーを貼っている様子が表示されます。
![Screenshot from 2021-04-03 15-27-19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589906/f3cc315e-e0a1-5047-41b1-5c13c3182fae.png)

## サンプル27 ui
```
$ cargo run --example ui
thread 'main' panicked at 'The 'conrod' feature must be enabled for this example to work.', examples/ui.rs:21:5
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
```
このサンプルでは、上記のメッセージが表示されるのみでした。

## サンプル28 window
```
$ cargo run --example window
```
このサンプルでは、青い色のwindowが表示されます。
![Screenshot from 2021-04-03 15-30-09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589906/82e64faa-01fd-957a-438e-46b6c6b4bb77.png)

## サンプル29 wireframe
```
$ cargo run --example wireframe
```
このサンプルでは３次元の物体をフレームで表示している様子が表示されます。
![Screenshot from 2021-04-03 15-31-33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589906/7862509a-da5c-03c6-5a31-7ec1a0ba03c2.png)