ポリゴンの配置
< 前へ [ トップへ ] 次へ >


 球体モデルなど、曲面を持つ立体モデルの表面をよく見ると、緻密な三角形や四角形の組み合わせで出来ている事が見て取れると思います。このように立体モデルは、ポリゴンと呼ばれる小さな三角形や四角形の集合で構成されています。RINEARN 3Dでは、ポリゴンのオブジェクトとして Element3DEG クラスと多数のサブクラスが用意されています。
 今回及び次回は、このポリゴンの扱い方ついて説明しましょう。



 ポリゴンの配置は add メソッドを用いる

 立体モデルの配置と全く同様に、ポリゴンの配置も Realtime3DFrame クラスの add メソッドを使用します。

add( Element3DEG 配置するポリゴン )

 このように立体モデルの場合と全く同じです。実は別段 Realtime3DFrame に限った事では無く、RINEARN 3Dではポリゴンも立体モデルも基本的に同等に扱えるように設計されています。従ってこれまでの立体モデルの扱いを習得していれば、ポリゴンの扱いも殆ど習得しているも同然です。
 実際に四角形ポリゴンを配置してみましょう。四角形ポリゴンを生成するには、四角形ポリゴンクラスである QuadrangleElement3DEG クラスのコンストラクタで座標点と色を指定します。それでは一辺の長さが1の四角形ポリゴンを生成し、配置してみましょう。

import rxvesapi.system3d.geometry.*;
import rxvesapi.system3d.renderer.*;
import rxvesapi.system3d.model.*;


import java.awt.Color;


public class Test{

  public static void main(String[] args){

    /*3D仮想空間*/
    Realtime3DFrame frame = new Realtime3DFrame();

    /*座標軸モデル*/
    AxisModel3DEG axis = new AxisModel3DEG();

    /*一辺の長さが1の正方形ポリゴン*/
    QuadrangleElement3DEG quad
     = new QuadrangleElement3DEG(
        0.0, 0.0, 0.0,
        1.0, 0.0, 0.0,
        1.0, 1.0, 0.0,
        0.0, 1.0, 0.0,
        Color.blue
     );

    /*配置*/
    frame.add( axis );
    frame.add( quad );

  }
}



▼実行結果



 配置したポリゴンを変形させる

 なお、一度生成して配置した後でも、ポリゴンの setVertex メソッドを呼び出す事により、任意のタイミングで頂点座標値を変更する事が可能です。この方法はゆらめく水面のアニメーションなどで動的にポリゴンの形を変更させたい時などに使うと良いでしょう。詳しくは書くポリゴンクラスの仕様書をご参照下さい。上で配置した四角形ポリゴンクラスの場合は こちら をご参照下さい。


 ポリゴンの裏面は描画されない

・裏面が描画されないのは仕様

 上の例で視点を色々操作してみると、ポリゴンの裏面が全く描画されない事に気付くでしょう。これはバグでは無く、そういう仕様なのです。RINEARN 3Dに限らず、多くのリアルタイム3Dシステムにおいて、ポリゴンの裏面が描画されないのはよくある仕様です。それでは何故、このような奇妙なルールが一般化しているのでしょうか。

・そもそも裏面を見る機会はあまり無い
 その理由は、一般的な3Dコンピュータグラフィックスにおいて、ポリゴンは大抵の場合片面しか見えないような位置に配置されるからです。例えば球や箱型、動物や建物、人物モデルなどの主要な形状は全て閉曲面で構成されていますし、遠くの山などは手前側の面だけ用意しておけば十分ですね。地面を下から見る事も殆どないでしょう。このように、ポリゴンの裏面を見るような場合と言えば 「 空間中に置かれた薄い膜 」 くらいのものでしょう。しかしこのような物体と出会う事はあまりありません。
 このように出会う機会の少ないポリゴン裏面の処理を完全に無視してしまえば、品質を保ったまま描画負荷を大きく節約する事ができます。そして裏面の描画が必要な場合は、裏側にポリゴンをもう一枚追加すればよいのですから、何も不具合はありません。以上のような理由から、処理速度が重視されるリアルタイム3Dの世界ではポリゴン裏面を描画しないシステムが多いのです。

(重要)ポリゴンの表/裏はどうやって区別されるのか
 ところで、ポリゴンを配置した時、そのポリゴンのどちらの面が表側にみなされるのでしょうか。それは座標点を指定する順番によって判断されます。この順番の規則は大変重要なのでなるべく覚えておく事をお勧めします。この規則の覚え方には以下の二通りが考えられます。

指定した4つの座標点の順番に右ねじを回した場合、
右ねじが進む向きが表方向となる

もしくは、

指定した4つの座標点をポリゴン表側から見ると、
左回りの順番で並んでいるように見える

この二つです。しかし慣れるまではあれこれ考えるよりも、とりあえず配置して試してみたほうが早いかもしてません。とにかく、座標を指定する順番で決まる事さえ覚えていれば何とかなるものです。


 いろいろなポリゴン

 上の例で配置した四角形ポリゴンの他に、RINEARN-X 3Dでは以下の表に示したポリゴンクラスが用意されています。なおRINEARN-X 3Dでは光源もポリゴンの一種として扱われ、非常に自由度の高い光源配置を可能にしています。

形状 クラス
三角形 TriangleElement3DEG
四角形 QuadrangleElement3DEG
LineElement3DEG
消失効果付き点 PointElement3DEG
大きさ固定の点 FixedSizePointElement3DEG
消失効果付き文字列 StringElement3DEG
大きさ固定の文字列 FixedSizeStringElement
消失効果付き画像 ImageElement3DEG
大きさ固定の画像 FixedSizeImageElement3DEG
点光源 PointLightElement3DEG
平行光源 LightElement3DEG

 これらは立体モデルとは異なり、自分で独自の種類のポリゴンを開発する事はできません。

< 前へ [ トップへ ] 次へ >


スポンサーリンク



スポンサーリンク

この階層の目次
新しいお知らせ

次回のVCSSL 3.4.10において、関数1個の挙動に非互換な修正が適用されます
2019年02月12日 - VCSSLの次回の正式リリース版3.4.10において、これまでドキュメントと実際の挙動が異なっていた描画系の関数1個に、非互換な修正が適用されます。その詳細と、使用コードでの対応方法について解説します。

RINEARNのソフトウェア向けにOpenJDKで生成したJava実行環境(JRE)の提供を開始
2019年02月06日 - Javaのリリースモデル変更への対応として、OpenJDKのjlinkツールを用いて、RINEARNのソフトウェア実行用に生成したJava実行環境(JRE)の提供を開始しました。その詳細と、今後の方針について解説します。

シンプル&コンパクトなプログラム関数電卓! 「 リニアンプロセッサー nano 」の概要
2019年01月26日 - RINEARNでは現在、プログラム関数電卓ソフト「 リニアンプロセッサー 」の派生版として、シンプル&コンパクトな方向性を目指した「 リニアンプロセッサー nano 」を開発中です。その概要をご紹介します。

コードアーカイブ新着
入力された数式を積分して値とグラフを表示するツール

画面上で数式を入力すると、それを数値的に積分し、値とグラフを表示してくれるGUIツールです。
2019年01月20日
z = f(x,y,t) の形の数式を3Dグラフとしてアニメーション描画するツール

入力欄に z = f(x,y,t) の形の数式を入力すると、それを3次元のグラフにアニメーション描画してくれる簡易ツールです。
2018年11月26日
y = f(x,t) の形の数式を2Dグラフとしてアニメーション描画するツール

入力欄に y = f(x,t) の形の数式を入力すると、それを2次元のグラフにアニメーション描画してくれる簡易ツールです。
2018年11月25日
t を媒介変数とする x(t), y(t), z(t) の数式を3Dグラフに描画し、アニメーションもできるツール

入力欄に x(t), y(t), z(t) の形の数式を入力すると、それを t を媒介変数として3次元のグラフに描画し、アニメーションもできる簡易ツールです。
2018年11月20日
t を媒介変数とする x(t), y(t) の数式を2Dグラフに描画し、アニメーションもできるツール

入力欄に x(t), y(t) の形の数式を入力すると、それを t を媒介変数として2次元のグラフに描画し、アニメーションもできる簡易ツールです。
2018年11月19日
公式Twitterアカウント

スポンサーリンク