VL-BASICで動くレイトレーシング
2021/7/10(土)
VL-BASICで動くレイトレーシング
by ULproject
をVL-BASICの拡張命令で作ってみました
VL-BASICは行列による移動になりますので
mray003.html
が一番近いです
(VL-BASIC拡張命令では点の大きさの変更には
対応していませんので省略しています)
以下、モデル(球)の配置の説明
mray003.htmlのModel関数と同じように作りました
*MODEL
GPU MATERIAL(PUSH)
GPU MATRIX(MODE, MODEL)
'
GPU MATERIAL(SPECULAR, 1.0, 1.0, 1.0)
GPU MATERIAL(SHININESS, 10.0)
GPU MATERIAL(REFLECT, 0.0, 0.0, 0.0)
GPU MATERIAL(CLARITY, 0.0, 0.0, 0.0)
GPU MATERIAL(REFRACT, 1.0)
' 光源
GPU MATERIAL(LIGHT , 1.0, 1.0, 1.0) '--- 光源の光の色と強さ
GPU MATERIAL(ATTENUATE, 1.0, 0.0, 0.0) '--- 光減衰(0,1,2乗の係数)
GPU MATERIAL(DIFFUSE, 1.0, 1.0, 1.0)
GPU MATRIX(PUSH)
GPU TRANSLATE(-500, 500, 500)
GPU SPHERE(2)
GPU MATRIX(POP)
GPU MATERIAL(LIGHT , 0.0, 0.0, 0.0) '--- 光源の光の色と強さ
' 大球
GPU MATERIAL(DIFFUSE, 0.0, 1.0, 1.0)
GPU MATRIX(PUSH)
GPU TRANSLATE(3, 8, -80)
GPU SPHERE(18)
GPU MATRIX(POP)
' 小球
GPU MATERIAL(DIFFUSE, 1.0, 1.0, 0.0)
GPU MATRIX(PUSH)
GPU TRANSLATE(-6, 14, -60)
GPU SPHERE(6)
GPU MATRIX(POP)
' 透明
GPU MATERIAL(DIFFUSE, 0.1, 0.1, 0.1)
GPU MATERIAL(CLARITY, 0.9, 0.9, 0.9)
GPU MATERIAL(REFRACT, 1.2)
GPU MATRIX(PUSH)
GPU TRANSLATE(3, 9, -20)
GPU SPHERE(4)
GPU MATRIX(POP)
' 反射
GPU MATERIAL(DIFFUSE, 0.5, 0.5, 0.5)
GPU MATERIAL(REFLECT, 0.5, 0.5, 0.5)
GPU MATERIAL(CLARITY, 0.0, 0.0, 0.0)
GPU MATERIAL(REFRACT, 1.0)
GPU MATRIX(PUSH)
GPU TRANSLATE(0, -91, -90)
GPU SPHERE(80)
GPU MATRIX(POP)
'
GPU MATRIX(MODE, PREVIOUS)
GPU MATERIAL(POP)
RETURN
のように
OpenGL風にモデルを配置出来ます
GPU MATRIX(PUSH), GPU MATRIX(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モードでは
行列などの演算はSphereに近いほうから
例
Rotate(d, x, y, z)
Translate(x, y, z)
Sphere(r)
球は並進移動した後回転する
VIEWモードでは
自分が動くイメージですが方向はモデルが動く方向です
演算は常にモデル(球)に対して行っているためです
例
Rotate(d, x, y, z)
Translate(x, y, z)
自分がベクトル(x,y,z)回りに-d°回転し
自分が-x,-y,-z方向に並進移動する
ややこしいですが、行列などの演算の都合です
blg~.zip(mray001v.bas)は
以下のリンクからダウンロードできます
Readme.txtを読んで遊んで下さい
操作方法はプログラムリストの最終行に
書いてあります