• ベストアンサー

DirectXでの板ポリゴンのUV

DiretXでテクスチャの貼っている板ポリゴン(正方形)の頂点を移動した場合、 A ____ B  |     / |  |   /   |  |/___ | C        D Dの頂点を移動すればA、B、Cのテクスチャは変わらずに、B、C、Dのテクスチャだけが引き延ばされるので、奇妙な事になってしまいます。 Dの頂点だけを移動した際にテクスチャ全体が程よく引き延ばされる方法はないでしょうか。

noname#142253
noname#142253

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

  • ベストアンサー
  • chie65535
  • ベストアンサー率43% (8523/19372)
回答No.1

ポリゴンを2つ並べた「仮想四角ポリゴン」の頂点を簡単に移動する場合は「ポリゴンの頂点の入れ替え」が必要です。 Dの頂点を移動する場合は「仮想四角ポリゴン」を「ABC+BDC」から「ADC+ABD」に頂点入れ替えした上で、頂点Dを移動しましょう。 なお、この方法は「手抜き」なので1度しか使えません。頂点Dを移動後に頂点Bを移動させると破綻します。 >Dの頂点を移動すればA、B、Cのテクスチャは変わらずに、B、C、Dのテクスチャだけが引き延ばされるので、奇妙な事になってしまいます。 上記のような「テクスチャが歪む」と言う仕様になっているからこそ「リアルなポリゴンの変形」が出来るのです。 もし「四角形を綺麗に変形させたい」なら「数百のポリゴンをメッシュ状に細かく敷き詰めて、数百のポリゴンを同期させて変形させる必要」があります。 つまり「ポリゴン2つで済まそうなどという手抜きはいかんよ。ちゃんと変形させたいなら、数百のポリゴンからなるメッシュを変形させなさい」って事です。

noname#142253
質問者

お礼

この方法を実現させるにはポリゴン何百枚も貼んなきゃいけないんですか! ケチな自分には手の出しにくい手法です^^;

関連するQ&A

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

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

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

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

  • 確率漸化式の問題です

    座標平面上に4点A(0,1),B(0,0),C(1,0),D(1,1)を頂点とする正方形を考え、この正方形の頂点上を点Qが1秒ごとに1つの頂点から隣の頂点に移動しているとする。さらに、点Qは、x軸と平行な方向に移動する確率p、y軸と平行な方向に移動する確率1-pで移動しているものとする。最初に点Qが頂点Aにいたとするとき、n秒後に頂点A、Cにいる確率をそれぞれa_n、c_nとする。 a_n、c_nを求めよ。

  • 教えて下さい。

    ご覧いただきありがとうございます。 「1辺の長さがaの正方形A1B1C1D1から出発して  その各辺の中点と次図に示すように対応する各頂点を結んで、  四辺形A2B2C2D2をつくる。  四辺形A2B2C2D2が正方形であることを証明せよ。」 この問題を教えてください。 よろしくお願いします。

  • 点の移動 確率漸化式?

    「座標平面上に4点 A(0,1),B(0,0),C(1,0),D(1,1)を頂点とする正方形を考え、この正方形の頂点上を点Qが1秒ごとに1つの頂点から隣の頂点に移動しているとする。さらに点Qはx軸平行な方向の移動について確率p、y軸と平行な方向の移動について確率1-pで移動しているものとする。最初に点Qが頂点Aにいたとするとき、n秒後に頂点A、Cにいる確率をA_n、C_nとする。A_n、C_nを求めよ」 確率漸化式の問題だと思い、漸化式をn-1秒後とn秒の関係に注目しながら解こうとしているのですが、式がたくさんできてわけがわからなくなりました。 頂点B、Dにいる確率をB_n、D_nとして、 A_n+1=(1-p)B_n+pD_n B_n+1=(1-p)A_n+pC_n C_n+1=(1-p)D_n+pB_n D_n+1=(1-p)C_n+pA_n この4式から題意のA_nとC_nを求めることは可能なのでしょうか?なんだかうまくできませんでした。 回答いただければ幸いです。よろしくお願いします

  • 確率

     正方形ABCDの4つの頂点は点Oを中心とする円の周上にある。この正方形ABCDを、1つのさいころを1回投げて出た目の数に45°をかけた角度だけ右回りの方向に点Oを中心に回転させ、頂点A,B,C,Dが移動した点をそれぞれ、E,F,G,Hとする。今の状態はさいころを投げて1の目が出たときの様子を表している。中心Oと点A、Eをそれぞれ結ぶとき、次の各問いに答えなさい。  ただし、さいころのどの目が出ることも同様に確からしいものとする。 (1) 正方形ABCDと正方形EFGHがちょうど重なるさいころの目の出方は全部で何通りあるか、求めなさい。ただし、どの頂点がどの頂点と重なってもよいものとする。 (2) ∠AOE=135°になる確率を求めなさい。

  • 重心位置座標の求め方を教えて下さい。

    重心位置座標の求めかたを教えて下さい。 正方形の10kgの板の上に、90kgの人が立った時、4隅(A(0,0),B(0,50),C(50,50),D(50,0))にあるセンサーがそれぞれ、30kg(A)、10kg(B)、20kg(C)、40kg(D)の値を示しているときの、正方形の板における重心位置座標を求めるには、どう計算したらよいでしょうか? よろしくお願いします。

  • 復習確認テスト 中学生 数学

    復習確認テストを行い、返ってきたのはいいのですが 答えが分からず、解きかたさえも分かりません。 問題は1辺が4cmの正方形ABCD-EFGHがある。 Aは上から見て、左下にあり反時計まわりにBCDとなっています。 D  C         ←一応正方形です   A  B それで、辺AB上にある点をPとし、頂点DとE、頂点DとF 頂点DとP、頂点EとP、頂点FとPをそれぞれ結んでいる。 AP:PB=2:1のとき 立体P-DEFの体積はいくつcm³か? という問題です。 答えも分からず、悩んでいます。 分かる方ご回答お願いします。

  • CGプログラミングで前のポリゴンに隠れているポリゴンをレンダリングしない方法はありますか?

    CGのレンダリングの質問です。 カメラが座標(-10,0,0)から(0,0,0)を見ています。 そのときに3角形AとBがあり、それぞれの頂点が: A(0,0,0)(0,0,10)(0,10,0) B(2,0,0)(2,0,3)(2,3,0) となってBがAに隠れています。 簡単なOPENGLのプログラムでは: glBegin(GL_TRIANGLES); // draws triangle glVertex3f(0.0f, 0.0f, 0.0f); glVertex3f(0.0f, 0.0f, 10.0f); glVertex3f(0.0f, 10.0f, 0.0f); glEnd(); glBegin(GL_TRIANGLES); // draws triangle glVertex3f(1.0f, 0.0f, 0.0f); glVertex3f(1.0f, 0.0f, 5.0f); glVertex3f(1.0f, 5.0f, 0.0f); glEnd(); gluLookAt(-10.0,0.0,0.0, //Where should the camera locate 0.0,0.0,0.0,//Where to look at 0.0,0.0,1.0); //Which is up in CG ... となるのですが。 今回のようにポリゴンが2つで済む時にはすべてをレンダリングしてもなんともないのですが、私のプログラムでは複雑に配置されたポリゴンがたくさんある3D地図なので、どうしても後ろのポリゴンを書かなくてもよいように判定をしたいのです。 どなたかどのポリゴンが視覚に入るか判定できるアルゴリズムのようなものをご存知でしたらご教授いただけるでしょうか?

  • テクスチャに半透明ポリゴンを描画すると透ける??

    DirectX9で不透明なテクスチャに半透明ポリゴンを描画すると、ポリゴンを描画した部分が透けてしまうのはなぜですか? 1.「D3DUSAGE_RENDERTARGET」指定したテクスチャを作成して白でクリア 2.そのテクスチャに半透明の青いポリゴンをDrawPrimitiveUPで描画 3.そのテクスチャをD3DXSaveTextureToFileでPNG等で保存 とした場合、私のイメージでは白地に薄い青の四角が描かれた不透明な画像ファイルができると思ったんですが、青の部分が半透明になりました。 なぜ不透明なテクスチャに半透明ポリゴンを描くと半透明になるのでしょうか・・・? ―――――――――――――――――――――――――――――――――――― //レンダリング用テクスチャの準備 { global.pDevice->CreateTexture( 512, 512, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, &pTarget, NULL); pTarget->GetSurfaceLevel(0, &pSurface); global.pDevice->GetRenderTarget(0, &pBackBuffer); //バックバッファの取得 global.pDevice->SetRenderTarget(0, pSurface); //ターゲットの切り替え //白(不透明)にクリア global.pDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_ARGB(255, 255, 255, 255), 1.0f, 0 ); } //テクスチャに半透明ポリゴンを描画 { VERTEX point[4] ={ D3DXVECTOR3(100, 200, 1), 1.0f, D3DCOLOR_ARGB(128, 0, 0, 255), D3DXVECTOR3(100, 100, 0), 1.0f, D3DCOLOR_ARGB(128, 0, 0, 255), D3DXVECTOR3(200, 200, 0), 1.0f, D3DCOLOR_ARGB(128, 0, 0, 255), D3DXVECTOR3(200, 100, 0), 1.0f, D3DCOLOR_ARGB(128, 0, 0, 255) }; global.pDevice->SetFVF(D3DFVF_XYZRHW | D3DFVF_DIFFUSE); global.pDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP, 2, point, sizeof(VERTEX)); global.pDevice->SetRenderTarget(0, pBackBuffer); //レンダリングターゲット戻す } //テクスチャを保存 { D3DXSaveTextureToFile("d:\\hoge.png", D3DXIFF_PNG, pTarget, NULL); } ―――――――――――――――――――――――――――――――― D3DTSS_ALPHAOPをADDにしてみたりしたのですが、変化がありません。 テクスチャが透ける理屈と、こうならないようにする手段(アルファ値は加算したい)を教えてもらえると助かります。

専門家に質問してみよう