0

私は iOS 用の Qualcomm 拡張現実 FrameMarkers デモで作業しており、私たちの 3D 担当者から提供されたモデルに切り替えました (実際、彼は 3D に手を出す 2D 担当者です。これが、私がこれを解決しようとしている理由です3D エンドではなく、コードエンド)。問題はテクスチャリングに関するものです。デモでは、2D イメージ テクスチャが 3D モデルにバインドされていることを前提としています。しかし、私たちの 3D 担当者はテクスチャリングをオブジェクト自体に組み込みました (プロシージャル テクスチャリングなど)。

当初、オブジェクトは完全に黒く塗りつぶされており、詳細はまったく見えませんでした。これらの行をデモから削除することで、これを少し改善することができました。

glActiveTexture(GL_TEXTURE0);

glBindTexture(GL_TEXTURE_2D, [obj3D.texture textureID]);

これにより、すべてが滑らかな色になり、一部の表面の詳細と一部の反射が見えるようになりました(実際には、純粋に反射するのではなく、場所によっては半透明であるはずです-それも問題です..)。

半透明性を実現するには、これらのコマンドが必要であるといくつかの場所で読みました。

glEnable(GL_BLEND);

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

ただし、私にとっては、画面全体が黒くなるだけです..

正しい: 正しいレンダリング

アプリ内: アプリ内レンダリング

4

1 に答える 1

0

スクリーンショットのおかげで、あなたのデザイナーが顔に適切なマテリアルを割り当てていると推測できます — おそらく OBJ ファイルと一緒に .MTL ファイルがあり、 , and などで始まる多くの行が含まれていますが、そうKaではKdありNsませんあらゆるテクスチャリングを適用しました。から理解できることからobj2opengl、スクリプトはビデオ ゲーム スタイルのプレゼンテーションを想定しています。一部の実装では、サーフェスに指定されたカラー プロパティが破棄され、テクスチャリングのみが適用されます。

したがって、技術的には、テクスチャリングを無効にするのは正しいことですが、ES 1.x を使用している場合におそらく追加したいのはglMaterial、スクリプトが保持していないように見えるデータを使用して、どこかで大量の呼び出しを行うことです。または、ES 2.x の場合、古典的なアンビエント + ディフューズ + スペキュラー ライティング モデルをエミュレートするシェーダーが必要になります。iOS では、適切に指定さGLKEffectPropertyMaterialれた を関連するGLKBaseEffect.

透明性のために、私の最善の推測は、拡張現実ライブラリが3Dと2Dを合成するために必要な状態を正しく設定していないということです。代わりに、それを保持すると仮定しています。だからあなたはそれを調べる必要があります。

どのようなソリューションをお探しですか? これから任意のモデルに適応できるものが欲しいですか、それともこのモデルをアプリに取り込んでから他のものに取り掛かるだけの問題ですか?

前者の場合は、おそらく他のツールチェーンを見つける必要があります。私はOBJパーサーの書き込み、実行時の解析のような人であり、GLKit用に自分のものを更新したことがないため、アドバイスできません。

後者の場合、最も簡単な方法は、モデルをマテリアルごとに分割し、各コンポーネントを個別にエクスポートすることです (3D エディターでそれができることを願っています)。次に、関連する係数を手動で入力し (それほど多くはありません)、適切な順序で描画します。 (透明度はおそらく最後です。それ以外の場合は、それほど重要ではありません)。

編集: 記録のために、人々が手続き型テクスチャと言うとき、彼らが一般的に意味するのはf(texture position)、たとえば、ポリゴンの表面全体で評価すると大理石のように見えるものを生成する式を与えるようなものです. うまくいけば、それをさらにパラメータ化および/または定義して、ズームインおよびズームインして詳細を取得できるようにする方法を見つけることができます。したがって、これは、柔軟性と、できれば詳細の利点を備えたビットマップに入れる 2D イメージを生成する関数です。

于 2013-04-15T22:51:13.907 に答える