• ベストアンサー

Direct3Dでの頂点の順番

ポリゴンを描画するときの頂点の順番について質問があります。 私が現在使っているのはUnmanaged DirectXではなく、Managed DirectXですが、こちらの環境ではUnmanagedでも同様の現象を確認できました。 verts[0]=CustomVertex::TransformedColored(200.0f, 50.0f, 0.0f, 1.0f, Color::Red.ToArgb()); verts[1]=CustomVertex::TransformedColored(50.0f, 100.0f, 0.0f, 1.0f, Color::Blue.ToArgb()); verts[2]=CustomVertex::TransformedColored(200.0f, 0.0f, 0.0f, 1.0f, Color::Green.ToArgb()); これは(x,y,z,rhw)=(200,50,0,1), (50,100,0,1), (200,0,0,1)の色の付いた三つの頂点を作成していて、この書き方でだとちゃんと三角形のポリゴンが表示されます。 次に、 verts[0]=CustomVertex::TransformedColored(200.0f, 0.0f, 0.0f, 1.0f, Color::Red.ToArgb()); verts[1]=CustomVertex::TransformedColored(50.0f, 100.0f, 0.0f, 1.0f, Color::Blue.ToArgb()); verts[2]=CustomVertex::TransformedColored(200.0f, 50.0f, 0.0f, 1.0f, Color::Green.ToArgb()); これは作成している頂点は同じなのですが、順番が変わっています(verts[0]とverts[2]を入れ替えました)。順番が変わるだけ(色も変わっていますが)ならばちゃんと表示されるだろうと思ったのですが、何も表示されませんでした。 どうも頂点の順番によって描画できるかどうかが決まるようなのですが、これはそういう仕様なのでしょうか?また、これを回避する方法はあるのでしょうか? ご存知の方がいらっしゃればご教授お願いします。 私のコンピューターの環境は VGA:Radeon HD 3200(AMD 780G) VGAメモリ:メインメモリと共用 OS:Windows XP Home Edition SP2 DirectX:9.0c 描画する際はDrawPrimitives(UnmanagedではDrawPrimitive)を使用し、TRIANGLEFAN,TRIANGLELIST,TRIANGLESTRIPなども試してみましたが同じでした。

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

  • ベストアンサー
  • noocyte
  • ベストアンサー率58% (171/291)
回答No.1

DirectX も OpenGL も,多角形の頂点が右回り順か左回り順かで, 面の表裏のどっちが見えているのかを判定しています. そして普通は裏向きの面を無駄に描画しないようにして,レンダリング速度を上げています. 「カリング (culling)」で検索してみてください. ★ DirectX Class ★ * Chapter 06: 3D図形の表示 * http://princess-tiara.biz/directx/?chapter=6 「実践 3Dプログラミングの集い」 Lecture 6: OpenGL / DirectXにおける3D基礎概念の対比 http://sequoia-web.hp.infoseek.co.jp/tsudoi/tsudoi06.shtml 頂点データによる半透明処理 http://sorceryforce.com/programing/directx/direct3d/base/vertexalphablend.html "カリングとは" で検索. http://www.google.co.jp/search?q=%22%E3%82%AB%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%A8%E3%81%AF%22&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a 「カリング DirectX」で検索. http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla%3Aja%3Aofficial&hs=0lI&q=%E3%82%AB%E3%83%AA%E3%83%B3%E3%82%B0+DirectX&btnG=%E6%A4%9C%E7%B4%A2&lr=lang_ja

akoyagai
質問者

お礼

表と裏があるというのはどこかで耳にしたことがあったのですが、右回り順か左回り順かで表裏がきまるというのは知りませんでした。 わざわざURLまで示してくださってありがとうございます。

その他の回答 (1)

  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

板には表と裏があるということですね 普通は表だけしか描画しないようになっている 表か裏かは頂点の順番が時計回りか反時計回りかで決める

akoyagai
質問者

お礼

回答ありがとうございました。 これからは頂点の順番にも気を付けようと思います。

関連するQ&A

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

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

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

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

  • LEDの光

    ホワイト レッド ブルー グリーン 一番光の強い色はなんでしょうか? ※強い順番も教えてくれるとありがたいです。

  • F1のナショナルカラーは誰が決めた?

    今は少なくなってしまったが、昔のF1には国ごとの色(ナショナルカラー)があった。 (イタリアン・レッド、ジャーマン・シルバー、ブリティッシュ・グリーン、フレンチ・ブルー等) これらの色は、いったい誰が決めたのか? あまりにも合致するセンスの良さに驚かされる。

  • 自転車のLEDライトについて

    夜間、自転車のライトの色は何色が一番対向車に目立ますか  [カラー] ホワイト ブルー レッド グリーン パープル

  • ジェルネイルの色で相談です。

    この写真のカラー(7色)から2色選んで ダブルグラデにするなら 皆さん、どの色とどの色を組み合わせますか? どの組み合わせが素敵ですかね??? 参考までに聞かせて下さい。 悩んでまして・・・。m(__)m シルバー・ピンク・レッド・オレンジ ブルー・グリーン・イエロー

  • 3D描画が正しくできなくなった

    ある日突然3D描画がおかしくなりました。 3Dを使うゲームを起動した時、こんな画面になります↓ http://www.geocities.jp/raruku_j/3dbyouga.html ビデオカードがおかしくなったのでしょうか…それともソフトウェア的な問題でしょうか。 DirectXのテストをしてみたところ3Dの立方体がくるくる回るテストでも、立方体は出ているのですが、ロゴが画像と同じような感じに表示されます。 普通の描画(2D?)は正常です。 何か対処方法などをお知りの方はご教授お願い致します。 VGA→Geforce4 Ti4200

  • paint()メソッドが呼ばれない

     swingを使って多角形を表示するプログラムを作成しています.polygonクラスを配列に格納して,順番に表示しているのですが,配列中のひとつのpolygonオブジェクトを削除して,再描画を行おうとして,repaint()で一旦画面をクリアして,その後my_paint()で配列中のpolygonを描画させようとしているのですが,    ・  repaint();  my_paint();    ・ my_paint()メソッが呼ばれずに画面がクリアされた状態になってしまいます. どなたか,解決方法をご存知でしたら,ヒントでもいただけるとありがたいです.よろしくお願いします.

    • ベストアンサー
    • Java
  • Graphicsクラスを使って描画履歴を残して、しかも色も選択しながら描画を行いたい

    以下のようなドロープログラムを作ってみたのですが 描画色を変更して再描画すると前の描画履歴が消えてしまいます 描画色を変更しても以前の描画履歴の消えないようにするには どのようにすればいいのでしょうか。 文字数制限によりプログラムをアップできませんでしたので一部を記述させていただきます。 グローバルなカラーオブジェクトを用意し class Globe{ static mycol=Color.white; } 二つのラベルを用意して Label red=new Label("■"); Label green=new Label("■"); ラベルそれぞれにマウスリスナーを登録して red.addMouseListener(new MouseAdapter(){ public void mouseClicked(MouseEvent e){ GLobe.mycol=Color.red; } }); green.addMouseListener(new MouseAdapter(){ public void mouseClicked(MouseEvent e){ GLobe.mycol=Color.green; } }); マウスドラッグによる座標取得を行い public void mouseDragged(MouseEvent e){ x=e.getX(); y=e.getY(); repaint(); } 二つの色を使い分けて描画できるようにしました。 public void update(Graphics g){ setForeground(Globe.mycol); g.fillOval(x-3,y-3,6,6); }

    • ベストアンサー
    • Java
  • フォトショップの文字カラーと描画カラーの違いについて

    カラーモードをCMYKで制作した場合、描画カラーと文字カラーの色が違います。 描画カラーでは鮮やかな色が表示されるのに、文字カラーではくすんだ色になってしまいます。 ブラシツールで絵を描くと、描画カラーの色ではなく、文字カラーの色でしか描く事ができません。 文字カラーの色をカラーピッカーで調整しても、いざ画面でイラストを描こうとするとくすんだ色になってしまいます。 これをRGBモードで制作したら、描画カラーと文字カラーはちゃんと同じ色が表示されます。鮮やかな色も表示されます。 ★CMYKモードの描画カラーと文字カラーを同じ色にして、カラーピッカーできちんと調整できるようにするにはどうしたらいいのでしょうか?

専門家に質問してみよう