問題タブ [assimp]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - ポインターを使用してインポーターのクリーンアップを支援する
Assimp でいくつかのアニメーション ファイルをインポートし、それらを既存のアニメーションのリストに追加しようとしています。ただし、関数が返されたときに、新しい aiAnimation オブジェクトの mChannels ポインターが無効であるという点で、aiAnimation->mChannels (タイプ aiNodeAnim**) に問題があります。これは、Assimp のインポーターが破棄されると、それ自体がクリーンアップされるためです。必要なのは、インポーターが範囲外になったときにチャネルが削除されないようにチャネルをコピーすることです。
これは私のアニメーション追加関数であり、期待どおりに更新されますが、関数から戻るときに「Engine.exe がブレークポイントをトリガーしました」というランタイム例外が発生します。
import - Assimp と MeshLab Wavefront オブジェクト (.obj) のインポート
Assimp ライブラリを使用して Wavefront オブジェクト ファイル (.obj) をインポートすると、特定の頂点が 2 倍になるのはなぜだろうと思っていたのですが、Assimp SourceForge のディスカッション ( http://sourceforge.net/p/assimp/discussion/ ) で次の回答を見つけました。 817654/スレッド/026e9640/?limit=25#ba6c ):
次のことを想像してください: ある範囲の頂点をグラフィックス カードにアップロードします。次に、インデックス バッファーを介して GPU に、頂点 3、6、および 7 によって形成される最初の三角形を指示します。2 番目の三角形は、1、2、および 6 です。何が起こるでしょうか? GPU は立方体を描画しますが、立方体の各コーナーは同じ UV データ、法線ベクトル、頂点カラー、またはメッシュが必要とするその他のものを共有します。
では、どのように立方体のコーナーを取得し、そのコーナーに接するすべての面で異なる UV マッピングを取得するのでしょうか? GPU に「頂点 3 を使用するように指示することはできませんが、その頂点の UV 座標の代わりに UV 座標を使用してください」。GPU はこれを行うことができません。そのため、そのコーナーで頂点を複製する必要があります。同じ位置に 2 つの頂点がありますが、UV 座標は異なります。
それがAssimpがあなたのためにしていることです。JoinIdenticalVertices を指定すると、24 個の頂点を持つ立方体が得られます。なんで?立方体には 8 つの角がありますが、各角には 3 つの立方体の側面が接触しており、その角のそれぞれに異なる UV 座標が設定されているため、各角の 3 つのバージョンになります。JoinIdenticalVertices を指定しない場合、再利用のない単純な頂点の配列が得られます。つまり、立方体の各辺にそれぞれ 3 つの頂点を持つ 2 つの三角形が必要で、最終的に 36 の頂点になります。
別の方法として、3D uv 座標とキューブ マップを使用して、そのキューブをテクスチャリングすることもできます。これはキューブに対してのみ機能する特殊なケースですが、キューブでも機能します。GPU は内部で 6 つのテクスチャへのマッピングを行います。上記の説明は一般的なケースであり、遭遇する可能性のあるすべてのメッシュでこのように機能します。
それは理にかなっています。
MeshLab が .obj インポート操作をどのように処理するかわからないことを前提として、私が見つけた答えが正しければ、そのようなオブジェクトをインポートしたときに頂点カウンターが増加しないのはなぜですか? 法線/接線/UV がある場合に、頂点を分割せずに .obj ファイルをインポートする方法はありますか?
makefile - MinGW を使用した Assimp のビルド
だから、私は何時間も mingw で Assim を構築しようとしています。mingw を再インストールし、assimp も再ダウンロードしましたが、エラーが発生し続けます。
CMake で、プロジェクトのジェネレーターに MinGW Makefiles を選択し、ラジオ ボックスでデフォルトのネイティブ コンパイラを使用することから始めます。2) その後、次のエラーが表示されます。
ディレクトリ C:/MinGW/mingw32 の名前を別の名前に変更することで、これを機能させることができました。
名前を変更した後、プロセスを再度開始します。プロセスでエラーが発生しないため、正常に動作しているようです。問題は、構成プロセスで次のメッセージが表示されることです。
だから、それが問題かどうかはわかりません。これを無視してファイルを生成します。
ここで、Windows Power Shell を使用して、Makefile が配置されているフォルダー ....assimp-3.1.1/build に入り、次のコマンドを実行します。
ビルドが開始され、しばらくすると次のエラー メッセージが表示されます。
私は Visual Studio で assimp を使用していましたが、別の IDE に変更する必要があり、今では完全に失われています。
opengl - シンプルな好奇心 波面資源素材フォーマット
「Assimp」ライブラリを統合して、OBJ/MTL ファイル コンポーネントをロードしました。
すべて正常に動作します。
しかし、次の MTL ファイルの例に注目してみましょう。
そして、次のコードを調べてみましょう。
出力は次のとおりです。
ご覧のとおり、すべてが完全に機能し、キーワード「map_Ka、map_Kd、map_Ks、および map_Bump」は、それぞれアンビエント、ディフューズ、スペキュラー、およびバンプ (高さ) マップを参照しています。したがって、これらのキーワードは正しいです。
しかし、たとえば法線テクスチャ (法線マッピング用) とディスプレイスメント テクスチャ (ディスプレイスメント マッピング用) はどうでしょうか?
テストするために、MTL ファイルに次の行を追加しようとしました。
コードを使用して:
そして出力:
そのため、キーワード「map_Normal」と「map_Disp」は正しくないため、Wavefront MTL ドキュメントには含まれていません。
WaveFront MTL 形式に関する正しい公式ドキュメントを見つけることができませんでした (Wikipedia またはチュートリアルにあるものだけが公式で完全なものではありません)。
すべてのキーワードが説明されている Wavefront MTL および OBJ 形式に関する公式ドキュメントは存在しますか?
そうでない場合、法線テクスチャとディスプレイスメント テクスチャのキーワードを知っている人はいますか?
c++ - .obj のインポート時に未処理の例外をアサップする
私は過去 2 週間、Assimp を正しく動作させようとしてきましたが、うまくいきませんでした。スタティック メッシュのインポートに関する thecplusplusguy のチュートリアルに従い、それを機能させるために単語ごとにコピーしました。
.obj (問題がある場合はキューブ) をインポートしようとすると、「OpenGL.exe の 0x00EF061B で未処理の例外: 0xC0000005: アクセス違反の読み取り場所 0xABABAFFB」が発生し、プログラムが停止し、オンラインであることが通知されます。私のコードの 30 ( "for(int i=0; imNumMeshes; i++)" )。
デバッグするために couts を追加すると、"scene->mNumMeshes" は 1 を返します (これは 1 つのキューブなので、そうあるべきです) が、"node->mNumMeshes" は 0 を返します。
ヌルポインタがあるとハンドルされない例外が発生すること、ここでのヌルポインタが「node->mNumMeshes」であることは理解していますが、なぜヌルなのですか? そして、どうすればこれを修正できますか?
visual-studio-2013 - Cmake と VS2013 を使用した Assimp の静的ビルド: assimpd.pdb が見つかりません
Windows で Assimp を静的にビルドして、後でスタンドアロンの実行可能ファイルを作成しようとしています。これが私がしたことです:
- 3.1.1 バージョンをダウンロードし、Cmake GUI を使用しました。
- BUILD_SHARED_LIBS のチェックを外し、ASSIMP_BUILD_STATIC_LIB をチェックしました
- 構成と生成をクリックしました
- 管理者モードで Visual Studio 2013 を使用してソリューションを開きました
- ALL_BUILD を右クリックしてビルド
この時点で、すべてが正常に機能しました。次に、INSTALL(右クリック>ビルド)をビルドしようとしましたが、次のエラーで失敗しました:
2 つの質問があります。
- 静的ビルドのみが必要なため、実際に INSTALL をビルドする必要がありますか?
- はいの場合、何が間違っていましたか/これを修正するにはどうすればよいですか?
お時間をいただきありがとうございました!
PS: ディレクトリ Debug を確認したところ、assimpd.lib しかありません。
c++ - Dev IL リンクおよびコンパイル エラー (0xc000007b)
このプロジェクトを機能させようとしていますLighthouse へのリンク
最初にたくさんの情報:
私が使用している: Windows 7 Pro 64 ビットおよび Visual Studio 2013 Ultimate
(32 ビットであると思われるデフォルト設定でのプロジェクト)
ライブラリについて:
DevIL: 32 ビット Windows 用の DevIL 1.7.8 SDK をダウンロードしてインストールしました
Assimp: assimp--3.0.1270-sdk
プロジェクト設定:
プラットフォーム:アクティブ (Win32)
構成:すべての構成
ライブラリ ディレクトリ:
C:\assimp--3.0.1270-sdk\lib\assimp_release-dll_win32;C:\DevIL\lib
インクルード ディレクトリ:
C:\assimp--3.0 .1270-sdk\include;C:\DevIL\include
ライブラリ ディレクトリ:
C:\assimp--3.0.1270-sdk\lib\assimp_release-dll_win32;C:\DevIL\lib
C/C++ -> 一般 -> 追加のインクルードディレクトリ:
C:\assimp--3.0.1270-sdk\include;C:\DevIL\include
リンカー -> 入力 -> 追加の依存関係:
%(AdditionalDependencies)
OK、プロジェクトをコンパイルすると、次のエラーが表示されます。
コード行をコメントアウトすることで(デバッグできません)、エラーが発生する場所を見つけました:
ここで何が起こっているか知っている人はいますか?どうすればこれを解決できますか?
このコードの一部を使用して、OpenGL 3.3 プロジェクトで 3D *.OBJ モデルをレンダリングしたいと考えています。
必要な場合は、ここに私のデバッグ ログを示します。
c++ - assimp を使用して MTL カラーをロードする
ASSIMPを使用してWavefront objモデルを読み込もうとしています。ただし、mtl マテリアルの色が機能しません。ロード方法は知っていますが、各頂点に対応する色を取得する方法がわかりません。(Kd rgb)
たとえば、上記の Wavefront obj スニペットは、これらの頂点が material_11 を使用することを意味します。
Q:各頂点に対応するマテリアルを取得するにはどうすればよいですか?
エラー
Wavefront objマテリアルが正しい頂点にありません:
元のモデル (ASSIMP モデル ビューアーでレンダリング):
私のコードでレンダリングされたモデル:
コード:
mtl マテリアルの色をロードするために使用するコード:
頂点を作成するコード:
編集:
モデルの頂点の位置も正しく読み込まれていないようです。顔カリングを無効にして背景色を変更しても。