Delphiで超高速OpenGL 2D/3D描画～ FMX / VCL コンポーネントで驚きの性能実現 ～第34回 エンバカデロ・デベロッパーキャンプ

慶應義塾大学藤代研究室 特別研究員＋玉泉山安国院 住職
中山 雅紀
contact@luxidea.net

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

アジェンダ・ＦＭＸ版：github.com/LUXOPHIA/OpenGL
・ＶＣＬ版：github.com/LUXOPHIA/OpenGL_VCL

 OpenGLとは？
 OpenGLの初期化• FMX の場合
• VCL の場合

 コマンドの実行 シーンの構築
 物体の定義 OpenGL の歴史 ミニマムライブラリ マキシマムライブラリ

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

2

自己紹介.身分
 慶應義塾大学 藤代研究室
www.fj.ics.keio.ac.jp• リサーチフェロー

慶應義塾大学 矢上キャンパス• nakayama@fj.ics.keio.ac.jp• ＣＧの研究 和洋女子大学 山本研究室
www.a-cad.net• 共同研究員• ３ＤアパレルＣＡＤの研究

和洋女子大学 玉泉山 安国院

www.ankokuin.or.jp• 住職• contact@ankokuin.or.jp• 中道思想の研究
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

玉泉山 安国院

3自己紹介.専門 球面幾何学 写実的レンダリング
 立体視
 アパレル設計
 数学可視化 体積ベースモデリング ３Ｄプリンタ

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

4自己紹介.趣味
なんちゃって ＣＧアート制作• フラクタル大好き！

 Delphi 大好き！

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

5OpenGLとは？

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

OpenGLとは？.規格 リアルタイム２Ｄ/３ＤＣＧ用ＡＰＩ• GPU：Graphics Processing Unit を活用• コンシューマ向けグラフィックボード• クリエイター向けグラフィックボード

 Khronos Group が策定• www.khronos.org

 クロスプラットフォーム• Windows, macOS, Android, iOS, Linux…

 C-API ベース• ラッパー作りが容易• Windows• gl.h → Winapi.OpenGL.pas• glxext.h → Winapi.OpenGLext.pas

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

7

OpenGLとは？.ツール 高度なゲームを作りたい

ゲームエンジンを使わざるを得ない• Unity• C#言語• UE：Unreal Engine• C++言語 / Blueprint (ノードプログラミング) とりあえず勉強したい
ＧＵＩを想定していない• GLUT：OpenGL Utility Toolkit（開発終了）• GLFW：OpenGL Framework

 コンポーネントで作りたい• FMX：FireMonkey• パフォーマンス ＜ 低負荷• GLScene• Windows, Linux, macOS?

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

8

marina.sys.wakayama-u.ac.jp/~tokoi/

OpenGLとは？.資料
 C/C++ 向けのブログ/書籍が多い• ＡＰＩ名は同じなので翻訳は容易

 昔の資料は役に立たない• ＡＰＩ仕様にバージョンが存在• レガシーＡＰＩ• 性能低下• いずれ使えなくなる 床井研究室 @ 和歌山大学• 床井浩平先生を知らないのはモグリ

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

9

DC• ＲＣ：Rendering Context

DC• 描画領域のハンドル• HWND：ウィンドウハンドルを元に生成

DC• ＤＣ：Device Context

DC 描画領域のＤＣにＲＣを結合してＡＰＩを実行RCOpenGLとは？.実行• OpenGL実行環境のハンドル• ＤＣを元に生成• 異なるＲＣの間では各種データは共有されない
wglShareLists 関数によって共有可能• 単一のＲＣを複数のＤＣへ使い回すことは可能？

 wglMakeCurrent 関数により結合• 描画系以外のＡＰＩ実行にも必須• プロセス毎に有効化できる結合は１つ• マルチスレッド化できない

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

10OpenGLの初期化

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

tokoik.github.io/opengl/delphi.html

OpenGLの初期化.手順① ＤＣの取得• FMX と VCL で異なる

② 理想のピクセル形式を定義• TPixelFormatDescriptor 構造体③ 利用可能なピクセル形式を検索• ChoosePixelFormat 関数④ ＤＣへ現実ピクセル形式を適用• SetPixelFormat 関数⑤ ＲＣの生成• wglCreateContext 関数⑥ 拡張ＡＰＩの有効化• Winapi.OpenGLext.InitOpenGLext

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

12

OpenGLの初期化.①ＤＣの取得
 FMX のコンポーネントはビットマップ• ウィンドウ全体のＤＣをＦＭＸが管理• コンポーネントの HWND を個別に取得できない

HWND

HWND

HWND

HWND

HWND
HWND

FMX
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

VCL
13

OpenGLの初期化.①ＤＣの取得.ＶＣＬの場合
 TFrame クラスを利用してビュワーコンポーネントを作成• VCL / LUX.GPU.OpenGL.Viewer.pas

 Vcl.Controls.TWinControl を継承するコンポーネント• 必ず HWND を持つ• Handle プロパティにより HWND を取得
DCを取得

DCを廃棄
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

14

OpenGLの初期化.①ＤＣの取得.ＦＭＸの場合
 TFrame クラスを利用してビュワーコンポーネントを作成• FMX / LUX.GPU.OpenGL.Viewer.pas

 コンポーネントに縁のないサブウィンドウをはめる• TCommonCustomForm クラスから生成• FMX.Platform.Win.WindowHandleToPlatform 関数で HWND を取得

ルートWND：TForm

サブWNDを生成
縁を除去
HWNDを強制生成

HWNDを取得

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

サブWND

サブWNDのスタイルにチャイルド属性を付与

TFrame

サブWNDをルートWNDの子供へ設定
15

OpenGLの初期化.①ＤＣの取得.ＦＭＸの場合.変更検知
 サブWND は TFrame コンポーネントの配下ではない• 単に TFrame と同じ位置に重ねているだけ• TFrame が移動/変形しても サブWND は追随しない• サイズ変化を検知するには以下のメソッドの override が必須• TControl.DoAbsoluteChanged• TControl.Resize

高解像度モニタのスケールを乗算
Scene.GetSceneScale

TFrame の絶対位置と絶対サイズを取得
サブWNDのサイズを変更• 可視性変化を検知するには以下のメソッドの override が必須• TFmxObject.ParentChanged• TControl.AncestorVisibleChanged

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

16

OpenGLの初期化.②理想のピクセル形式を定義
 色のビット数や描画方法を設定
 Winapi.Windows.TPixelFormatDescriptor 構造体で定義• 実行時のＧＰＵがサポートしている必要はない

ダブルバッファ(C)鹿児島大学

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

17

OpenGLの初期化.③利用可能なピクセル形式を検索
 Winapi.Windows.ChoosePixelFormat 関数で検索• ＤＣが扱える範囲で 理想ＰＦＤ に最も近い現実ＰＦＤ を検索• 実行デバイスで有効なＰＦＤはＩＤで管理されている

ＤＣ

理想ＰＦＤ

現実ＰＦＤのＩＤ

ＩＤから現実ＰＦＤを取得する

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

18

OpenGLの初期化.④ＤＣへピクセル形式を適用
 Winapi.Windows.SetPixelFormat 関数で設定• 一度設定すると変更できない• 一旦ＤＣを廃棄し新規に作成する必要

ＤＣＩＤ

ＰＦＤの実データが返る Winapi.Windows.DescribePixelFormat 関数で取得• 設定せずにＰＦＤのＩＤから実データのみを取得
ＤＣ

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

ＩＤ

ＰＦＤの実データが返る19

OpenGLの初期化.⑤ＲＣの生成
 Winapi.Windows.wglCreateContext 関数で生成 Winapi.Windows.wglDeleteContext 関数で廃棄
ＤＣへＰＦＤを設定
ＤＣからＲＣを生成

ＲＣを廃棄

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

20

OpenGLの初期化.⑥拡張ＡＰＩの有効化
 Winapi.OpenGLext ユニットで定義されている拡張ＡＰＩ• デフォルトで有効化されていない

 Winapi.OpenGLext.InitOpenGLext 関数で初期化する必要あり• wglGetProcAddress 関数で各ＡＰＩの関数ポインタを取得

 wglGetProcAddress 関数• OpenGLのＡＰＩが実行可能な状態でないと実行できない• ＤＣとＲＣを結合させてから実行

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

21

OpenGLの初期化.②～⑤
 LUX.GPU.OpenGL.TOpenGL クラスで行う
 一時的にコマンド実行を可能とするためのダミーＤＣを用意する• 隠しウィンドウを作る①隠しウィンドウ生成②③④⑤

隠しウィンドウ廃棄本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

22

OpenGLの初期化.①～⑥
 メインフォームが表示される前に初期化を済ませる• ＦＭＸの場合• ＶＣＬの場合本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

23コマンドの実行

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

コマンドの実行.開始/終了
 描画したいＤＣとＲＣを結合• wglMakeCurrent 関数

隠しＷＮＤのＤＣを外す

描画領域のクリア

TGLViewer のＤＣと隠しＷＮＤのＲＣを結合

コマンドキュー強制実行

TGLViewer のＤＣを外す

ダブルバッファ交換
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

25

コマンドの実行.OnPaint イベント
 ＦＭＸの場合

高画質モニタのスケールを考慮した実ピクセル数
描画範囲の設定• Paint メソッドで描画

 ＶＣＬの場合

OnPaint 実行• WMPaint メソッドで描画• WMEraseBkgnd メソッドを無効化

描画範囲の設定

OpenGLコマンド
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

OnPaint 実行
26

シーンの構築

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

シーンの構築.シーングラフ シーン構造をツリー構造で表現• 物体はノード• パスを経る旅に位置/姿勢が変更されると考える
緑リンゴ

赤リンゴ
コップ

皿
机

人間椅子

床
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

座標変換

座標変換
28

シーンの構築.座標系

左手座標系

 OpenGL は右手座標系• Ｘ： 親指• Ｙ： 人差し指• Ｚ： 中指Direct3D
FireMonkey

右手座標系

OpenGL
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

29

シーンの構築.座標
 グローバル（ワールド）座標系• ただひとつの絶対基準

 ローカル（オブジェクト）座標系• 物体の姿勢を表す

ローカル相対ローカル

 絶対座標• グローバル座標系から見た絶対位置

 相対座標相対グローバル• ローカル座標系から見た相対位置

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

30

シーンの構築.同時座標系
 座標変換は行列（４×４）の演算で表現できる• ローカル座標系の基底ベクトルを並べたもの• 複数の変換を合成して１つの行列で表せる

𝐗𝐗𝑋𝑋
𝐗𝐗 𝑌𝑌
𝐗𝐗 𝑍𝑍
0子基準
変換

𝐘𝐘𝑋𝑋
𝐘𝐘𝑌𝑌
𝐘𝐘𝑍𝑍
0𝐙𝐙𝑋𝑋
𝐙𝐙𝑌𝑌
𝐙𝐙𝑍𝑍
0𝐏𝐏𝑋𝑋
𝐏𝐏𝑌𝑌
𝐏𝐏𝑍𝑍
1変換
前行列

𝐴𝐴𝑋𝑋
𝐵𝐵𝑋𝑋
𝐵𝐵
𝐴𝐴𝑌𝑌
= 𝑌𝑌
𝐵𝐵𝑍𝑍
𝐴𝐴𝑍𝑍
11

親基準
変換

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

Y

相対変換行列

Z

子X

親P
変換後
行列

31

シーンの構築.カメラ
 カメラも位置と姿勢を持つ物体の一種である

S1 S2 S3

S1 S2

C1 C2 C3Z

S1

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

C1

C1 C2

X
32

シーンの構築.カメラ.視界
 OpenGL はカメラから見た風景しか描けない• 物体にカメラの逆行列を左から掛ける

C3−1 C2−1 C1−1 S1 S2 S3

X
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

33

シーンの構築.カメラ.設定
 現在は非推奨

投影行列
指定モード

単位行列をロード

投影行列を乗算

座標変換行列指定モード
単位行列をロード

Ｙ方向へ移動
Ｚ方向へ移動
Ｘ軸で回転
Ｘ軸で回転
図形を描画

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

34

シーンの構築.カメラ.投影方法
 風景をスクリーンへ投影するのも座標変換• 投影行列によって指定可能

 平行投影• 寸法や平行線が歪まない図面的表示• glOrtho 関数で行列生成

 透視投影• 遠近法を加味したリアルな表示• glFrustum 関数で行列生成

marina.sys.wakayama-u.ac.jp/~tokoi/?date=20090829
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

35

物体の定義

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

物体の定義.構成要素
 大量に描くことで様々な形状を表現
点 と 線分 と 三角形 しか描けない• Point Cloud モデル• Wireframe モデル• Polygon Mesh モデル

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

37

法線

物体の定義.頂点の情報

連続面

 頂点の情報で物体は定義される

面面

面

• 位置

• ３次元座標• 法線ベクトル

座標• 面に垂直な３次元ベクトル• 色• 基本的にテクスチャで代替される

0,0• テクスチャ座標

不連続面

0,10,00,1• 貼り付ける画像上の２次元座標
0.5,01,0
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

1,1

1,0

1,138

物体の定義.質感表現
 図形を彩色することで様々な質感を表現• リアルに描く• 光学特性を正確に再現する• アニメに描く• 人間の視覚特性や感性を考慮する• 図面などに相応しい本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

39

・ＦＭＸ版：github.com/LUXOPHIA/OpenGL
・ＶＣＬ版：github.com/LUXOPHIA/OpenGL_VCLOpenGL の歴史ここ見て！

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

OpenGL 1.0（1992）
 glBegin ～ glEnd 関数で括る
 頂点の属性毎に異なる関数• glVertex：位置• glColor：色• glNormal：法線• glTexCoord：テクスチャ座標

１頂点ずつ送る

一気に描画
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

41

OpenGL 1.1（1997）
 頂点配列• 属性毎の配列を一気に転送可能
位置配列を有効化
色配列を有効化
位置配列を転送
色配列を転送インデックス配列で描画

色配列を無効化
位置配列を無効化
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

42

データ型

更新頻度

OpenGL 1.5（2003）
 ＶＢＯ：Verttex Buffer Object• 予めＧＰＵ側へ頂点配列を転送し保持可能• 描画速度の大幅な向上

頂点配列を転送バイントバイント

転送不要
利用登録
転送不要
利用登録
転送不要

バイント
描画
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

43

OpenGL 1.5.ＶＢＯ
 生成/使用方法は皆同じ

生成• 種類フラグが異なるだけ
ＶＢＯの有効化

廃棄ＶＢＯの無効化

頂点配列の転送種類フラグ
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

44

OpenGL 2.1（2006）
 プログラマブルシェーダーが実現• ＳＯ：シェーダーオブジェクト• 質感を計算するプログラム• ＰＯ：ブログラムオブジェクト• ＳＯをまとめる実行主体

形状の描画
ＰＯのバインド

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

45

OpenGL 2.1.ＧＬＳＬ ＧＬＳＬ言語でシェーダを記述• ＶＳ：バーテックスシェーダー

ＶＳの登録
ＦＳの登録
リンク

• 頂点毎に呼ばれるイベント• ＦＳ：フラグメントシェーダー• ピクセル毎に呼ばれるイベント

ＶＳのソース本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

ＦＳのソース46

OpenGL 3.0（2008）
 ＶＡＯ：Vertex Array Object• ＶＢＯの有効/無効状態をまとめて登録しておく辞書• 描画の度に複数のＶＢＯをバインドする手間が省ける

 Core Profile 利用時はＶＡＯの利用が必須
ＰＯを有効化ＶＡＯを有効化

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

形状の描画

47

OpenGL 3.0.ＶＡＯ
 予め利用するＶＢＯを登録する
登録開始

位置配列を有効化
色配列を有効化
利用登録

利用登録

登録終了

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

利用登録

48

www.khronos.org/opengl/wiki/History_of_OpenGL

Post OpenGL 3.0
 OpenGL 3.0• シェーダで代替できる古い関数は非推奨にするよ• www.khronos.org/opengl/wiki/Legacy_OpenGL OpenGL 3.1• 非推奨な関数はすべて削除（拡張機能扱い）したよ OpenGL 3.2• 互換モードを選べば使えるようにしたよ• Core Profile：モダン関数のみモード• Compatible Profile：レガシー関数含有モード～～～～～
 OpenGL 4.3• モダンな機能がほぼ出そろう• 今から勉強するならここから！

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

49

OpenGL Extensions Viewer realtech-vr.com/admin/glview
 OpenGL のバージョンを調べられるアプリ• 各種ＡＰＩの実装率も分かる マルチプラットフォーム• Windows, macOS, Android, iOS

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

50

モダンな実装

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

モダンな実装.座標変換
 従来の行列系関数はすべて使えない• すべて自前で計算する

 頂点の座標変換はＶＳで代替するウィンドウ比率
カメラの投影行列

スクリーン座標
逆行列

カメラの姿勢行列
物体の姿勢行列
頂点座標

 物体の姿勢行列は変数としてシェーダに読み込ませる
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

52

モダンな実装.ＵＢＯ
 ＵＢＯ：Unoform Buffer Object• すべてのシェーダから共通の定数として参照できる配列• 生成/使用方法はＶＢＯと同じ• 種類フラグに GL_UNIFORM_BUFFER を指定

任意の構造体• 任意の構造体をシェーダへ渡すことが可能• メンバ変数の型と順番を一致させる必要あり

Binding Point
Uniform BlockglGetUniformBlockIndex

5

glUniformBlockBinding
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

432
10ＵＢＯ

ProjPose

glBindBufferBaseglBindBufferBase53

ミニマムライブラリ

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

ミニマムライブラリ.クラス構造

投影行列を設定

 ３つのクラスに整理• カメラ• TMyCamera• 材質（質感）

カメラのＵＢＯへ入力• TMyMatery

カメラの姿勢行列を設定
シェーダソースのロード• 物体（形状）• TMyShaper 描画は３行

テクスチャのロード
カメラを有効化

ポリゴン生成材質を有効化
物体を描画
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

物体の姿勢行列を設定
物体のＵＢＯへ入力
55

ミニマムライブラリ. TMyCamera 投影行列と姿勢行列をＵＢＯで保持
ＵＢＯ構造体
投影行列
姿勢行列
ＵＢＯ

ＵＢＯへの入出力有効化
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

56

ミニマムライブラリ. TMyMatery シェーダー関連オブジェクトを内包
 テクスチャオブジェクトを保持
頂点ＳＯＰＯ断片ＳＯ

サンプラーオブジェクト
テクスチャオブジェクト
ＰＯ有効化

有効化
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

テクスチャ有効化
57ミニマムライブラリ. TMyMatery.Create 変数⇒ＢＰの紐付けを自動化• Verters：ＶＢＯ用• 新しいＡＰＩではＶＢＯもＵＢＯのようにＢＰ経由で接続可能• Unifors：ＵＢＯ用• Imagers：テクスチャ用

ＰＯへのＳＯ登録• ＵＢＯのようにテクスチャユニットという単位で接続可能• Framers：フレーム用• ウィンドウへだけでなく内部的に確保した複数の画像へレンダリングすることも可能

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

変数名⇒ＢＰの登録58

ミニマムライブラリ. TMyShaperBase TMyShaper の基底クラス• 姿勢行列をＵＢＯで保持

ＵＢＯ構造体姿勢行列

ＵＢＯ

ＵＢＯへの入出力
描画
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

59

ミニマムライブラリ. TMyShaper 各種ＶＢＯを内包
位置ＶＢＯ
法線ＶＢＯ
テクスチャ座標ＶＢＯ
インデックスＶＢＯ

描画
形状のロード本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

60マキシマムライブラリ

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

マキシマムライブラリ ツリー構造でシーン構築できるノードベースライブラリ
 ジオメトリシェーダに対応
 TGLViewer をカメラに紐付け• Repaint メソッドによる直感的な描画
材質
相対姿勢行列コップ
材質

相対姿勢行列皿

投影行列
相対姿勢行列

机椅子

カメラ

材質

TGLViewer

相対姿勢行列TGLScener
本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。

62

THANKS!
www.embarcadero.com/jp
第34回 エンバカデロ・デベロッパーキャンプ

本文書の一部または全部の転載を禁止します。本文書の著作権は、著作者に帰属します。