[ 前へ | 目次 | 次へ ]

光源の生成・配置と各種設定

ここでは、光源の生成と配置方法、および色や輝度の設定について扱います。

スポンサーリンク


球モデルの配置

まずは、球モデルを配置してみましょう。様々なモデルの生成と配置に関しては次章で詳しく扱いますので、 とりあえずは下のように記述し、実行してみてください。

このプログラムを実行すると、画面中心に球が表示されます。 球にはちゃんと陰影が付いて、立体感があるように描画されています。 これは、フレームワークの Graphics3DFramework が、標準で光源を用意して配置してくれているためです。

実行結果、球が表示されている図。
実行結果
球にはちゃんと陰影が付いて、立体感があるように描画されている。

もし光源が無ければ、球には光が当たらずに真っ黒になるはずです。 実際に、標準の光源の明るさを0にして、明かりを消してみましょう。 上のプログラムのonStart関数内(どこでも大丈夫です)に、以下のように3行だけ追記してみてください:

実行すると、このように真っ黒になります。球に光が一切当たらないためです。

実行結果、真っ黒になっている図。
実行結果
球に光が一切当たらないため、真っ黒に描画されている。

光源の生成

光の加減を自分で細かく調整したい場合、上のように標準の光源を消してから、自分で光源を生成して配置する事になります。

光源を生成するには、newLight関数、newPointLight関数、 newAmbientLight関数の3つの関数を使用します。 newLight関数は、全体を一定の方向から照らす平行光源を生成します。 newPointLight関数は、特定の点から放射状に照らす点光源を生成します。 newAmbientLight関数は、方向に関係無く、 モデル全体を一様に照らすアンビエント(環境光)光源を生成します。

- 関数仕様 -

int newLight ( int x, int y, int z, float power )

int newLight ( int x, int y, int z, float power )

int newAmbientLight ( int x, int y, int z, float power )

引数x、y、zで光源の存在する方向/位置ベクトル、 powerで輝度を指定します。輝度は0.0〜1.0の範囲で指定します。 輝度に関しては、全体を一個の光源で照らす場合、大体0.5前後が適正値です。

この関数は各種の光源を生成し、その光源のIDを返します。

光源の配置

光源を配置するには、mountLight関数を使用します。

- 関数仕様 -

void mountLight ( int lightID, int rendererID )

最初の引数lightIDには、光源のIDを指定します。 続く引数rendererIDには、レンダラーのIDを指定します。 光源は、任意の座標系の上に配置する事も可能です。 そのような場合には引数を一つ追加し、配置先座標系を指定します。

- 関数仕様 -

void mountLight ( int lightID, int rendererID, int coordinateID )

最初の引数lightIDには、光源のIDを指定します。 続く引数rendererIDには、レンダラーのIDを指定します。 最後の引数coordinateIDに、座標系のIDを指定します。

mountLight関数とaddLight関数との関係
なお、VCSSL3.0以前の世代では、配置にはaddLight関数を使用していました。しかし、add〜という関数名としては引数の順序が混乱を招くという理由により、VCSSL3.1以降では、関数名を上記のmountLightに変えたものが追加されました。つまりaddLight関数とmountLight関数は、名称が異なるだけで全く同一のものです。

光源の色設定

光源の色を設定するには、setLightColor関数を使用します。

- 関数仕様 -

void setLightColor (
  int lightID,
  int red, int green, int blue, int alpha
)

最初の引数lightIDでは、 設定対象の光源のIDを指定します。 続く引数では、背景の色成分を指定します。 色成分はそれぞれ0〜255の範囲で指定します。 色成分の形式は、RGBA形式をサポートしています。

色の付いた光でモデルを照らすと、 光の色が持つ色成分が、モデルの色が持つ色成分をそれぞれ照らします。 つまり光の青成分は、モデルの青成分のみを照らし、赤成分には影響を与えません。

具体的には、白いモデルを青い光で照らすと、普通の青色になります。 しかし、緑のモデルや赤いモデルを青い光で照らしても、全体的に暗いままです。

光源の位置設定

光源の位置を変更するには、setLightLocation関数を使用します。

- 関数仕様 -

void setLightLocation ( int lightID, float x, float y, float z )

引数x、y、zで光源の存在する方向/位置のベクトル成分を指定します。

光源の輝度設定

光源の輝度を変更するには、setLightBrightness関数を使用します。

- 関数仕様 -

void setLightBrightness ( int lightID, float power )

引数powerで光源の輝度を指定します。 輝度は0.0〜1.0の範囲で指定します。 全体を一個の光源で照らす場合、大体0.5前後の輝度が適正値です。

光源が多数存在する場合は、その分だけ一個当たりの輝度を下げてやる必要があります。 しかし輝度の等しい光源が様々な方向に存在すると、 陰影が一様化してしまい、立体感が無くなってしまいがちです。 そのような場合には、各光源の輝度をある程度ばらけた値に設定する事が有効です。

プログラム例

それでは、先程のプログラムで光源を配置してみましょう。以下のように記述し、実行してみてください。

このプログラムを実行すると、ちゃんと光に照らされた球が表示されます。 最初の実行結果と同じですが、最初は標準で用意されている光源で照らされていたのに対し、 今度は自分で生成・配置した光源で照らされています。

なお、光の明るさは、newLight関数で生成した光源の輝度によって調整できます。 影の場所の明るさは、newAmbientLight関数で生成した、アンビエント光源の輝度によって調整できます。

実行結果、光に照らされた白い球が表示されている図
実行結果
球に光が当たって、立体感も表現されている。



スポンサーリンク



この階層の目次
[ 前へ | 目次 | 次へ ]
お知らせ

各ソフトウェアをアップデート、リニアングラフのコマンド拡張やVCSSLの英語対応など
2024/02/05 - 各ソフトの一斉アップデートの内容をお知らせします。今回は、リニアングラフのコマンド機能を大幅拡張したのがメインです。また、VCSSLのメッセージ類の英語対応も行いました。

Vnano の Ver.1.1 で実装した反復計算高速化の内側
2024/01/17 - 前回のお知らせ記事の続編です。スクリプトエンジン Vnano の Ver.1.1 において実施した高速化を、エンジン内部の実装面から掘り下げて解説します。

スクリプトエンジン Vnano の Ver.1.1 を公開、同じ内容の反復実行が劇的に高速化
2023/12/22 - スクリプトエンジン Vnano の最新版を公開しました。同じ計算式やスクリプトを反復実行する速さが、大幅に向上しました。次期版リニアングラフ3D内での活用例を交えつつ、詳しく解説します。

新着
[公式ガイドサンプル] 各種の図形や画像を描画する

「VCSSL 2DCG開発ガイド」内のサンプルコードです。図形や画像などを描画します。
2022-12-16
角度の「度」とラジアンとを相互変換し、図示もするツール

45度などの「度」の値と、ラジアンの値とを相互に変換できるツールです。対応する角度の図示もできます。
2022-11-22
[公式ガイドサンプル] 立体モデルを回転させるアニメーション

「VCSSL 3DCG開発ガイド」内のサンプルコードです。立体モデルを、アニメーションで回転させ続けます
2022-11-18
[公式ガイドサンプル] 立体モデルを回転させる

「VCSSL 3DCG開発ガイド」内のサンプルコードです。立体モデルを、指定した角度だけ回転させます。
2022-11-17
[公式ガイドサンプル] 四則演算の計算順序や、カッコを使った順序指定

「VCSSLスタートアップガイド」内のサンプルコードです。四則演算が計算される順序や、カッコを使って順序を指定する方法を例示します。
2022-10-31