あと、実行ファイル及び、プロジェクトファイルが入っています。テクスチャの実態を作ります。img);テクスチャに受け渡すテクスチャの中身は、場所に依存した乱数を放り込みました。テクスチャサイズ分のメモリを確保しました。そのメモリに、一様な乱数を埋め込んだ後、ボリュームテクスチャに受け渡すメモリを生成します。}生成するノイズは、一様な乱数を位置に応じて設定します。今回は、scale(ノイズの間隔)をパラメータとする乱数にしました。}生成したノイズ(の断面)は、次のようになります。■頂点プログラムプログラマブルシェーダを見ましょう。頂点プログラムは、入力は位置と法線で、出力に関しては、テクスチャ座標に、ライト方向や、ハーフベクトルなどを仕込みます。};シェーダプログラムでは、それぞれのベクトル値を座標変換等を行って、変換します。}■フラグメントプログラムフラグメントプログラムでは、乱数のテクスチャを読み込んで模様を作ります。法線やハーフベクトルを正規化して拡散光や鏡面反射光を求めます。テクスチャ座標を求めるときに、2つのテクスチャを使います。1つは先ほど作成した乱数の3次元テクスチャNoiseMapで、もう1つは1次元の木のグラデーションを決定するためのテクスチャPulseTrainMapです。2つのテクスチャから合成するための重みを求めて、暗い色と明るい色を合成します。鏡面反射光も暗い部分は色を抑えます。赤い色をランダムで混ぜて、いわゆる「CGらしさ」を低減させています。}縞の間隔を決定するための関数getRadiusは、次の形をしています。大きさを変えて、複数の波長を持つノイズを合成しています。ここを適当なノイズの合成方法をもちいれは、Perlinノイズもできるでしょう。}■テクスチャの使用さて、いままで登場しなかったのは、テクスチャの使い方です。テクスチャを使うためには、生成したときのIDを持つ必要があります。Cgで使うために、イテレータを準備する必要があります。テクスチャIDはglGenTexturesで確保したときの番号を代入します。generateSmoothPulseTrain();1次元のテクスチャを作る関数は、次のようになります。メモリに1次元のイメージを作成してから、そのイメージを使ってテクスチャを生成します。glEnableでテクスチャを有効にしてから、glBindTextureで、使うテクスチャを指定します。使い終わったら、glDisableでテクスチャを使用しないことを宣言します。描画するには、それぞれの定数に適当な値を入れます。これらの定数を入れ替えれば、見た目が大幅に変わります。それぞれのぎょうれつを設定することができます。cgGLMatrixInverse);描画自体は、設定されているティーポットを描画しました。■おまけパラメータを適当に変えたら、次のような絵ができました。急須の質感が出ていて、結構気に入っています。■最後に明るい部分と暗い部分で、鏡面反射率を変えているところは結構こっていますね。手始めとしては、こんなシェーダがいいのではないでしょうか。もどるimagire@gmail.com。