メインコンテンツへスキップ

TriangleStripでキューブ(直方体)を描く

··1170 文字·3 分·
プログラミング 学習 CG
著者
Admin
目次

TriangleStripとは
#

🔗DirectX🔗OpenGL🔗VulkanなどのグラフィックスAPI、ライブラリでゲームのキャラクターや物体を描く際には、頂点と(必要であれば)テクスチャをGPUに渡す必要がある。

この場合、頂点とは3D空間上の点の事だ。
頂点と頂点を繋げることによって線や三角形(場合によっては他の図形もある)を描くことができる。

そうして描かれる小さな三角形を組み合わせることで、ゲームの人形キャラクターや足場などの複雑なオブジェクトを描くことができる。

ポリゴンメッシュ: 🔗https://ja.wikipedia.org/wiki/%E3%83%9D%E3%83%AA%E3%82%B4%E3%83%B3%E3%83%A1%E3%83%83%E3%82%B7%E3%83%A5

GPUでは頂点の集まりをどのように処理(描画)するか指定することができる。
処理のオプションは頂点モードなどと呼ばれる。(はず)

頂点モード
#

いくつかの一般的な頂点モードを図を用いて説明しておく。

Point List
#

点の集まり。

GPUに頂点1 2 3 4 5を渡すとそのまま5つの点が描かれる。

Line List
#

線の集まり。 2つの頂点で1つの線が描かれる。

GPUに頂点1 2 3 4 5 6を渡すと、線1 2, 3 4, 5 6が描かれる。

Line Strip
#

GPUに頂点1 2 3 4 5を渡すと、線1 2, 2 3, 3 4, 4 5が描かれる。

Triangle List
#

三角形の集まり。
3つの頂点で1つの三角形が描かれる。

GPUに頂点1 2 3 4 5 6を渡すと、三角形1 2 3, 4 5 6が描かれる。

Triangle Strip
#

GPUに頂点1 2 3 4 5 6を渡すと、三角形1 2 3, 2 3 4, 3 4 5, 4 5 6が描かれる。

特に興味深いのはTriangle Stripだろう。 Triangle Listでは6つの頂点で2つの三角形しか描けないが、Triangle Stripでは6つの頂点で4つの三角形を描ける。

もちろん三角形が辺で繋がっていないといけないという制約はあるが、頂点数を削減することができる。

物体が複雑になって頂点数が多くなるほど負荷が増えるので頂点数を削減することはパフォーマンス上重要である。

TriangleStripでキューブを描く
#

以下の方法を参考に、Triangle Stripでキューブ(直方体)を描く。

Cube using single GL_TRIANGLE_STRIP: 🔗https://stackoverflow.com/questions/28375338/cube-using-single-gl-triangle-strip

Optimizing Triangle Strips for Fast Rendering: 🔗http://www.cs.umd.edu/gvil/papers/av_ts.pdf

以下が上のリンク先の図を立体にしたもの。

実際に図の順番で頂点を渡すと正しくキューブを描くことができた。


感想
#

自分の作っているものは頂点数的にめちゃくちゃシンプルなのでぶっちゃけ三角形を12枚で直方体を描いても良いのだが、まあこれも勉強だ。

Related

近況、進捗、就活、仕事のやめどき、今後の計画
··2301 文字·5 分
日記 学習 プログラミング 数学 wgpu 仕事 CG 数学 退職
球体で自作ゲームの衝突検出を実装する
··4511 文字·10 分
プログラミング 学習 数学 内積 衝突検出 ベクトル ゲームプログラミング
ゲームでの簡易的な当たり判定や衝突検出の実装方法を調べたので簡単にまとめた。
wgpuを利用した自作ゲームで頂点が視界に入らないのでRenderDocでデバッグする
··1197 文字·3 分
プログラミング wgpu RenderDoc CG ゲームプログラミング