diff --git a/articles/graphics-03.re b/articles/graphics-03.re index d589684..c2f1df0 100644 --- a/articles/graphics-03.re +++ b/articles/graphics-03.re @@ -212,7 +212,7 @@ OpenGL ESの「奥行き機能」を"深度バッファ(Depth Buffer)"と呼び ちなみに、逆に機能を無効化する場合は"glDisable"というコマンドが用意されています。 -[2]では、glClearコマンドの引数に対して"GL_DEPTH_BUFFER_BIT"を「追加して」います。glClearコマンドの引数は1つしかありませんが、このコマンドは引数を"|"でビット演算行うことで、「フラグを複数同時に伝える」ということができます。 +[2]では、glClearコマンドの引数に対して"GL_DEPTH_BUFFER_BIT"を「追加して」います。glClearコマンドの引数は1つしかありませんが、このコマンドは引数を"|"でビット演算することで、「フラグを複数同時に伝える」ということができます。 Androidに限らず、公開されているAPIにはこのように「ON/OFFの状態を"|"演算子で組み合わせて送る」という引数が、たびたび登場します。1bitに付き1つの「ON/OFF」を管理できますので、int型(32bit)では最大32個のON/OFF組み合わせを保持できます。頭の片隅に覚えておくとよいでしょう。 @@ -223,7 +223,7 @@ GL_DEPTH_BUFFER_BITは「深度バッファを再度使用できる状態にす === 課題:インデックスバッファで描画する -ですが速度の向上にはまだ不十分です。なぜなら、この頂点データには大量の「不要データ」が含まれているからです。たとえば、3DCGとは関係なく立方体の「頂点」を数えた場合、たった8個しかありません。 +先の2つの課題で正しい深度を持った立方体が描画できました。しかし速度の向上にはまだ不十分です。なぜなら、この頂点データには大量の「不要データ」が含まれているからです。たとえば、3DCGとは関係なく立方体の「頂点」を数えた場合、たった8個しかありません。 前述の課題で作成していた大量のデータの中には、重複したデータが存在してしまっています。 @@ -239,7 +239,7 @@ GPUは"頂点バッファ"と"インデックスバッファ"を与えられる また、インデックスが同じであれば、同じ頂点を読み込みに行きます。そのため、インデックスバッファは重複した頂点を表現する@{インデックスバッファのキャッシュ}ことを得意としているのです(@{Chapter03_03})。 -//footnote[インデックスバッファのキャッシュ][一度処理した頂点はキャッシュが保持されるため、重複した頂点に何度も頂点シェーダー計算を行うことも避けられます。便利ですね] +//footnote[インデックスバッファのキャッシュ][一度処理した頂点はキャッシュが保持されるため、重複した頂点に何度も頂点シェーダー計算を行うことも避けられます。便利ですね。] //listnum[Chapter03_03][Chapter03_03.java]{ public class Chapter03_03 extends Chapter03_02 { @@ -313,7 +313,7 @@ public class Chapter03_03 extends Chapter03_02 { その代わり、「インデックス何番の頂点を示すか」を表すためのインデックスバッファはちゃんと36個存在しなければなりません。[2]では12ポリゴン(2ポリゴン×正六面体)分のインデックスバッファを用意しています。 -最後に、[3]では"glDrawElements"コマンドを使用して描画を行います。描画コマンド名が違うことに注目してください。インデックスバッファを使用する場合はこのglDrawElementsコマンドで描画を行います。 +最後に、[3]では"glDrawElements"コマンドを使用して描画を行います。描画コマンド名が違うことに注目してください。インデックスバッファを使用する場合は、このglDrawElementsコマンドで描画を行います。 第1引数は今までどおりGL_TRIANGLESです。 @@ -327,7 +327,7 @@ public class Chapter03_03 extends Chapter03_02 { === 課題:バッファオブジェクトで描画する -さらなる高速化・効率化のためには、この頂点をVRAMに格納することが重要です。今まで使用していたBufferオブジェクトはもともとCPUが効率よくデータを読み書きするためのクラスです。ですが、それはあくまでCPUにとって都合がよいというだけで、GPUにとって都合がいいとは限りません。 +さらなる高速化・効率化のためには、この頂点をVRAMに格納することが重要です。今まで使用していたBufferオブジェクトは、もともとCPUが効率よくデータを読み書きするためのクラスです。ですが、それはあくまでCPUにとって都合がよいというだけで、GPUにとって都合がいいとは限りません。 それだけでなく、CPU用のメモリ(RAM)はGPUから物理的に切り離されている場合があるため、効率のよいアクセスが行えない場合があるのです。そこで、頂点バッファやインデックスバッファを予めVRAMにアップロードし、GPUにとって都合がいいメモリ配置を行うことができます。 @@ -470,7 +470,7 @@ public class Chapter03_04 extends Chapter03_02 { 最後に、データのアンバインドです。アンバインド処理はglBindBufferコマンドの第2引数に"0"を指定するだけで済みます。 -[4]はインデックスバッファのアップロードですが、各コマンドの第1引数が"GL_ELEMENT_ARRAY_BUFFER"に変化している以外に違いはありませんので、問題なく行えるでしょう。 +[4]はインデックスバッファのアップロードですが、各コマンドの第1引数が"GL_ELEMENT_ARRAY_BUFFER"に変化している以外に違いはありませんので、問題なく行えるでしょう。 これでVRAMへのアップロードは完了しました。