mirror of
https://github.com/minetest/irrlicht.git
synced 2024-11-05 01:40:44 +01:00
42 lines
1.2 KiB
V Shell
42 lines
1.2 KiB
V Shell
|
; part of the Irrlicht Engine Shader example.
|
||
|
; This Direct3D9 vertex shader will be loaded by the engine.
|
||
|
; Please note that these example shaders don't do anything really useful.
|
||
|
; They only demonstrate that shaders can be used in Irrlicht.
|
||
|
|
||
|
vs.1.1
|
||
|
|
||
|
dcl_position v0; ; declare position
|
||
|
dcl_normal v1; ; declare normal
|
||
|
dcl_color v2; ; declare color
|
||
|
dcl_texcoord0 v3; ; declare texture coordinate
|
||
|
|
||
|
; transpose and transform position to clip space
|
||
|
mul r0, v0.x, c4
|
||
|
mad r0, v0.y, c5, r0
|
||
|
mad r0, v0.z, c6, r0
|
||
|
add oPos, c7, r0
|
||
|
|
||
|
; transform normal
|
||
|
dp3 r1.x, v1, c0
|
||
|
dp3 r1.y, v1, c1
|
||
|
dp3 r1.z, v1, c2
|
||
|
|
||
|
; renormalize normal
|
||
|
dp3 r1.w, r1, r1
|
||
|
rsq r1.w, r1.w
|
||
|
mul r1, r1, r1.w
|
||
|
|
||
|
; calculate light vector
|
||
|
m4x4 r6, v0, c10 ; vertex into world position
|
||
|
add r2, c8, -r6 ; vtxpos - lightpos
|
||
|
|
||
|
; normalize light vector
|
||
|
dp3 r2.w, r2, r2
|
||
|
rsq r2.w, r2.w
|
||
|
mul r2, r2, r2.w
|
||
|
|
||
|
; calculate light color
|
||
|
dp3 r3, r1, r2 ; dp3 with negative light vector
|
||
|
lit r5, r3 ; clamp to zero if r3 < 0, r5 has diffuce component in r5.y
|
||
|
mul oD0, r5.y, c9 ; ouput diffuse color
|
||
|
mov oT0, v3 ; store texture coordinates
|