任意の3D表面データの描画(FMX)

解決


yTake  2018-11-27 05:26:53  No: 49614

yTakeです。

任意の3D表面データを半透明に描画したいと思います。
球や円筒などの規定の形状ではなく、例えばCT等の各スライス面内の輪郭形状を積層してその表面形状を半透明に描画します。

TViewport3DにTModel3Dを載せて、そこに描画しようと思いましたが、描画ルーチンが見当たりません。

VCLの時の様な、描画対象である”canvas”的な物はあるのでしょうか?
先ず、"Polygon3D"の様な多角形描画ルーチンを用いれば輪切り上の描画を目指し、その後に輪切りの輪郭同士を繋ぐとワイヤーフレーム的な描画になりそうなのですが、、、
任意の多角形の描画の仕方をアドバイス頂ければと思います。

或いは、そもそも、TViewportやTModel3Dで任意の3D輪郭を描画する事は可能なのでしょうか?
別の実現方法がある様であれば、ご教示願いたく思います。

当方:
DELPHI XE6(FMX)
32bit Windows10
です。


yTake  2018-11-27 17:35:25  No: 49615

yTakeです。

すみません。過去の自分の本欄への問い合わせでTViewport3Dでは任意描画できない事をご教授頂いていました。同じ質問になってしまいました。申し訳ありません。

データは三次元座標データの配列の繰り返しで、
一つのグループが、
1:(x00、y00、z00),(x01、y01、z01),(x02、y02、z03)・・・(x0n、y0n、z0n)
で、これが繰り返しで、
2:(x10、y10、z10),(x11、y11、z11),(x12、y12、z13)・・・(x1n、y1n、z1n)
        ・
        ・
        ・
m:(xm0、ym0、zm0),(xm1、ym1、zm1),(xm2、ym2、zm3)・・・(xmn、ymn、zmn)
となっています。
ここで、各グループにおいて例えばz座標においてzi0〜zinまでが同じ座標であれば単一平面を示し、他のx,y座標で閉じた多角形を描画すると輪郭になります。
これをグループの数だけ繰り返すと輪切りデータが積層されそれらを繋げる?と3D表面描画となる様に考えています。

DELPHI XE6のFMXで出来ないとも思えません。

もう少し調査・試行錯誤してみます。

ご助言があればよろしくお願いします。


yTake  2018-11-30 05:04:09  No: 49616

少しトライアンドエラーを繰り返してみました。
DEKOさんらのページでTImage3DがBitmapを内包している点が分かり試してみました。
DrawLineで直線を引いてみたのですが、何も表示されません。
試しにTImageを配置してそのBitmapへ同様にDrawLineしてみましたが、直線が引かれました。DrawLineの使い方やBitmapへの描画方法(BeginScene/EndSceneで挟む)などは間違っていない様に思えます。

そもそも、TImage3Dをフォーム上に配置してもそのオブジェクトが見えません。
IDEウィンドゥの構造のところにはツリー構造にImage3D1としてみつかります。通常のオブジェクトはツリー構造上で選択するとフォーム画面上でそのオブジェクトが選択表示されますが、Image3D1は見つかりません。
TImage3Dとはその様なものなのでしょうか?

このままトライアンドエラーを続けるべきか判断しかねています。

アドバイス頂ければ幸いです。


通りすがり  2018-11-30 19:28:11  No: 49617

FMXの描画関係だと、ここではなく、中山さんか、MVPの細川さんが見ていそうなところ、
例えばDelphi-MLとかFBとかTwitterとかそのあたりで聞くといいと思います…。
あとは
https://www.embarcadero.com/jp/events-japan/tech-lab
こういうところで相談するか…。


yTake  2018-11-30 21:36:49  No: 49618

通りすがりさん
ありがとうございます。

そうなんですね。

そちらも参考にしてみます。


AAA  2018-12-01 08:11:21  No: 49619

3Dアプリケーションのフォーム

  TForm1 = class(TForm3D)

でやってる?


yTake  2018-12-07 01:46:04  No: 49620

AAAさん、閉じてしまったところでスミマセン。

FireMonkeyデスクトップアプリケーションの”HD FireMonkeyアプリケーション”を選択していました。
以前もこれで球やシリンダー等を3D表示する事が出来ていたもので、、、

  TForm1 = class(TForm)

となっています。


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加