• 締切済み

テクスチャーマッピングについて

現在テクスチャーマッピングの技法を用いて画像の回転(面回転)を したいのですが、その前に テクスチャーマッピングをプログラムで考えた時の理屈がなかなか 理解できません。ポリゴンに貼り付けるBITMAPのサイズを0~1で 考えていくのはわかるのですがテクスチャーマッピングを 完璧に理解したいのでもっと情報が欲しいです。 わかる方はなるべく具体的に説明していただくとありがたいです。

みんなの回答

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.1

ゲームなどに使われる3D映像は 通常ワイヤーフレームにポリゴンを貼り付け そのポリゴンに貼り付ける絵がテクスチャーなわけですが まず、DirectX等を使わずに直接3Dの画像を2D上に ワイヤーフレームのみ書くプログラムを考えてみてください。 3Dの情報を2Dに投影させてあたかも3次元の空間が 画面上にあるかのようにみせようとするものです。 テクスチャーの画像も同じように計算しているわけです。 更に光源位置や影、グローシェーティングなど 計算量もとてつもなく膨大になってしまうため もはや、CPU単体の処理では間に合いません。 現在WindowsではDirectXのHALモード 専用のハードウェア上で一連の計算を行います。

to4
質問者

お礼

う~ん、なんとなくイメージはできました。 自分はまだまだ勉強不足なのでもっとがんばらないと。 ありがとうございました☆

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

関連するQ&A

  • テクスチャマッピングについて

    はじめまして C++とDirectXでプログラムをしているのですが、 テクスチャマッピングで表示する画像が 元の画像に比べ、ぼやけた感じになってしまいます。 なぜでしょうか?

  • OPENGLでOBJファイルのフォーマットによるテクスチャマッピングの方法

    私は大学で情報分野を専攻している者です。 最近は研究でコンピュータグラフィックを学習しなくてはならなくなりました。 具体的に、OBJファイル,mtlファイル,そして画像(bmp形式)のデータを用いてOPENGLでグラフィックを描写しなくてはならないのですが、 OBJファイルのフォーマットに従ってテクスチャマッピングする方法(テクスチャ座標値vtのUV座標の使い方)がどうしてもわかりません。グーグルなどで関連するサイトを調べたり赤本を読んだりしたのですが、いまいち理解できませんでした。 もしどなたがご存知であるならば、OPENGLでOBJファイルのフォーマットに従ったテクスチャマッピングの方法を教えていただけないでしょうか? OSはWindows XP,開発環境はVC++2005です。 OBJファイルのデータ数はv,vn,vtが65000ほど、fが130000ほどです。 OBJファイルの構造は理解しています。 どうかよろしくお願いします。

  • SAIのペーパーテクスチャが反映されません

    つい先日ペイントツールのSAIを購入しました。 さっそくペーパーテクスチャを追加しましたが、用紙質感リストにはあがるもののキャンパスに反映されず困っています。 私が行った手順は具体的には (1)pixivなどで配布されているフリー素材のグレースケール画像を512×512pixelのサイズ、bitmap形式でpapertexフォルダに保存する。 (2)papertex.confファイルをプログラムのメモ帳から開いて書き足す。(最初に1,papertex\をつけて1字1句間違えずに画像名.bmpを書き足しました) (3)SAIを開いてキャンパスを塗りつぶし、用紙質感をかけてみる。 です。 しかしやはりテクスチャは反映されず・・・ どこに問題があるのかわかりません(泣) 分かる方がいらっしゃれば教えていただけると幸いです。

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

    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にしてみたりしたのですが、変化がありません。 テクスチャが透ける理屈と、こうならないようにする手段(アルファ値は加算したい)を教えてもらえると助かります。

  • カメラで撮影した画像をOpenGLで表示する方法

    webカメラで撮影した映像を,OpenGLを用いて表示することを考えております. 撮影した映像を,できる限り高速に表示する方法を教えていただけないでしょうか? 用途としては,仮想世界の視点移動に合わせて,カメラで撮影した画像を張り付けたポリゴンを 自由な視点から観察することを考えています. 私の考えつく解決策は,以下の通りです. 1.OpenGLの背景(バックバッファ)の領域を指定し,書き込む 2.ポリゴンにテクスチャマッピング 2.について実装してみたのですが,表示速度がいまひとつでした. 実装としては,テクスチャ用画像を,毎フレーム更新して, テクスチャマッピングする方法をとっています. コードを抜粋したものは,以下の通りです. ------------------------------------ glBindTexture(GL_TEXTURE_2D, g_texture[0]);//テクスチャの指定 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); gluBuild2DMipmaps(GL_TEXTURE_2D, 3, texture_img[0]->width,texture_img[0]->height, GL_RGB,GL_UNSIGNED_BYTE,texture_img[0]->imageData); ---------------------------------- ※texture_img[0]を毎フレーム更新して,テクスチャマッピング お忙しいと思いますが, アドバイスをいただけますと幸いです. よろしくお願いいたします.

  • テクスチャ合成 キルティング風

    ppmの画像をテクスチャ合成するプログラムを作りたいのですが、 英語の文献ですが、 http://www.cs.berkeley.edu/~efros/research/quilting.html のような方法を使います。 かなりアバウトに言えば、ある画像からある部分の領域を正方形状にランダムにとりだし、貼り付けていき、隣同士を少しかぶらせてつなぎ目をなくしていくというものです。 ただかぶらせたところにどういった処理を行えばいいかわかりません・・ 説明が荒いものですが、詳しく知ってる方お願いします。

  • 3DCGソフトメタセコイアについての質問です。

    3DCGソフトメタセコイアについての質問です。 メタセコイアでキャラクターの顔を作って顔にテクスチャーを貼ったのですが、なぜが目の部分のテクスチャーがいびつになってしまいます。 顔ポリゴンはまず平面で目や口を作り、平面で顔を作ってからZ軸を移動させてやる方法です。目の部分は8角形で中心の頂点をくっつけています。この状態で目の部分にテクスチャーを貼ると、割れた鏡のように画像が面と面の境目でずれてしまいます。 どうすればきれいにテクスチャーを貼ることができるのでしょうか? テクスチャーは参考書などでよくあるようにグリッド画像を貼り付けて、グリッドのゆがみがないようにしてやる方法なのですが、顔ポリゴンの正面でUV展開しているのに、目の部分で上記のように画像にずれがでてしまいます。 どなたか解決法をご存知でしたらご教授ください。 よろしくお願いいたします。

  • DirectX9でのテクスチャフォーマットについて

    いつもお世話になります。 VC6.0&WIN2000、DirectX9.0でプログラムを作っています。 D3DXCreateTextureFromFileInMemoryEx関数でテクスチャを読み込んだあと、テクスチャのメンバ関数のGetLevelDescを行ってみました。 すると、フォーマットの返り値が必ず D3DFMT_A8R8G8B8 になります。 D3DXCreateTextureFromFileInMemoryEx関数で指定したフォーマットと違うのですが、これは何故でしょうか? また上記のせいか、元々の画像ファイルのサイズよりも、多くのメモリを使用しています。 おそらく、1ピクセルを D3DFMT_A8R8G8B8 の大きさでメモリを確保してしまうからだと思うのですが、本来の画像フォーマットの大きさで確保する方法はないでしょうか? それでは、どうぞ宜しくお願いします。

  • メタセコイア テクスチャについて

    こんにちわ、MMDモデルを自作するためモデリングを始めた初心者です。 今は顔と体を作り終わり、歪みを確認しようと灰色の格子柄の材質を指定したいのですが、髪の毛のオブジェクトだけ模様が反映されず困っています。 何故か灰色だけは反映され、それも謎です・・ 体や顔など髪の毛以外のオブジェクトではちゃんと模様が反映されるのですが・・・ 髪の毛は短冊形?という方法で、とある解説サイト様を参考にしながら作りました。 髪の毛だけでオブジェクトが10個ほどあります。   手順は反映させたいオブジェクトだけ範囲選択→選択部処理→面に現在の材質を指定で行っています。 表示→テクスチャを表示 にもチェック入ってます。 マッピングも表示はUVになっていました。 メタセコイアは有料版です。 画像を違うものに変えても、JEPGやBMPと拡張子を変えてもダメでした。 素材設定の球体、UV操作中のバックには格子柄の画像が反映されています。 今までできていたことが急にできなくなりとても焦っています・・・ どこか変なところを押してしまっているなどあるのかもしれませんが、自分ではもうお手上げです・・。 なにかそれらしい原因などあれば教えていただけるととても助かります。 説明が下手ですみません、よろしくお願いいたします。

  • OPEN GLのテクスチャ座標

    色々なサイトを読むとテクスチャ座標にはS,T,Q,Rがあると書いてあるのですが、具体的にS,T,Q,Rがどういう座標なのかよく分からないのですが、教えて頂けますでしょうか。 自分なりに調べて少し参考になったのは以下のサイトなのですが、ここではS,Tの定義については説明されています。 http://marina.sys.wakayama-u.ac.jp/~tokoi/?date=20040917 ここをみるとS,TがテクスチャファイルのX,Y方向なのかなというのは想像できます。 しかし、別のサイトを見ると二次元のテクスチャを使っているのにS,T,Q,Rを全て定義、即ち四次元の座標を定義している理由が理解できないのです。 何故二次元のテクスチャを使うのに四次元のパラメータが必要なのか、Q,Rはどういう座標系なのか、ここのところがどうしても分からないでおります。 お手数ですが、よろしくお願い致します。