2016-04-26 7 views
1

OPENGLライブラリを使用しているC++アプリケーションに3D画像(心臓部)を表示する必要があります。私はいくつかの2次元カットハート画像を持っています。最初に、それらのイメージを私のプロジェクトにインポートします。しかし、私は次に何をすべきか分かりません。C++ 2次元ビットマップを3Dに変換するC++およびOPENGLライブラリ

これらを理解するための最初の私のイメージの

enter image description here

enter image description here

+2

深度情報がなければ、重要な第3次元を欠場するので、2次元画像を3次元画像にすることは決してできません。あなたができることは、画像をテクスチャとしてシンプルなキューブを作成することです。 –

+0

ご意見ありがとうございます。画像内の領域の境界を見つけ(エッジ検出)、Vector(XとY)に座標を入れて、別のZ軸上の各ピクチャのGL_pointを描画します。私はイメージのスケルトンを作成しましたが、3Dオブジェクトではありません。 –

+0

そして、私はそれらを積み重ねるでしょう...私のアルゴリズムは正しいとは思わない –

答えて

0

あり、これはOpenGLの初心者のための最も重要なものの中では、次のとおりです。OpenGLはちょうど点、線および三角形を描画し、それでおしまい。これは魔法のグラフィックスライブラリではありません。これの欠点は、結果を得るために多少の努力が必要だということです。あなたの創造性に限りがあります。

あなたの場合は、断層像(スライス画像)が見えますが、超音波(超音波)画像です。このような画像は、本質的に、位置ごとの「濃度」の表現であり、ボリュームデータを定義する。 OpenGL自体は、それをどうするかを「知っている」わけではありません。 3D画像フォーマットがありますが、三角形を描くときには、これを「スライス」します。

しかし、(これは重要な "but"です)、描画するものと配置する場所を示す「シェーダ」と呼ばれるOpenGLプログラムを与えることができます。このプログラムでは、この種の画像スタックを素敵なビューに変えることができるボリュームレイキャスターを実装することができます。

このようなレイキャスターをゼロから実装する方法を説明していますが、実際の画像に対するOpenGLの知識がゼロであることは単にStackOverflowの範囲外です。それは単純に広いです。さまざまなチュートリアルがあります(いくつかのオープンソース)

私が管理しているボリュームレイキャスターライブラリは、さまざまなOpenGLバージョンプロファイルとGPU機能をカバーする約2500行のコードで構成されていますターゲットプロファイルと一致するようにシェーダコード生成の大部分)。あなたが特定のOpenGLの帽子のセットに自分自身を制限するなら、それはおそらく約1000行のコードを取るでしょう。

+0

ご回答いただきありがとうございますdarewolf。私はまだOpenGlを使って作れたらいいですか?私はまた、そのLibを使った短いチュートリアルを見つけました。http://www.icare3d.org/codes-and-projects/codes/opengl_geometry_shader_marching_cubes.html ...私はそれを理解しようとしますが、確かに私は他の質問をします。 –

+0

@AnhNguyen:Marching Cube(またはMarching Tetraedra)は、濃度画像からサーフェスを抽出する方法です。経験から、あなたがそこにあるイメージのようなイメージの場合、良いイメージを生成することはほとんどありません。代わりに直接ボリュームレンダラ(ボリュームラスタライザ)を実装するだけです。あなたのような入力データに直面したときに、そのように生成された画像ははるかに良く、忠実度が高くなります。 GLSL(OpenGLシェーダ言語)を使用してそれを行う方法を説明する素敵なページです:http://www.cabiatl.com/mricro/raycast/ – datenwolf

関連する問題