• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:グラフィックス関連の質問です)

C言語での3Dグラフィックスアプリケーション開発におけるポリゴンデータ構造とは?

このQ&Aのポイント
  • C言語を用いて作成している3DのCG関連アプリケーションにおいて、ポリゴンデータ構造のモデリングについて疑問があります。
  • 具体的には、ビルディングブロックをモデリング変換し、「構造」と「サブ構造」を用いて構築する部分についてです。
  • 自分が読んでいる参考書では、ポリゴンデータの実体は頂点しか保持せずに、他の情報は命令で行うと書かれていますが、これが正しい解釈なのか疑問です。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

最も単純なワイヤーフレームモデルにおいては ワイヤーフレームモデル {  頂点データ {   頂点数   頂点リスト[頂点数] {    X、Y、Z   }  }  線分データ {   線分数   線分リスト[線分数] {    頂点番号1、頂点番号2   }  } } となる。 上記のようなワイヤーフレームのデータが基本。 一般の3Dツールでは、このような単純なワイヤーフレームを読み込み、頂点と線分のデータを元に「三角形の面」を自動で生成し、回答番号1のような「ポリゴンオブジェクト」を生成可能になっている。 もし、ワイヤーフレームデータの中に、三角形ではなく四角形が含まれている(例えば「さいころ」のワイヤーフレームを思い浮かべて欲しい。これは6つの正方形、つまりは、6つの四角形で構成されていて、頂点数が8、線分数が12になっている筈だ)場合は、自動的に四角形を2つの三角形に分割してくれる処理もしてくれる。 例えば、頂点数が8、線分数が12の「さいころ」のワイヤーフレームを読み込むと、頂点数が8、ポリゴン数が12(四角形は6面ある。各面の四角形1つが三角形2つになるので、合計12個の三角形が出来あがる事になる)のポリゴンデータが生成される事になる。 >ポリゴンデータ[0]={v00,v01,v02..} >ポリゴンデータ[1]={v10,v11,v12..} >... >... >ポリゴンデータ[ポリゴンデータ数-1]={vn0,vn1,...} 3Dを扱う場合、安易に「v」と言う変数を用いてはいけない。 3Dでは「x」「y」「z」は「座標変数」を意味し、安易に別の意味の変数として使わないのは判るだろう。 もし ポリゴンデータ[0]={x00,x01,x02..} ポリゴンデータ[1]={x10,x11,x12..} ポリゴンデータ[2]={x20,x21,x22..} ... ... ポリゴンデータ[ポリゴンデータ数-1]={xn0,xn1,...} と書かれたら、貴方は「え?X座標のデータばっかり?」と混乱することだろう。 それと同様で「u」「v」は「テクスチャマップ座標」を意味し、安易に別の意味の変数として使わないのだ。 3Dに慣れた人は、下手に「v」なんか使われたら「ん?なんで、ここでUV値のvが出てくる?」と混乱するのだ。 「u」「v」「x」「y」「z」は「予約語」と思って、安易に変数に使っちゃダメだという事を覚えとこう。

gachinco
質問者

お礼

線分のデータもあるんですね 自分の今のデータ構造だと面表示するだけ なので線分のデータも面のデータもなく 頂点の辿り方のリストだけがあり それだけでポリゴンを構築しています. 頂点と線分のデータも三角形分割では必要になるみたいですね ありがとうございました. しかし, 結構, 記号とか自己流で気にせず使っている ので以後気をつけます.

すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.3

因みに、「o」「p」「q」「r」「s」「t」も、それぞれ特定の意味を持つ変数に使う事があるので、安易に使っちゃいけない。

すると、全ての回答が全文表示されます。
回答No.1

ポリゴンオブジェクトは、基本的には オブジェクト {  アトリビュート {   テクスチャ、光源、質感、反射などの情報  }  頂点データ数  頂点データ[頂点データ数] {   X、Y、Z、U、V、頂点カラーやボーンの重みなどの付加情報  }  ポリゴンデータ数  ポリゴンデータ[ポリゴンデータ数] {   頂点番号1、頂点番号2、頂点番号3  }  オプションデータ } と言う構造になる。 この他に、ボーンと頂点の重み情報とか、ボーン情報とか、モーションデータとか、テクスチャ画像とか、色んなデータが出てくる。

gachinco
質問者

お礼

ありがとうございます 申し訳ありません. 僕の勉強不足で, まだ属性(テクスチャや光源や隠面処理など)の処理までは手の回らない状態です. なのでポリゴンデータでも主にワイヤーフレームモデルの データ構造で手一杯の状態です. しかしながら, とても分かり易い解説なので 僕の質問したかった事もより明確になった気がします. ポリゴンデータ数 ポリゴンデータ[0]={v00,v01,v02..} ポリゴンデータ[1]={v10,v11,v12..} ... ... ポリゴンデータ[ポリゴンデータ数-1]={vn0,vn1,...} このポリゴンデータ[i]というのは 僕的にはポリゴンを構成している面を表していると解釈してるのですが そうするとワイヤーフレームモデルにおいては 頂点と頂点を結ぶ線分というものは データとしては存在してなくて このポリゴンデータ[i]がもつ頂点リストを辿って 面を表現するという所まではなんとなく分かりました. という事は頂点を辿って平面を描画する命令 が繰り返されて多面体ができているだけなんですよね? すなわち, 最低限の頂点の情報とその他のプリミティブを構成する 命令のみで構成されているのですよね? 属性は当然保持しなければならないですが ワイヤーフレームモデルにおいてという事で ご教授頂けないでしょうか;; すいません偉そうな文章で...

すると、全ての回答が全文表示されます。

関連するQ&A