トップページ > 過去ログ > 記事閲覧
テクスチャー座標の処理
名前:バトーキン 日時: 2009/09/25 13:21

DXライブラリを使って、3Dに挑戦を始めました。 非常に使いやすくてありがたいです。 ttp://www.nicovideo.jp/watch/sm8331341 さて、テクスチャー座標を操作する所で、行き詰まってしまいました。 ttp://msdn.microsoft.com/ja-jp/library/bb206245(VS.85).aspx テクスチャーの位置をずらして、アニメーションのようなことをしたいのですが、 貼りつける座標や拡大縮小率など、設定する方法をさがしています。 MV1SetTextureGraphHandle() での、テクスチャの張り替えは試しました。

Page: 1 |

Re: テクスチャー座標の処理 ( No.1 )
名前:管理人 日時:2009/09/26 17:38

動画拝見しました、凄いです まだ自分では広いステージを表示したことが無かったので開放感のあるステージが新鮮でした 動画の中で触れられていますMMD形式についてはつい最近その存在を知りました PMD形式の読み込みに対応してもデフォルトポーズのキャラクターが表示できるだけなので、 フォーマットが公開されていないMMD形式、若しくは最低でもVMD形式を読み込めないと意味が無いみたいですね・・・ MMD関連は今日少し調べてみた程度なのですが、モデリングソフト界でいうところのメタセコイアのような 存在になりつつあるのでしょうか? あと、すいません、現在公開されているバージョンにはテクスチャ座標を操作する機能はありません なのでその機能を実装したこちらのバージョンをダウンロードしてください m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい) こちらのバージョンでは以下の二つの関数が増えています 解説文はリファレンスマニュアルに記載したものをそのままコピーしたものです // フレームのテクスチャ座標変換パラメータを設定する // int MHandle : モデルのハンドル // int FrameIndex : フレームの番号 // float TransU : テクスチャ座標のU値に加算する値( 初期値 0.0f ) // float TransV : テクスチャ座標のV値に加算する値( 初期値 0.0f ) // float ScaleU : テクスチャ座標のU値に掛ける値( 初期値 1.0f ) // float ScaleV : テクスチャ座標のV値に掛ける値( 初期値 1.0f ) // float RotCenterU : テクスチャ座標の回転中心となるU値( 初期値 0.0f ) // float RotCenterV : テクスチャ座標の回転中心となるV値( 初期値 0.0f ) // float Rotate : テクスチャ座標の回転値( 単位はラジアン )( 初期値 0.0f ) int MV1SetFrameTextureAddressTransform( int MHandle, int FrameIndex, float TransU, float TransV, float ScaleU, float ScaleV, float RotCenterU, float RotCenterV, float Rotate ) ; 解説   MHandle と FrameIndex が示すフレームが直接持っているメッシュを描画する際に、  メッシュのテクスチャ座標に対して行う変換処理のパラメータを設定します。   用途としては、例えばキャラクターの顔のテクスチャに複数の表情を予め描いておいて、  表情を変えたいタイミングでその表情が描かれているテクスチャ座標に TransU と TransV の  引数を使用してメッシュに含まれる頂点のテクスチャ座標をスライドさせて描画される表情を変更する、  などがあります。  尚、各引数の意味は上記の注釈の通りですが、パラメータによる演算が行われる順序は  1.RotCenterU, RotCenterV, Rotate による座標値の回転  2.TransU, TransV を座標値に加算  3.ScaleU, ScaleV による座標値の拡大  となります。  この関数による設定をリセットしたい場合は MV1ResetFrameTextureAddressTransform を使用してください。 // フレームのテクスチャ座標変換パラメータをリセットする // int MHandle : モデルのハンドル // int FrameIndex : フレームの番号 int MV1ResetFrameTextureAddressTransform( int MHandle, int FrameIndex ) ; 解説   関数 MV1SetFrameTextureAddressTransform で設定したテクスチャ座標変換パラメータを初期値にリセットします。  効果的には MV1SetFrameTextureAddressTransform 関数の引数を注釈に「初期値」として記載されている値を渡して  呼んだ場合と同じです。  設定の単位はフレームです  例えばキャラクターの顔部分のフレームが8番だとして、そのフレームに含まれるメッシュのテクスチャ座標を Uを0.5、Vを0.8移動したい場合は MV1SetFrameTextureAddressTransform( ModelHandle, 8, 0.5f, 0.8f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f ) ; という感じにします よろしければお使い下さい
Re: テクスチャー座標の処理 ( No.2 )
名前:バトーキン 日時:2009/09/26 23:20

あああ、対応ありがとうございます! さっそく、テクスチャアニメーションできることを試しました。 すごく手軽にアニメーションが実現できて、ありがたい限りです。 MMDですが、モーションソフトとしてはとても便利なんだと思います。 ただ、ニコニコ動画界隈では有名だと思いますが、 モデリングソフト界のメタセコイア、というには……どうでなんしょうか; ちょっと片寄っている気も。 ユーザー作のモデルやモーションが、活発に公開されているので、 個人的には、ぜひ利用したい物ですが。 モーションの他ソフトへの取り込みについては、 すでに幾人か実現されているようです。 だいたい「VMDConverter」のソースを元にされているようです。 ttp://yumin3123.at.webry.info/200810/article_4.html PMD(モデル) + VMD(モーション) を、 アニメーション付きのXファイルに変換できればなーと、 上記のソースを眺めています。 ### リファレンスの項目「MV1SetTextureGraphHandle()」で、 概略が「モデルで使用されているテクスチャの数を取得する」 となっています。これは正しくは「テクスチャを変更する」でしょうか。
新関数、使用の報告 ( No.3 )
名前:バトーキン 日時:2009/09/28 05:48

MV1SetFrameTextureAddressTransform() を使用して、 色々とテクスチャアニメーションを試しています。 その中で気付いたことを、こちらで報告いたします。 MV1SetMeshUseVertDifColor() と合わせて使うと、 テクスチャが正しく表示されなくなりました。 ・テクスチャの画像色が混ざり合った1色で塗りつぶされたような感じになります。  この時、頂点カラーの方は反映されるようです。 ・テクスチャの移動がまったく発生しない引数で、  MV1SetFrameTextureAddressTransform() を使用した場合は問題なし。  (RotCenterU,V のみの変更など) テストしているソースを以下にアップしました。 PW:[ dxlib ] ttp://www1.axfc.net/uploader/He/so/245836.zip
Re: テクスチャー座標の処理 ( No.4 )
名前:管理人 日時:2009/09/29 09:57

ご報告ありがとうございます アップしていただいたプログラムを実行したところ私の環境でも現象が再現しました 修正したバージョンをアップしましたので、よろしければバトーキンさんの環境でも 正常に表示されるかお試しになってみて下さい m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい)
Re: テクスチャー座標の処理 ( No.5 )
名前:バトーキン 日時:2009/09/29 10:25

いつも素早い対応ありがとうございます。 さっそく新バージョンを試したのですが、 以下のメッセージで、ビルドできませんでした。 1>Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1 1>Copyright (C) Microsoft Corporation. All rights reserved. 1>リンクしています... 1>DxLib_d.lib(DxModel.obj) : error LNK2019: 未解決の外部シンボル "int __cdecl DxLib::MV1LoadModelToPMD(void *,int,char const *,char const *)" (?MV1LoadModelToPMD@DxLib@@YAHPAXHPBD1@Z) が関数 "int __cdecl DxLib::MV1LoadModel(char const *)" (?MV1LoadModel@DxLib@@YAHPBD@Z) で参照されました。 1>D:\mydocument\Visual Studio 2008\Projects\Project1\dxlib_test3\Debug\dxlib_test3.exe : fatal error LNK1120: 外部参照 1 が未解決です。 1>ビルドログは "file://d:\mydocument\Visual Studio 2008\Projects\Project1\dxlib_test3\Debug\BuildLog.htm" に保存されました。 1>dxlib_test3 - エラー 2、警告 2 なんと、すごく期待感のある関数名が!
Re: テクスチャー座標の処理 ( No.6 )
名前:管理人 日時:2009/09/30 08:46

すいません、正常にコンパイルできるものを再度アップしましたので 大変お手数ですがもう一度ダウンロードしてください m(_ _;m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい) 反応が遅くなってしまいましたが、MMDについての考察ありがとうございます モデリングをされる方に比べてモーションまで作成される方はほとんどいらっしゃらなかった 気がするので、今の動きが一般的な趣味3Dモデリングの界隈にも定着するといいですね(^ ^; > なんと、すごく期待感のある関数名が! それは見なかったことに(笑 バトーキンさんがご紹介してくださった VMDConverter や 有志の方々が解明されたフォーマット情報のお陰でPMDは読み込むことができました 現在 PMD + VMD の読み込みに挑戦中です > これは正しくは「テクスチャを変更する」でしょうか。 ありがとうございます、修正しました m(_ _)m
Re: テクスチャー座標の処理 ( No.7 )
名前:バトーキン 日時:2009/09/30 12:36

ありがとうございます! 新しいファイルで、無事にビルドできました。 やりたいと考えていたことが、次々と実現できて感動しています。 素晴らしいです。 そして、一足お先にPMDモデルの読込みも試させて頂きました(笑 ばっちり読込みできました。 この先、モデルに加えてモーションまで 高品質なフリー素材として使えるようになるとか、夢のような時代ですね…… 本当に、プログラムするだけでゲームが作れるようになりそうです。
Re: テクスチャー座標の処理 ( No.8 )
名前:管理人 日時:2009/10/18 12:26

ずいぶんお待たせしてしまいましたが、PMD+VMD読みこみ、一応できるようになりました ただ、MikuMikuDance とはIKの挙動が違い、物理も適応されないという中途半端なものです IKの挙動の違いだけは何とかしようと思ったのですが、時間がかかりそうなので中断しました orz ちなみに VMD は単体では読み込まれません PMD とのファイル名の関係を以下のようにすることで PMD の読みこみ時に自動的に読み込まれます (ファイル名).pmd (ファイル名)(3桁の数字).vmd Miku.pmd Miku000.vmd Miku001.vmd Miku002.vmd Miku003.vmd 飛び番や3桁以外の数字が使われていると読み込まれません <飛び番の例> Miku.pmd Miku000.vmd // 読み込まれる Miku001.vmd // 読み込まれる Miku002.vmd // 読み込まれる Miku004.vmd // 読み込まれない Miku005.vmd // 読み込まれない Miku006.vmd // 読み込まれない Miku007.vmd // 読み込まれない <3桁以外の数字の例> Miku.pmd Miku000.vmd // 読み込まれる Miku001.vmd // 読み込まれる Miku002.vmd // 読み込まれる Miku003.vmd // 読み込まれる Miku4.vmd // 読み込まれない Miku5.vmd // 読み込まれない Miku006.vmd // 読み込まれない よろしければお試し下さい m(_ _)m http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用 http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用 (中身を既存のライブラリのファイルに上書きして、BCCをお使いの 場合は『再構築』、VCをお使いの場合は『リビルド』をして下さい)
Re: テクスチャー座標の処理 ( No.9 )
名前:バトーキン 日時:2009/10/20 00:10

うわー、うわー! 対応が早くてびっくりです。 さっそく試しました。 VMDで見事に動きました、すごいです! これを使って、作成中の自作マップ上を、 歩かせたりしてみます。 またテスト結果など報告させていただきます。 ありがとうございます。いつもお疲れさまです。

Page: 1 |