13

OpenGLを使用してレンダラーを作成しています。Blender / Sketchupにテクスチャモデルがあり(2つを簡単に交換できます)、それらのファイルをレンダラーにエクスポートできるようにしたいと思います。私の最初のアイデアは、生の面をエクスポートしてそれらの三角形をレンダリングすることでしたが、テクスチャファイルもテクスチャ座標に簡単にスライスしたいと思います。

つまり、モデルの面が三角形に刻まれているということです。この画像(下に再現)では、私の曲線が24個の三角形になっていることがわかります。各三角形に使用するテクスチャ座標を知りたいのですが。

多角形の湾曲した3Dオブジェクト

DAEファイルはそれを行う最も簡単な方法でしょうか?私はフォーマットの仕様を読んでいますが、それは十分に簡単に見えます。XMLを解析し、OpenGLでモデルを忠実に再作成できたと思います。もっと簡単な方法(つまり、車輪の再発明をしない方法)があるかどうか疑問に思います。

4

6 に答える 6

12

.dae形式の解析に慣れている場合は、必ずそれを使用してください。ただし、テクスチャ三角形メッシュのエクスポートのみに関心がある場合は、解析がはるかに簡単な.obj形式の使用を検討します。私が知る限り、SketchupとBlenderの両方がこのフォーマットをエクスポートできます。

于 2009-12-01T10:14:27.493 に答える
5

バイナリ形式で怖がらない場合は、Blender&Sketchupプラグインを作成し、事前にベイク処理されたジオメトリをパックされた頂点配列にエクスポートすることをお勧めします。

この方法のすばらしい点は、アプリに解析や型変換がないことです。すべてが単純な連続メモリコピーでGPUに送信される準備ができています。静的ジオメトリに最適です。

簡素化されたブレンダーエクスポーターは次のようになります。


#!BPY
import bpy, struct
from Blender import *

self.fh = open("MyFileName", "w")
m = bpy.data.meshes["MyMeshName"]
faces = m.faces
for face in faces:
    for (vertex, uv) in zip(face.verts, face.uv):
        self.fh.write(struct.pack('<fff', *vertex.co)) # coords
        self.fh.write(struct.pack('<fff', *vertex.no)) # normals
        self.fh.write(struct.pack('<ff',  uv.x, uv.y)) # uvs

self.fh.close()
于 2009-12-09T23:02:39.297 に答える
2

ファイルを解析したい場合は、 Colladaパーサー .daeを調べることをお勧めします。は実際にはColladaファイルの拡張機能であり、3Dデータ交換用の単一の統合ファイル形式を持つためのKhronosグループ(OpenGLのメンテナー)による最新の取り組みです。.dae

既存のパーサーに関しては、これが私が遭遇したものです:

  • collada-dom、リファレンス実装。名前が示すように、これはXMLツリーの単なる抽象化です。
  • FCollada、より良い抽象化。ただし、このプロジェクトは2年近く経過しており、私が収集したことから、将来的に更新が行われる可能性はほとんどありません。
  • OpenCollada、最近の新しい取り組み。まだ試していませんが、その背後には活発なコミュニティがあります。

そうは言っても、頂点、法線、テクスチャ座標を含む単純なジオメトリをロードすることが唯一の目標である場合は、.objファイル形式を使用する方が簡単な場合があります。

于 2009-12-01T22:33:02.693 に答える
1

モデリングプログラム(BlenderやSketchupなど)で使用される適切なファイル形式には、表示されるジオメトリを再作成するために必要なすべての情報が含まれます。これには、ジオメトリタイプ(三角ストリップ、個々の三角形など)、ジオメトリの頂点と法線、使用されるマテリアルプロパティ、および適切なテクスチャ座標とともに使用されるテクスチャが含まれている必要があります。潜在的なファイル形式に欠けているものがある場合は、別の形式を選択してください。

XMLの解析が簡単だと思う場合は、expat、Xerces、またはその他の言語固有の実装など、既存のライブラリを使用してこれを行うことを計画していることを願っています。

インポート/エクスポートを検討するときは、最初に、インポートを処理できるオープンソースライブラリを見つけて、データを適切な形式でプログラムで利用できるようにしてください。それが利用できず、独自のインポーターを作成する必要がある場合は、ニーズに合った単純なASCII( XMLベースではない)またはバイナリ形式を見つけてください。PLYが適している可能性があります。最後の手段としてのみ、XMLベースの形式のインポーターを実装することをお勧めします。

于 2009-12-01T10:11:59.063 に答える
1

Lib3DS- http ://www.lib3ds.org/ LibOBJ(リンクを投稿させません)もあります

于 2009-12-11T00:29:53.543 に答える
0

あなたは一見する必要があります:

http://sketchup.google.com/community/developers.html

SketchUpチームは、C++COMサーバーを無料で提供しています。これを使用すると、.skpファイルに関する多くの情報にアクセスできます。

このCOMサーバーを使用して、アプリケーションの.skpインポーターを作成できるはずです。

可能であれば、.tlbファイルを取得してみてください。これにより、スマートポインターにアクセスできるようになり、インポーター(COMクライアント)が簡素化されます。

バージョン6のSDK(tlbファイルを含む)を使用しました。SDKの現在のバージョンには、このファイルが含まれていないようです。

誰かが開発者フォーラムに(不足しているtlbファイルの)解決策を投稿しました:http: //groups.google.com/group/su-sdk-fileshare/topics

于 2009-12-07T22:48:11.717 に答える