• 締切済み

3Dの描画について

3Dの描画について 今、Cで3Dライブラリを作っています。 そこで質問なのですが、 空間上に頂点の座標が与えられたポリゴンが複数あるとします。 それをカメラから遠いものから順に描画したいです。 うまく描画するためには、どのような基準をもって カメラからの遠近を判断すればよいのかわかりません。。。 どなたか、アドバイスを頂けないでしょうか。 よろしくお願いします。

みんなの回答

  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.1

Zソートですね。 http://chiyo.sfc.keio.ac.jp/cgsoft/Release/Textbook/zsort01.html 普通は「重心」(=三角形の場合、3点の座標の平均)と視点との距離でソートする場合が多いです。 ただし、Zソート法では、どんなやりかたで基準を取っても 頂点の配置によっては前後判定を間違える場合があります。 これは単純なZソートでは解決できません。ポリゴンの分割を行う必要があります。 詳しくは「Zソート」をキーワードに検索してみてください。

関連するQ&A

  • Directxで一度に描画する方法

    DirectXで複数枚のポリゴンを描画しているのですが、それぞれ頂点変換行列やテクスチャが違うのでDrawPrimitiveをポリゴン毎に呼び出さなければいけなくなっています。 上記のような状態で一度に描画する方法はありますでしょうか?

  • DirectXで曲面の描画

    DirectX9で曲面の描画を考えています。 x=0.0~10.0、y=0.0~10.0、z=exp(-x^2-y^2)といった座標を与えて、 波を打つような曲面を作成したいのですが (QNo.2528542のような滑らかな曲面でなくてもよいです) 自分でメッシュを作成することで実現可能なのでしょうか? メッシュを作成するには頂点(バッファ)を指定するの思うのですが、 その頂点は射影行列を施した後の(x座標、y座標、Z値)になり、 上のような3次元空間上の座標から直接メッシュが作り出せないものかと考えています。 ティーポットのようなメッシュをXファイルを使わずに作り出すにはどうしたらよろしいでしょうか? (↑曲面の描画 イコール メッシュの作成と考えての質問です、そもそもこの思考が間違っていますか?) だらだらと書き綴りましたがよろしくお願いします。

  • directxのspriteの描画について

    VisualStudioによりc++とdirectxを使って3Dオブジェクト(xファイルなど)とspriteによるテクスチャの描画をしたいのです。3Dの格闘ゲームのようにカメラが動いているのに、ライフバーが固定されているようなものを作りたいのです。 3Dオブジェクトはプロジェクション変換とビューポート変換をして描画し、spriteのテクスチャは画面の左上を座標(0,0)として描画したいのですが、どのように実装すればいいのでしょうか? 現時点ではspriteを描画する前にプロジェクション変換とビューポート変換のときに使うポインタを初期化してパイプラインに送ればいいと考えやったのですが、3Dオブジェクトは描画されているのですがspriteはうまくいきませんでした。

  • 3D空間にポリゴンを配置して、仮想世界を作れるソフト

    3D空間にポリゴンオブジェクトを配置して仮想世界が作れて、 その中を自由に探検したり、リアルタイムでぐるぐる遠近色んな角度から見たり出来るソフトないでしょうか? 出来るだけ軽くて、安価なら言うこと無しです。

  • カメラに描画される角度を求めたい

    3D空間上に原点O(0,0,0)点A(0,a,b)点B(c,0,0)点C(c,1,0)があります。 カメラを点Aから点Bにむけます。その際線分BCが垂直に映るようにします。カメラから見た線分OBの傾きを求めたいです。 カメラの描画は平行投影で。 教えてもらえると助かります。 ChatGPTに聞いて何度も騙されました、、、

  • Flashで3Dゲームを作成するには

    Flashで3Dゲームを作成したいと考えています。 Windowsの3Dゲームアプリケーションを開発した経験はあるのですが、Flashはまったくの素人です。 "Flash 3D"で検索してSwiftというものが見つかりましたが、これは3Dデータを静的に組み込むもののように見受けられます。 3Dポリゴンをリアルタイムでグリグリ動かすようなゲームを開発したいのですが、Flashには(C++で言うところのDirectXやOpenGLのような)3D描画用のライブラリはあるのでしょうか? どなたかご教示いただけますと幸いです。

    • ベストアンサー
    • Swift
  • 空間ベクトル

    この問題のやり方を教えて下さい 空間内の4点A(9.3.5)、B(5.1.2)、C(-2,-4,3)、Dを頂点とする平方四辺形ABCDがある、頂点Dの座標を求め。

  • DirectXのポリゴンモデルの表示について。

    DirectXの勉強を始めたばかりの者です。 3Dポリゴンモデルの表示をさせたいと思いWeb上の解説記事を読んでいるのですが 何枚かの板ポリゴンで構成される「ポリゴンモデル」のデータを「プログラム内で記述」して描画させるにはどうしたら良いのか、ということが分かりません。 解説記事を読んでいて、まず、DrawPrimitive()等で一枚ずつポリゴンを描画させることを知りました。 それから「メッシュモデル」という単位で、3Dモデリングソフトで作成した「xファイル」からロードして描画できることを知りました。 (http://princess-tiara.biz/directx/?chapter=12)  ただし「メッシュモデル」のような単位のポリゴン群データを「xファイル」からロードするのでは無く、プログラム内での配列データのセットのような感じで記述したいと思っています。  こういう場合、頂点の繋がりや法線などのデータを全く自前の構造体で定義して、各ポリゴンをforループで一枚ずつDrawPrimitiveなどで描画するというのも、それも1つの手だとは思うのですが、それは何となく本筋という訳でも無いのではと思えます。  また、別のモデリングソフトで「xファイル」を作って、というのも例えば幾何学的な多面体モデルを作りたいと思う場合にはあまり適していないように思います。(その場合、頂点の座標値は是非コンピュータ自身に計算させてセットしたいものです。)  メッシュモデルのようなデータをプログラム上に記述したい場合、プログラム自身に座標値をセットさせたい場合、どうしたら良いのでしょうか?  何か特定の記述のフォーマットなどがあるのでしょうか。またそれを描画する方法はあるでしょうか。解説されているページなどありましたらリンクのみでも助かります。  

  • アローダイアグラムの描画について

    計画系のXMLデータを使用し、PERT図(アローダイアグラム)の作成をするプログラムを書こうとしています。 各ノードがもっている情報は以下のとおりです。 ・ノード名 ・先行ノード名 理論的には、上記の情報のみでアローダイアグラムが完成するはず(と考えています) 元データがXMLということもあり、画像はSVGを予定しています。ここで、わからないことがあるので教えてください。 XY座標上にノードを配置し、線で結ぶロジックまでは比較的簡単にできたのですが、ノードをどのように座標配置するかで行き詰まっています。 ノードの枝分かれ、再結合などが発生したときに、XY座標(無限空間とします)上のノード位置が重複しないよう、位置をうまくずらしてあげる必要があります。 (全ての座標を計算したあとに、一括して描画します) 通常、こういった計算はどのようなロジック、アルゴリズムに基づいて行うものなのでしょうか?それとも、開発環境の描画ライブラリなどにおまかせするのが一般的な方法なのでしょうか。 一般的なアルゴリズムがあれば、がんばって実装しますが、特定の描画ライブラリを使う必要があるのであれば、あきらめようと考えています。 情報をお持ちの方は教えてください。。

  • AutoCAD LT 2007での長方形描画について

    AutoCAD LT 2007です。 4点ABCDからなる長方形の対角2点の座標(”点Aと点C”または ”点Bと点D”)と長さを指定すれば、指定した長さ分内側に 長方形が描画出来るようなコマンド?マクロ?を作成することは 出来ますでしょうか? 例えば、座標0,0&座標7,10、長さ2(元の長方形)とすれば、 座標2,2&座標5,8を対角とする長方形(新たに描画される長方形)が 描けるといったようなことです。 教えて下さい。 何卒よろしくお願い申し上げます。

専門家に質問してみよう