OPENGLライブラリを使用しているC++アプリケーションに3D画像(心臓部)を表示する必要があります。私はいくつかの2次元カットハート画像を持っています。最初に、それらのイメージを私のプロジェクトにインポートします。しかし、私は次に何をすべきか分かりません。C++ 2次元ビットマップを3Dに変換するC++およびOPENGLライブラリ
これらを理解するための最初の私のイメージの
OPENGLライブラリを使用しているC++アプリケーションに3D画像(心臓部)を表示する必要があります。私はいくつかの2次元カットハート画像を持っています。最初に、それらのイメージを私のプロジェクトにインポートします。しかし、私は次に何をすべきか分かりません。C++ 2次元ビットマップを3Dに変換するC++およびOPENGLライブラリ
これらを理解するための最初の私のイメージの
あり、これはOpenGLの初心者のための最も重要なものの中では、次のとおりです。OpenGLはちょうど点、線および三角形を描画し、それでおしまい。これは魔法のグラフィックスライブラリではありません。これの欠点は、結果を得るために多少の努力が必要だということです。あなたの創造性に限りがあります。
あなたの場合は、断層像(スライス画像)が見えますが、超音波(超音波)画像です。このような画像は、本質的に、位置ごとの「濃度」の表現であり、ボリュームデータを定義する。 OpenGL自体は、それをどうするかを「知っている」わけではありません。 3D画像フォーマットがありますが、三角形を描くときには、これを「スライス」します。
しかし、(これは重要な "but"です)、描画するものと配置する場所を示す「シェーダ」と呼ばれるOpenGLプログラムを与えることができます。このプログラムでは、この種の画像スタックを素敵なビューに変えることができるボリュームレイキャスターを実装することができます。
このようなレイキャスターをゼロから実装する方法を説明していますが、実際の画像に対するOpenGLの知識がゼロであることは単にStackOverflowの範囲外です。それは単純に広いです。さまざまなチュートリアルがあります(いくつかのオープンソース)
私が管理しているボリュームレイキャスターライブラリは、さまざまなOpenGLバージョンプロファイルとGPU機能をカバーする約2500行のコードで構成されていますターゲットプロファイルと一致するようにシェーダコード生成の大部分)。あなたが特定のOpenGLの帽子のセットに自分自身を制限するなら、それはおそらく約1000行のコードを取るでしょう。
ご回答いただきありがとうございますdarewolf。私はまだOpenGlを使って作れたらいいですか?私はまた、そのLibを使った短いチュートリアルを見つけました。http://www.icare3d.org/codes-and-projects/codes/opengl_geometry_shader_marching_cubes.html ...私はそれを理解しようとしますが、確かに私は他の質問をします。 –
@AnhNguyen:Marching Cube(またはMarching Tetraedra)は、濃度画像からサーフェスを抽出する方法です。経験から、あなたがそこにあるイメージのようなイメージの場合、良いイメージを生成することはほとんどありません。代わりに直接ボリュームレンダラ(ボリュームラスタライザ)を実装するだけです。あなたのような入力データに直面したときに、そのように生成された画像ははるかに良く、忠実度が高くなります。 GLSL(OpenGLシェーダ言語)を使用してそれを行う方法を説明する素敵なページです:http://www.cabiatl.com/mricro/raycast/ – datenwolf
深度情報がなければ、重要な第3次元を欠場するので、2次元画像を3次元画像にすることは決してできません。あなたができることは、画像をテクスチャとしてシンプルなキューブを作成することです。 –
ご意見ありがとうございます。画像内の領域の境界を見つけ(エッジ検出)、Vector(XとY)に座標を入れて、別のZ軸上の各ピクチャのGL_pointを描画します。私はイメージのスケルトンを作成しましたが、3Dオブジェクトではありません。 –
そして、私はそれらを積み重ねるでしょう...私のアルゴリズムは正しいとは思わない –