2009-12-01 21 views
12

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

これは、私のモデルの顔が三角形に刻まれたことを意味します。 this image(下に再現)に、私のカーブが24の三角形になることが分かります。各三角形にどのようなテクスチャ座標を使用するかを知りたい。

Polygonized curved 3D object

DAEファイルには、それを行うための最も簡単な方法だろうか?私はフォーマットの仕様を読んできました。私はXMLを解析し、OpenGLのモデルを忠実に再現できると思います。より簡単な方法(ホイールを再発明しない方法)があるかどうかは疑問です。

+0

はあなたが何を意味するかについて詳しく説明することはできます(私はリンクを投稿させません) Lib3DS

Aはブレンダー輸出国は次のようになりますストリップダウン「テクスチャファイルをテクスチャ座標に簡単にスライスしたいのですが」 –

+0

確かに!元の投稿を編集しました。 – mkenyon

+2

画像のルールに関する質問があるので、私はあなたの追加の自由を取った。 – unwind

答えて

12

.dae形式の解析に問題がなければ、必ず使用してください。しかし、テクスチャ付き三角形メッシュのエクスポートに興味があるのであれば、解析するのがはるかに簡単な.obj formatの使用を検討します。 SketchupとBlenderの両方から、この形式をエクスポートできます。

+0

同じデータを表す簡単な方法のように見えます。私は今夜​​OBJ形式を調べます。 – mkenyon

+1

OBJ(および対応するMTLファイル)が美しく機能していることを知りたい。どうもありがとうございます! – mkenyon

+0

あなたは大歓迎です! –

1

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

XMLを解析するのが簡単だと思うなら、expat、Xercesなどの言語固有の実装など、既存のライブラリを使用してこれを行うことを計画してください。

インポート/エクスポートを検討するときは、まずインポートを処理できるオープンソースライブラリを見つけて、適切な形式でプログラムでデータを利用できるようにしてください。それが利用できない場合は、独自のインポータを作成し、必要に応じた単純なASCII(XMLベースではない)またはバイナリ形式を探してみてください。 PLYが適切かもしれません。最後の手段としてのみ、私はXMLベースのフォーマットのインポータを実装しようと勧めます。

+0

私は以前からウェブアプリケーションを扱ってきました。私は私自身のXML解析をしないことを十分に知っています。それは図書館を通るだろう。 – mkenyon

2

.daeファイルを解析する場合は、Colladaパーサーを調べることをおすすめします。 .daeは実際には、Khronos group(OpenGLの管理者)からの最新の取り組みで、3Dデータ交換のための単一の統一ファイルフォーマットを持つColladaファイルの拡張です。既存のパーサについては

、ここで私が遭遇したものです:

  • collada-dom、リファレンス実装。名前が示すように、それはXMLツリーの抽象です。
  • FCollada、より良い抽象化。しかし、このプロジェクトは約2年間死んでしまいました。私が集めたことから、今後更新が見られることはほとんどありません。
  • OpenCollada、最近の新しい努力。それを試していないが、それの後ろに活動的なコミュニティがあります。あなたの唯一の目標は、迅速な方法であるかもしれない.objファイル形式と一緒に行く、頂点、法線およびテクスチャ座標とジオメトリのシンプルな作品をロードしている場合

ことは、言われています。

+0

OBJファイルが美しく働いていることを知りたい。どうもありがとうございます! – mkenyon

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

5

をバイナリ形式があなたを怖がらない場合、私はブレンダー& 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() 
関連する問題