Open9

RustではじめるOpenGL メモ

scnshscnsh

以下の環境で実行するとサンプルが動かなかったので、変更箇所を残しておく

[dependencies]
sdl2 = "0.34.3"
gl = "0.14.0"          # OpenGL API を使うために必要
cgmath = "0.18.0"      # CG関連の数学ライブラリ(ベクトル、行列、クォータニオンなど)
c_str_macro = "1.0.2"  # C言語とコンパチブルな c_str!マクロが使える
imgui = "0.6.1"        # ImGui を使えるようにする
imgui-sdl2 = "0.13.0"  # ImGui をSDL2フレームワークで使えるようにした
imgui-opengl-renderer = "0.10.0" # 描画処理を担当
scnshscnsh

ImGui の ウインドウの生成は、Window:new() を使う

Window::new(im_str!("Information"))
                .size([300.0, 200.0], imgui::Condition::FirstUseEver)
                .build(&ui, || {});
scnshscnsh

Matrix4::look_at ではなく、Matrix4::look_at_rh を使う

            let view_matrix = Matrix4::look_at_rh(
                Point3 {
                    x: camera_x,
                    y: camera_y,
                    z: camera_z,
                },
                Point3 {
                    x: 0.5,
                    y: 0.5,
                    z: 0.5,
                },
                Vector3 {
                    x: 0.0,
                    y: 0.0,
                    z: 1.0,
                },
            );
scnshscnsh

ImGui の Slider も Slider::new() を使う

                    Slider::new(im_str!("Camera X"))
                        .range(-5.0..=5.0)
                        .build(&ui, &mut camera_x, );
scnshscnsh

Imageの image.raw_pixels() が ないので、to_bytesを使う

let data = image.to_bytes();  // ピクセルの生データを取得
scnshscnsh

Image のフォーマットは DynamicImage を指定する

image::DynamicImage::ImageLuma8(_)

match アーム式は _ => gl::RGBA を追加して全ての match ケースの対応を書く