• 締切済み

3Dグラフィック 多数の球の描画

3次元で多数の球の描画をしたいのですが、何か良い方法はありませんでしょうか? 目の前に、障害物があった場合、その障害物の大きさ、数量の違いでどの程度視野が違うかを視覚的に表したいと考えています。 そのため、X座標、Y座標、Z座標とバブル径の寸法まで統一したいと思っています。 (各座標間隔が示す1とバブルの半径が示す1を見た目で同じサイズにしたいです。) よろしくお願いします。

みんなの回答

  • wek00
  • ベストアンサー率62% (90/145)
回答No.1

やりたいことがはっきりとは分かりません。 視覚的に表して、どうしたいのですか? また、見た目で同じサイズにしたいとのことですが、 遠いと小さく見える現象との兼ね合いはどうするのですか。 広い視野をカバーする場合は画面の枚数を増やすか印刷する かして立体的に配置、といった手法を採らないといけないでしょう。 画面が1枚でそこに表示するだけなら難しくはないと思います。 しかし、それだと大画面でも視野角は90度辺りが限界です。 それで事足りるのでしょうか。 以下、画面1枚に球を描画するVCSSLのサンプルコード(差分のみ。diffで作成) とその実行結果です。VCSSLはドキュメントがよく整備されているのでいいですね。 7a8,11 > import Math; //random > > > // 元ファイル:VCSSL v3.3r18 標準添付のGraphics3DFrameworkTest.vcssl 18c22 < const bool TEST_2D_RENDERING = true; --- > const bool TEST_2D_RENDERING = false; 32c36 < testGetWindowSize(); --- > // testGetWindowSize(); 36c40 < testGetMagnification(); --- > // testGetMagnification(); 55c59 < int axis = newAxisModel(3.0, 3.0, 3.0); --- > int axis = newAxisModel(0.15, 0.15, 0.15); 59,60c63,64 < int cone = newConeModel(1.4, 1.4, 2.0, 20, 14); < moveModel(cone, 2.0, 0.0, -1.0); --- > int cone = newConeModel(0.14, 0.14, 0.2, 20, 14); > moveModel(cone, 0.2, 0.0, -0.1); 66c70 < sphere = newSphereModel(1.4, 1.4, 1.4, 20, 14); --- > sphere = newSphereModel(0.025, 0.025, 0.025, 20, 14); 68d71 < moveModel(sphere, 1.0, 0.0, 0.0); 69a73,85 > > int npcs = 32; > int sphereids[npcs]; > for( int i=0; i<npcs; i=i+1 ){ > sphereids[i] = newSphereModel(0.02, 0.02, 0.02, 10, 7); > setModelColor(sphereids[i], 255, 160, 64, 255); > moveModel(sphereids[i], (random()-0.5)/5, (random()-0.5)/5, (random()-0.5)/5); > mountModel(sphereids[i], renderer); > setModelEmissive( sphereids[i], 0.5 ); > } > setViewLocation( renderer, 0.0, 0.0, 0.5 ); // 視点の初期値は原点の手前0.5にする > setGraphics3DClip( renderer, 0.01, 30000.0 ); // 視点の至近からかなり遠くまで省略せず描画する > 79a96,97 > //視点を移動してみる > rotViewY(renderer, 0.01 ); 143c161,167 < setMagnification(1400.0); --- > setMagnification(0.5 * 100 / 2.54 * 120); //うちのキカイは120dpiだった > // 1 [inch] = 2.54 [cm] > // 1m 先の半径 1mの円は > // d m先のスクリーン上の d mの円と同寸に見える > // n [pixel] 上記の円のサイズをドット数で > // x [dpi] スクリーン解像度(画素密度) > // n / x = d * 100 / 2.54 [inch]

qwertyuiop12345
質問者

お礼

ご回答ありがとうございました。 VCSSLを知らなかったので、非常に参考になりました。 ご質問いただいた >視覚的に表して、どうしたいのですか? について、 障害物をどれだけ取り除けば、もしくは、障害物をどれだけおいても、視界が確保されるかをビジュアル的に説明したかったのです。 視野というか、視界の方が適切な言葉でしょうか? 質問に適切に回答できていないかもしれませんが、上記の目的です。 また、まずはある単位体積のみのビジュアル的な描画だけでもと思っておりますので、ご回答頂いた内容が参考となりました。

関連するQ&A

  • 3つの球の交点

    3次元空間中に座標・半径が既知の球面が3つあり、これらが2点で交わっている時、この2点の座標はどのように表されるのでしょうか? xyz直交座標系で考えるものとし、 3つの球は 1つ目の球:中心の座標(x1, y1, z1), 半径r1 2つ目の球:中心の座標(x2, y2, z2), 半径r2 3つ目の球:中心の座標(x3, y3, z3), 半径r3 で与えられるものとします。 何か参考になるウェブページや資料等をご存知の方、教えていただけませんか?

  • 3次元座標において3つの球の球面上の点が交差する

    3次元座標において3つの球の球面上の点が交差する 座標(x,y,z)を求める。 球1中心座標(x1,y1,z1)半径R1 球2中心座標(x2,y2,z2)半径R2 球3中心座標(x3,y3,z3)半径R3 球の方程式は以下になります。 (x-x1)X(x-x1)+(y-y1)X(y-y1)+(z-z1)X(z-z1)=R1XR1 (x-x2)X(x-x2)+(y-y2)X(y-y2)+(z-z2)X(z-z2)=R2XR2 (x-x3)X(x-x3)+(y-y3)X(y-y3)+(z-z3)X(z-z3)=R3XR3 これはもう地道に解くしかないのでしょうか?平面を使うのだとか 現実世界でアドバイスをもらったのですが一向に解けません… よろしくお願いいたします。

  • 球座標と海洋

    直交曲線座標として、極座標(平面2次元)、円筒座標、球座標というものがあります。地球上の海の現象を表現する上では球座標を用いると思いますが、球座標は地球の中心から表面まで全部をカバーします。海は地球という球体の表面の薄い膜のようなものなので、球座標のさらに近似版で表現してもよいだろうと思います。地球の半径は6300キロぐらいだと思いますが、海は最大でも10キロ、平均だと4キロぐらいなので、球座標の簡単化されたものになると思います。 すなわち、海を考える上での球座標の近似方程式を知りたいのですが。球面上の薄膜なので2次元でもいいです。球座標は3次元です。球座標での運動方程式は本に載っているのでそれをもとに近似してもいいですが、やはりオーソライズされたものを参照したいと思います。 よろしくお願いします。

  • 円と球の内部の格子点について

    円と球の内部の格子点についてですが。 格子点とは座標系において、その値が整数であるような点のことです。たとえば、二次元平面(xy平面)では、(1、1)や(2、1)といった点を指し、(1.2、2.5)といった少数や分数となるような点は格子点ではありません。 問題はここからです。 xy平面において、原点中心、半径rの円を考えたとき、その内部に含まれる格子点の数をSrとする。ここで、rは正の整数とする。(例えば、単位円(r=1)の場合、条件を満たす格子点は(0,0)、(0,1)、(1,0)、(-1,0)、(0 ,-1)であるからS1=5である。) Srを求めよ。これはもちろんrの関数になります。 次に、xyz座標空間になったとき、原点中心、半径rの球を考えたとき、その内部に含まれる格子点の数をVrとする。Vrを求めよ。 Vr/Sr をn→∞としたときの値を求めよ。 おそらく、これは発散するかと思います。SrやVrの求め方はおそらく区分求積法、法則性を見つけ出す(数列の漸化式を解く)方法かとも思うんですが、よくできないので、教えてください。 また、この極限値の問題はnC2 と nC3 に関係があるかと思います。 できれば、ヒントだけでなく、「答え」を教えてもらえるとありがたいです。

  • 視覚障害者でも楽しめるディズニーランド

    お世話になります。東京ディズニーランドに行く事 になりましたが、メンバー全員視覚に障害を持って います。 どういう障害かというと 視力が0.03前後 視野が10度以下(5円玉の穴から覗くイメージ) 薄暗い場所は見えない といった感じです。 こんな私達でも、視覚に関係なく楽しめる アトラクションやオススメの場所はありますで しょうか。 ディズニーランドは見て楽しむものが多いような イメージがあるので、ちょっと不安 に思っています・・・。 宜しくお願いします。

  • 三次元の方位の「等間隔」な選び方

    三次元空間において、原点を中心とする半径1の球の表面を、任意の整数n個の点で「いい感じ」にサンプリングする方法があれば教えてください。 言い換えるなら、原点から見た三次元空間の方位を単位ベクトルで表すとした場合、n種類だけ選ぶときに「いい感じ」になる単位ベクトルの組の選び方で、簡単で良い方法があれば教えてください。 この「いい感じ」というのがあやふやな言葉で申し訳ないのですが、おおよそ以下のようなイメージです。 二次元空間において、原点を中心とする半径1の円周上の点は、極座標系で(1, θ)と表す事が出来ます。これをn個の点P1, P2, ..., Pnでサンプリングするとき、各点の座標をP1(1, 2π/n), P2(1, 2*(2π)/n), ..., Pn(1, 2π)と選べば、方角に偏りが無くなり「いい感じ」だと思います。 これらは半径1の円に内接する正n角形の頂点になります。 三次元空間でも二次元空間のときの類推から、半径1の球に内接する正多面体の頂点を選べば原点から見た三次元空間の方位を「いい感じ」にサンプリングできていると思います。 ただし、正多面体は以下の5種類しか存在しません。括弧の中は頂点の数です。 正四面体(4) 正八面体(6) 正六面体(8) 正二十面体(12) 正十二面体(20) そこで例えばn=5,10,14といったような、サンプリング点を頂点とした正多面体が作れないような場合を含めて、各方位の重みが異なる事のない様に方位の組を選びぶための一般的で簡単な表式があれば教えていただきたいという事です。

  • 視覚障害者でも使用できるパソコン

    お世話になります。 知り合いに、視覚障害者が居るのですが、その人から仕事をする上で、メールを利用したいという相談を受けました。 メールを読み上げてくれるソフトなどは知っているのですが、その他に視覚障害者向けの機能を持ったソフトウェアはあるのでしょうか? またその人は、持ってるデスクトップPCが古くなってきたため、買い替えも視野に入れているそうです。 そこで皆様にお聞きしたいのですが、顧客ターゲットを目の不自由な人に向けている、視覚障害者が快適に利用できるPCはあるのでしょうか? 上でもお聞きした視覚障害者向けのソフトウェアなどもご教示いただけたら嬉しいです。 宜しくお願い致します。

  • 球座標の回転角の取り方について

    極座標系の一種に、「球の半径 r 、 z 軸からの回転角(0からπ)、x 軸からの回転角(0から2π)」の3つを用いて座標を記述する、球座標というものがありますが、なぜ z 軸からの回転角なのでしょうか? 表現としては x - y 平面からの回転角(-π/2からπ/2)でもいいように思います。 (ほかに、もっといい例があるかもしれませんが一応) 個人的考えてみた結果、「z 軸からの」という表現になっている理由として (1)多次元への拡張を考慮したから(球座標系はもう使えませんが) (2)「x軸からの」という言い回しとの対応を図りたかったから (3)回転角の範囲が-π/2からπ/2、となって扱いにくいから(よく考えてないのでわかりませんが、場合によっては便利な場合もあるかもしれません) の3点が関係しているのかなと思いました。 定義だからそうなんだと言われればそれまでですが、皆さんはどのように考えますか? また、球座標に関して、z 軸からの回転角以外などの設定の仕方もあるのでしょうか?(先ほどの例のように) 信用はできないかもしれませんが、Wikipediaにはz軸設定でしか載っていませんでしたので。 回答よろしくお願いします。

  • Open GLによるプログラミングに関する質問

    開発環境Visual C++2005 Express Edition Beta2、ライブラリはOpen GLです。この環境で、2次元空間内を半径0.5の黒点を不規則に移動させ、常時位置認識を(x-y座標において)をするプログラムを作成したいのですが、黒点の描画と規則的な移動しかできません。プログラミングの知識がないもので、どなかかプログラミングの方法を教えていただけないでしょうか。お願いします。

  • 動径関数

    量子力学や物理化学はあまり詳しくないのですが、有機化学を勉強していて、動径関数 原子核からの距離にのみ依存する関数で、得られる解はその距離に電子が存在する確率である と言うことを知り、プログラミングが得意なので、自分で電子雲を3次元的にに描画するプログラムを作ろうと思ったのですが、そこで疑問が生まれました 量子力学や物理化学に詳しくないのでとんちんかんなことを言っているかもしれませんが聞いてください 有機化学で習ったのでp軌道は、それぞれx,y,z軸に平行なアレイ型の軌道を持つことを知っています しかし、動径関数が距離にのみ依存するのであれば、3次元的にそれを視覚化した場合、点対称になり、方位性を持たない球として描画されるはずです どうしたら方位性を持つアレイ型の軌道になるのか教えて下さい 多分何か勘違いしてると思うのでどこがおかしいか教えて下さい