OpenGL(R) API (Application Programming Interface)は、2D/3Dグラフィックスアプリケーション開発のためのAPI です 日本SGIより引用
OpenGL(R) API (Application Programming Interface)は、2D/3Dグラフィックスアプリケーション開発のためのAPI です
公式WEB http://www.opengl.org/
glclock OpenGLを使用したプログラムとして有名 http://www.daionet.gr.jp/~masa/glclock/index.html
imguiとは まず読み方ですが、「イムギューアイ」 と読む人が多いです。 DirectX12 や OpenGL などのグラフィックスライブラリを使って GUI を描画するライブラリです。 GUI の制御をコードのみでできるので使いやすいのが特徴で、特にデバッグ時に重宝するようです。 対象のウィンドウ CWndを継承したクラスに表示してみます。 インストール 以下のコマンドラインでインストールできます。 vcpkg install imgui[win32-binding,opengl3-binding] ヘッダ pch.h にヘッダを追加します。 #include "imgui.h" #inc…
はじめに CC Character Base の右手を PBR, SSS で描画してみようと思います。 以下のような感じになります。 なお、CC Character Base は既に Blender か何かで glTF2.0 出力されているものとします。 glTF2.0 出力については【Blender】CC Character Base から右腕のモデルを glTF2.0 で出力する手順を参考にするとよいと思います。 PBR Shader で描画 これについては LearnOpenGL に PBR の理論から実装まで解説があるのでそちらの通りに実装してください。 最後の Tone Mappin…
PBR におけるToneMapとは 「HDR → LDR の写像」のことです。 画像 Type Image PBR Neutral ACES linear Reinhard KhronosPBRNeutralToneMapはPBRNeutralToneMapと酷似していたので画像は省略しています。 コード glslのコードを貼っておきます。 #ifndef TONE_MAP_LIB_GLSL #define TONE_MAP_LIB_GLSL #define TONE_MAP_PBR_NEUTRAL 0 #define TONE_MAP_KHRONOS_PBR_NEUTRAL 1 #defin…
はじめに 最近よく LearnOpenGL を閲覧するんですが閲覧回数の上限に引っかかって見れない時がありました。 これは嫌だなってことで、ローカルで閲覧できる手順を残しておきます。 ローカルに落としてローカルサーバーを起動して閲覧したら、 MathJax でエラーが出て見れなかったので Mathjax3.2.2 を使うことで対応しました。 もちろんVPNを使えばこんなことはしなくてもOKです。 手順 1. WinHTTrack をインストールする WinHTTrack はインストールも使い方も超簡単です。ググってください。 2. WinHTTrack を用いて LearnOpenGL をダウ…
GitHub Copilotと作る Pythonで OpenGL 3Dプログラミング 第10回「バッチレンダリングで描画を高速化」 GitHub Copilotと作る Pythonで OpenGL 3Dプログラミング 第10回「バッチレンダリングで描画を高速化」 はじめに なぜバッチレンダリングが必要なのか? ドローコールのコスト パフォーマンス計測基盤の実装 PerformanceManager クラス OperationTimer コンテキストマネージャー 使用例 バッチレンダリングの仕組み 実装の流れ BatchRenderer クラス Transform行列の適用 _apply_tra…
GitHub Copilotと作る Pythonで OpenGL 3Dプログラミング 第9回「立方体と球体を描く - EBOで頂点を再利用」 GitHub Copilotと作る Pythonで OpenGL 3Dプログラミング 第9回「立方体と球体を描く - EBOで頂点を再利用」 はじめに BufferManagerパターンの実装 BufferManager Protocol BufferManagerのテスト容易性 EBOとは何か? 頂点の重複問題 EBOによる解決 矩形(Rectangle)の実装 頂点データとインデックス サイズ・色の変更 立方体(Cube)の実装 立方体の構造 頂点デ…
前提 OpenGL4.6 射影行列はOrtho Ambient / Diffuse の Matrial は Texture より取得 命名規則などは Blender の GLSL Coding Style を参考にした。 ソース vert #version 460 core // in layout(location = 0) in vec3 in_ls_pos; layout(location = 1) in vec3 in_ls_normal; layout(location = 2) in vec2 in_uv; // out layout(location = 0) out vec2 …
glDrawElementsのみを使う想定 glDrawElementsを使う方が速いので描画関数はこれしか使わない。 頂点の設定の流れ 頂点座標、法線、インデックスの場合 VAO,VBO,VBO,EBO って感じで設定する。 VAO glGenVertexArrays(1, &vao_); glBindVertexArray(vao_); ... glBindVertexArray(0); VBO // VBO --- 位置属性 (location = 0) --- glBindBuffer(GL_ARRAY_BUFFER, vbo_positions_); glBufferData(GL_…
GitHub Copilotと作る Pythonで OpenGL 3Dプログラミング 第7回「マウスでカメラ操作」 GitHub Copilotと作る Pythonで OpenGL 3Dプログラミング 第7回「マウスでカメラ操作」 はじめに 今回のゴール マウス操作の設計 操作方式の選択 座標系と水平面 クラス設計 MouseControllerクラス コールバックチェーンの重要性 フレーム更新とプロパティ CameraControllerクラス 3Dカメラの更新 水平パン(View行列からの方向取得) 2Dカメラの更新 Appクラスへの統合 更新処理 実行結果 3Dモード 2Dモード まとめ…
GitHub Copilotと作る Pythonで OpenGL 3Dプログラミング 第6回「2D/3Dカメラの実装」 GitHub Copilotと作る Pythonで OpenGL 3Dプログラミング 第6回「2D/3Dカメラの実装」 はじめに 今回のゴール 正射影と透視投影の違い 正射影(Orthographic Projection) 透視投影(Perspective Projection) カメラクラスの設計 CameraBaseクラス(基底クラス) Camera2Dクラス(正射影カメラ) 2D用View行列 正射影行列の計算 Camera3Dクラス(透視投影カメラ) オービット操作…