前: Material と MaterialSpec 次: サンプル Material

9. Material3D クラス

Material3D クラスを完全に解説する準備が整いました。以下は、サブクラスで提供できる(あるいは、提供する必要がある)メソッドすべてのリストです。

public MyMaterial()
public MyMaterial(DataInputStream in, Scene theScene) throws IOException, InvalidObjectException
すべての Material は2つのコンストラクタを提供します。はじめのコンストラクタにはアーギュメントがなく、すべてのパラメータを初期化してデフォルト値にします。これは新規の Material オブジェクト作成時に使います。2番目のコンストラクタは Texture の場合とまったく同じように、保存した Material を修復するときに使います。
public void writeToFile(DataOutputStream out, Scene theScene) throws IOException
このメソッドは上述の2番目のコンストラクタの写しで、DataOutputStream にパラメータ値を保存します。定義したほかのパラメータと同じく、Texture の名前を確実に保存してください。名前は getName() メソッドで取得でき、setName() メソッドで設定できます。 屈折率は indexOfRefraction() で取得でき、setIndexOfRefraction() で設定できます。
public static String getTypeName()
このメソッドはこの Material クラスを記述する文字列を返します。クラス名と同じくすることができます(そうする必要があるわけではありません)。これは「新規の材質」ウインドウで材質のタイプのメニュー内に表示されるテキストです。
public double getStepSize()
材質は、その材質を「ステップ刻み」してレンダーされます。これは材質のプロパティを、それを通る1本の光線の経路に沿った点の連続で評価して行います。このメソッドは、これらの点同士の推奨される間隔を返します。この間隔は、分解能が許す、材質の最も小さな特徴と同じか、少し小さいサイズになります。デフォルトの実装は 0.1 を返します。

注意: このメソッドから返した値は、ガイドラインとしてしか使いません。材質のレンダー時に実際に使われるきざみ幅は、さまざまな理由でこれとは異なることがあります。以下に例を示します。

  • 離れたオブジェクトのレンダーのとき、時間の節約のためレンダラーが大きなきざみ幅を使うとき。
  • 人工的なエイリアスを取り除くため、レンダラーはきざみ幅をランダムがゆらがせるとき。
  • ユーザがレンダラーに、デフォルト値に比べてより大きな、またはより小さなきざみ幅をはっきりと指示しているとき。
public boolean isScattering()
このメソッドは、この Material が透過する光を散乱させるかどうかを指定します。「偽」(false) を返す場合、光は散乱せず、getMaterialSpec() で返された散乱の値は無視されます。このメソッドのデフォルトの実装は偽を返します。この材質に散乱をさせたいときは、「真」(true) を返すようオーバーライドする必要があります。

光を散乱する Material は、散乱なしの Material に比べて、レンダーがとても遅くなることに気をつけてください。

public boolean castsShadows()
このメソッドは、この Material が影を作るかどうかを指定します。デフォルトの実装は「偽」(false) を返します。この材質で影を作るときは、「真」(true) を返すようオーバーライドする必要があります。

影を作る Material は、影を作らない Material に比べて、レンダーがとても遅くなることに気をつけてください。

public void getMaterialSpec(MaterialSpec spec, double x, double y, double z, double xsize, 
        double ysize, double zsize, double t)
このメソッドは第8章で解説したように、材質プロパティを計算します。 spec 内に戻った値は、 (x, y, z) で中央寄せされた幅 (xsize, ysize, zsize) の領域にわたって平均化されます。t は時間(秒)です。
public void edit(Frame fr, Scene sc)
このメソッドは、ユーザが材質を編集できるウインドウを表示します。fr は Dialog の親として使われる Frame です。sc は この Texture が一部を成す Scene です。
public Material duplicate()
このメソッドは、パラメータ値がこれと同一の Material となる、新規の Material を返します。
public boolean usesImage(ImageMap image)
このメソッドは、Material が特定のイメージマップを使うとき、「真」(true) を返します。Material がそのシーンから使っている ImageMap を、ユーザが削除できないようにするために必要です。デフォルトの実装では「偽」(false) を返します。Material が(直接的または、ImageOrColor や ImageOrValue オブジェクトを通して間接的に)ImageMap を使っている場合、このメソッドをオーバーライドしてください。

ご覧のように、Material は Textureより実装するメソッドがいくぶん少ないです。そしてそのほとんどは Texture メソッドそのままなほどよく似ています。

前: Material と MaterialSpec 次: サンプル Material