HTMLで動くレイトレーシング

2021/7/6(火)

HTMLで動くレイトレーシング (1回目)~(4回目)

 

(by ULproject for HTML,JavaScript,canvas)

 

HTMLでレイトレーシング (8回目)

HTMLで行列(matrix) (2回目)

HTMLでクォータニオン(quaternion) (1回目)

を使ってレイトレーシングを動かしてみました

 

HTML,JavaScript,canvasは、使い慣れていない

ため、不具合などが多々あると思いますが、

ご了承ください

 

(1回目)~(4回目)のプログラムの説明

 

上記リンク先のプログラムをほぼそのまま結合

(1回目) mray001.html … 行列による移動

(2回目) mray002.html … クォータニオンによる移動

 

上記プログラムをOpenGL風インターフェースに改造

(3回目) mray003.html … mray001.htmlを改造

(4回目) mray004.html … mray002.htmlを改造

 

以下、モデル(球)の配置の説明

 

function model()

{

  var md;

 

  Sn = 0;    // Model reset

  md = Mode; // Push Mode

  Mode = 0;  // Model mode

 

  Specular(1.0);

  Shininess(10.0);

  Reflect(0.0);

  Clarity(0.0);

  Refract(1.0);

 

  // 光源

  Diffuse(1.0, 1.0, 1.0);

  Push();

  Translate(-500, 500, 500);

  Sphere(2);

  Pop();

 

  // 大球

  Diffuse(0.0, 1.0, 1.0);

  Push();

  Translate(3, 8, -80);

  Sphere(18);

  Pop();

 

  // 小球

  Diffuse(1.0, 1.0, 0.0);

  Push();

  Translate(-6, 14, -60);

  Sphere(6);

  Pop();

 

  // 透明

  Diffuse(0.1, 0.1, 0.1);

  Clarity(0.9);

  Refract(1.2);

  Push();

  Translate(3, 9, -20);

  Sphere(4);

  Pop();

 

  // 反射

  Diffuse(0.5, 0.5, 0.5);

  Reflect(0.5);

  Clarity(0.0);

  Refract(1.0);

  Push();

  Translate(0, -91, -90);

  Sphere(80);

  Pop();

 

  Mode = md; // Pop Mode

}

 

のように

OpenGL風にモデルを配置出来るようにしました

Push(), Pop()は行列(クォータニオン)の退避と戻しです

Specular 反射光の割合

Shininess 反射光の収束度

Reflect 鏡の割合

Clarity 透明度

Refract 屈折率

Diffuse 表面の色(RGB)

Sphere(r) 半径rの球

Translate(x, y, z) x,y,z方向に移動

Rotate(d, x, y, z) ベクトル(x,y,z)回りにd°回転

 

MODELモード(Mode = 0)では

行列などの演算はSphereに近いほうから

Rotate(d, x, y, z)

Translate(x, y, z)

Sphere(r)

球は並進移動した後回転する

 

VIEWモード(Mode = 1)では

自分が動くイメージですが方向はモデルが動く方向です

演算は常にモデル(球)に対して行っているためです

Rotate(d, x, y, z)

Translate(x, y, z)

自分がベクトル(x,y,z)回りに-d°回転し

自分が-x,-y,-z方向に並進移動する

 

ややこしいですが、行列などの演算の都合です

演算を変更追加などして、直観で分かり易いような

インターフェースなどを考えて見るのも良いかもしれません

(すでにありそうですが)

 

blg~.zip(mray001.html~mray004.html)は

以下のリンクからダウンロードできます

VL-BASIC(N88-BASIC互換?)ホームページ

Readme.txtを読んで遊んで下さい


操作方法はプログラムリストの最終行に

書いてあります


mray004.htmlを貼ったページへのリンク

https://ulproject.github.io/html/mray004




次回のおすすめ



このブログの人気の投稿

NEWS

N88-BASICでゲーム (1回目)