yTakeです。3次元プログラムでご教授願えればと思います。
互いに直交する3軸を描画します。これらの交点を原点(0,0,0)とし、原点を中心として半透明な球面を描画したいと思います。
また、原点から任意の座標(x、y、z)へ直線を引きます。
更に、マウスで画面をドラッグすると画像が回転する様にしたいと思います。
3次元を描画させたいと思い新規作成で”FireMonkeyデスクトップアプリケーション”から”3D FireMonkeyアプリケーション”を選択しました。
このFormに、直交座標系として"Model3D"を、半透明球様に"Sphere"を配置しました。
"Sphere"は"Model3D"に階層下に置いています。
Model3Dの座標軸を可視化できれば良い様に思いますが、その様な設定(プロパティ)は無い様です。
また、Sphereも色は付けられますが、半透明と言った設定が分かりません。
また、任意の座標への直線も引けていません。
コンポーネントの"Shape"に線分のオブジェクトがありますが、二次元用の様です。
マウスのドラッグで回転させるところは、MouseのDownとUpでフラッグをオンオフし、MouseDownの状態の時だけ、MouseMoveで"RotationAngle"のX, Y, Zを変更すれば回転しました。
但し、回転軸は3つありますが、MouseMoveの変数は2つしかありません。
どの様に割り振れば良いのでしょう?
そもそもコンポーネントの使い方がよく分かりません。
参考になる様なwebページも見つけきれていません。
それほど複雑な事を目指している分けでないと思いますが、思いの他、行き詰まっています。
アドバイス頂ければと思います。
当方:
32ビットWindows10Pro
DELPHI XE6
です。
自己レスです。
DEKOさんのページで参考になりました。(ありがとうございます)
半透明化は、SphereのOpacityを1〜0の間の数値にする事で実現できました。
引き続き色々検討を続けてみます。
yTakeです。
DELPHIの3D入門的な動画がありました。
それを参考に、3軸上に矢印を配置する事で実現できました。
矢印は、"Cylinder"の先に"Corn"を配置してみました。
また、3D用のフォームを用いなくても、HDのプロジェクトで"ViewPort3D"を配置すればその中で3Dを描画できる事も良く分かりました。
半透明の球面につきましては、先に報告の通りです。
直交3軸の矢印は固定なので、オブジェクトを配置する事でOKでした。
任意の座標位置(x,y,z)への直線が残った問題です。
VCLの場合の"LineTo"の三次元版の様なものがあればと思いますが、
そうはいかないのでしょうか?
>Model3Dの座標軸を可視化できれば良い様に思いますが、その様な設定(プロパティ)は無い様です。
>任意の座標位置(x,y,z)への直線が残った問題です。
TGird3D( あるいは TPath3D )を利用してはどうでしょう?
お望みの効果が得られるかは判りませんが、
TModel3Dの子として貼り付ければ、あるいは(汗
ハズしてたらすみません。
KONさん
ありがとうございます。
TGrid3Dは別の目的で使っていました。
改めて、Methodをみてみましたが、空間内の2点を線で繋ぐ様な手続きはみつかりません。
TPath3Dもみてみましたが、同様にみつかりません。
VCLの場合の"LineTo"の様に2点を直線で繋ぐ手続きで実現できるという見込みが間違っているでしょうか?
そうでなければ、2点間の中点位置に長さが2転換距離の細い円柱を配置するという事になりそうです。難点は、向きでしょうか?
検討してみます。
2点間を線で繋げれば良いのですが、、、
3DViewPortでは、何かを描くというよりは3Dオブジェクトを置く場所という
認識でしたので、VCLのLineToの様な事は出来ないのかも知れません。
FireMonkeyの[Shapes]一覧を見てみましたが、線はありませんね。
全て3Dのオブジェクトです。
もっと低レベルな所を触って自力で描く方法があるのかも知れませんが、
出来るなら各プラットフォームに対応しているDelphi標準のコンポーネントを
利用する方が望ましいです。
お力になれず申し訳ありません。
KONさん、ありがとうございます。
3DViewPortが3Dオブジェクトの配置場所に特化していて、描画は出来ないと言う事で理解しました。
ご指摘の様に、Cylinderオブジェクトが間に配置して、向きを合わせると言う手順で何とかなりそうです。
ありがとうございました。
ツイート | ![]() |