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 メソッドそのままなほどよく似ています。