|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||
Objectcommon:Generic
reb:RaytraceGeneric
reb:RaytraceSphere
class
Class RaytraceSphere(RaytraceGeneric) {
public:
import "common.ulb"
import "dmj5.ulb"
; import "reb.ulb"
func RatytraceSphere(Generic pparent)
Raytracegeneric.Raytracegeneric(0)
init()
endfunc
func Init()
Raytracegeneric.Init()
; create the sphere array
is = new @isph(0)
is.recurse()
nsph = is.fk
zsort = is.zsort
rcen = is.crad
bradius = is.bradius
circles = is.circles
showc = is.showc
;find the boundaries of sphere set
is.findbound(is.s,is.fk,xmin, ymin, zmin, xmax, ymax, zmax)
; initialize origin, ray, normal, and half angle vectors
norm = new Vector(0,0,0,0)
pnorm = new Vector(0,0,0,0)
hang = new Vector(0,0,0,0)
rOrigin = new Vector(0,0,0,0)
rRay = new Vector(0,0,0,0)
rInternal = new Vector(0,0,0,0)
rRefract = new Vector(0,0,0,0)
rBackSph = new Vector(0,0,0,0)
; initial bool arrays
int i = 0
while i < 10
inter[i] = false
ispl[i] = false
flrrfl[i] = false
i = i + 1
endwhile
isplane = false
; load the sphere arrays
i = 0
setlength(cen,is.fk)
setlength(z,is.fk)
setlength(rad,is.fk)
setlength(lev,is.fk)
setlength(gen,is.fk)
while i < nsph
cen[i] = is.s.sph[i].fcen
z[i] = is.s.sph[i].fz
rad[i] = is.s.sph[i].frad
lev[i] = is.s.sph[i].flevel
gen[i] = is.s.sph[i].fgen
;set each sphere object to null
; is.s.sph[i] = 0
i = i + 1
endwhile
; set array object to null
; is = 0
; create the plane array
int j = 0
planes = 0
if @pset == "floor" || @pset == "back" || @pset == "left" || \
@pset == "right" || @pset == "top"
planes = 1
elseif @pset == "floor-back" || @pset == "floor-left" \
|| @pset == "floor-right" || @pset == "floor-top" \
|| @pset == "back-left" || @pset == "back-right" \
|| @pset == "back-top" || @pset == "left-right" \
|| @pset == "left-top" || @pset == "right-top"
planes = 2
elseif @pset == "floor-back-left"|| @pset == "floor-back-right"\
|| @pset == "floor-left-right" || @pset == "back-left-right" \
|| @pset == "floor-back-top" || @pset == "floor-left-top" \
|| @pset == "back-left-top" || @pset == "floor-right-top" \
|| @pset == "back-right-top" || @pset == "left-right-top"
planes = 3
elseif @pset == "floor-back-left-right" || @pset == "floor-back-left-top" \
|| @pset == "floor-back-right-top" ||@pset == "floor-left-right-top" \
|| @pset == "back-left-right-top"
planes = 4
elseif @pset == "open box"
planes = 5
endif
if planes > 0
pa = new @paar(planes)
setlength(pfade,planes)
setlength(pd,planes)
setlength(pnx,planes)
setlength(pny,planes)
setlength(pnz,planes)
setlength(planeno,planes)
while j < planes
pd[j] = 1e308
if j == 0
if @pset == "floor" || @pset == "floor-back" || @pset == "floor-left" \
|| @pset == "floor-right" || @pset == "floor-top" \
|| @pset == "floor-back-left"|| @pset == "floor-back-right"\
|| @pset == "floor-left-right" || @pset == "floor-back-top" \
|| @pset == "floor-left-top" || @pset == "floor-right-top" \
|| @pset == "floor-back-left-right" || @pset == "floor-back-left-top" \
|| @pset == "floor-back-right-top" ||@pset == "floor-left-right-top" \
|| @pset == "open box"
pa.pl[j] = new Plane(@p1A,@p1B,@p1C,@p1D)
pfade[j] = @p1F
planeno[j] = 1
elseif @pset == "back" || @pset == "back-left" || @pset == "back-right" \
|| @pset == "back-top" || @pset == "back-left-right" \
|| @pset == "back-left-top" || @pset == "back-right-top" \
|| @pset == "back-left-right-top"
pa.pl[j] = new Plane(@p2A,@p2B,@p2C,@p2D)
pfade[j] = @p2F
planeno[j] = 2
elseif @pset == "left" || @pset == "left-right" || @pset == "left-top" \
|| @pset == "left-right-top"
pa.pl[j] = new Plane(@p3A,@p3B,@p3C,@p3D)
pfade[j] = @p3F
planeno[j] = 3
elseif @pset == "right" || @pset == "right-top"
pa.pl[j] = new Plane(@p4A,@p4B,@p4C,@p4D)
pfade[j] = @p4F
planeno[j] = 4
elseif @pset == "top"
pa.pl[j] = new Plane(@p5A,@p5B,@p5C,@p5D)
pfade[j] = @p5F
planeno[j] = 5
endif
pnx[j] = pa.pl[j].pnx
pny[j] = pa.pl[j].pny
pnz[j] = pa.pl[j].pnz
elseif j == 1
if @pset == "floor-back" || @pset == "floor-back-left" \
|| @pset == "floor-back-right" || @pset == "floor-back-top" \
|| @pset == "floor-back-left-right" || @pset == "floor-back-left-top" \
|| @pset == "floor-back-right-top" || @pset == "open box"
pa.pl[j] = new Plane(@p2A,@p2B,@p2C,@p2D)
pfade[j] = @p2F
planeno[j] = 2
elseif @pset == "floor-left" || @pset == "back-left" \
|| @pset == "floor-left-right" || @pset == "floor-left-top" \
|| @pset == "back-left-right" || @pset == "back-left-top" \
||@pset == "floor-left-right-top" || @pset == "back-left-right-top"
pa.pl[j] = new Plane(@p3A,@p3B,@p3C,@p3D)
pfade[j] = @p3F
planeno[j] = 3
elseif @pset == "floor-right" || @pset == "back-right" \
|| @pset == "left-right" || @pset == "floor-right-top" \
|| @pset == "back-right-top" || @pset == "left-right-top"
pa.pl[j] = new Plane(@p4A,@p4B,@p4C,@p4D)
pfade[j] = @p4F
planeno[j] = 4
elseif @pset == "floor-top" || @pset == "back-top" \
|| @pset == "left-top" || @pset == "right-top"
pa.pl[j] = new Plane(@p5A,@p5B,@p5C,@p5D)
pfade[j] = @p5F
planeno[j] = 5
endif
pnx[j] = pa.pl[j].pnx
pny[j] = pa.pl[j].pny
pnz[j] = pa.pl[j].pnz
elseif j == 2
if @pset == "floor-back-left" || @pset == "floor-back-left-right" \
|| @pset == "floor-back-left-top" || @pset == "open box"
pa.pl[j] = new Plane(@p3A,@p3B,@p3C,@p3D)
pfade[j] = @p3F
planeno[j] = 3
elseif @pset == "floor-back-right" || @pset == "floor-left-right" \
|| @pset == "back-left-right"|| @pset == "floor-back-right-top" \
||@pset == "floor-left-right-top" || @pset == "back-left-right-top"
pa.pl[j] = new Plane(@p4A,@p4B,@p4C,@p4D)
pfade[j] = @p4F
planeno[j] = 4
elseif @pset == "floor-back-top" || @pset == "floor-left-top" \
|| @pset == "back-left-top" || @pset == "floor-right-top" \
|| @pset == "back-right-top" || @pset == "left-right-top"
pa.pl[j] = new Plane(@p5A,@p5B,@p5C,@p5D)
pfade[j] = @p5F
planeno[j] = 5
endif
pnx[j] = pa.pl[j].pnx
pny[j] = pa.pl[j].pny
pnz[j] = pa.pl[j].pnz
elseif j == 3
if @pset == "floor-back-left-right" || @pset == "open box"
pa.pl[j] = new Plane(@p4A,@p4B,@p4C,@p4D)
pfade[j] = @p4F
planeno[j] = 4
elseif @pset == "floor-back-left-top" || @pset == "floor-back-right-top"\
||@pset == "floor-left-right-top" || @pset == "back-left-right-top"
pa.pl[j] = new Plane(@p5A,@p5B,@p5C,@p5D)
pfade[j] = @p5F
planeno[j] = 5
endif
pnx[j] = pa.pl[j].pnx
pny[j] = pa.pl[j].pny
pnz[j] = pa.pl[j].pnz
elseif j == 4
if @pset == "open box"
pa.pl[j] = new Plane(@p5A,@p5B,@p5C,@p5D)
pfade[j] = @p5F
planeno[j] = 5
endif
pnx[j] = pa.pl[j].pnx
pny[j] = pa.pl[j].pny
pnz[j] = pa.pl[j].pnz
endif
j = j + 1
endwhile
endif
; initialize the plugins
m_TrapTexture = new @f_traptexture(this)
m_TrapTexture_plane1 = new @f_traptexture_plane1(this)
m_TrapTexture_plane2 = new @f_traptexture_plane2(this)
m_TrapTexture_plane3 = new @f_traptexture_plane3(this)
m_TrapTexture_plane4 = new @f_traptexture_plane4(this)
m_TrapTexture_plane5 = new @f_traptexture_plane5(this)
m_TrapColor = new @f_trapcolor(this)
m_TrapColor_plane1 = new @f_trapcolor_plane1(this)
m_TrapColor_plane2 = new @f_trapcolor_plane2(this)
m_TrapColor_plane3 = new @f_trapcolor_plane3(this)
m_TrapColor_plane4 = new @f_trapcolor_plane4(this)
m_TrapColor_plane5 = new @f_trapcolor_plane5(this)
m_MergeColor = new @f_colormerge(this)
m_MergeColor_plane1 = new @f_colormerge_plane1(this)
m_MergeColor_plane2 = new @f_colormerge_plane2(this)
m_MergeColor_plane3 = new @f_colormerge_plane3(this)
m_MergeColor_plane4 = new @f_colormerge_plane4(this)
m_MergeColor_plane5 = new @f_colormerge_plane5(this)
m_MergeLight = new @f_lightmerge(this)
endfunc
;-------------------------------------------------
; Function to determine object intersections with rays
; The maximum recursion level is currently set to 10
; @param origin = ray origin as a vector
; @param ray = ray as a vector
; @param regress = regression level
; @param rsi = object index - passed back from recursion
; @param dif = diffuse lighting parameter - passed back from recursion
; @param sbr = specular lighting paramer - passed back from recursion
; @param scolor = color of the intersected object
;------------------------------------------------
; Call Intersect() after viewpoint
bool func Intersect(Vector origin, Vector ray, int ®ress, int &rsi, \
float &dif, float &sbr, color &scolor)
int i = 0
float bi = 0
float ci = 0
float arg = 0
float ti1 = 0
float ti2 = 0
; initialize distance to infinity
float d = 1e308
float ti = 0
isplane = false
floorrfl = false
reg = regress
inter[reg] = false
shad[reg] = false
refval = @refval
float ctheta = 0
float ctheta2 = 0
float ortheta = 0
float dirtheta = 0
float comp = 0
int oldrsi = 0
passed = false
; determine the closest ray/sphere intersection
; check for bounding volume
if !BoundXY(#pixel*#magn/2*@boundadj) || !@boundary
while i < nsph
if (i != rsi &&((@showbase || (rad[i] < bradius ) && (real(cen[i])*@sa+imag(cen[i])*\
@sb+z[i]*@sc <= @pd||!@slice))&&(!circles || \
circles && ((!showc && rad[i] != rcen) || showc))) && rad[i] > 0)
bi = ray.m_x*(origin.m_x-real(cen[i]))+ray.m_y*(origin.m_y-imag(cen[i]))+\
ray.m_z*(origin.m_z-z[i])
ci = (origin.m_x-real(cen[i]))^2+(origin.m_y-imag(cen[i]))^2+\
(origin.m_z-z[i])^2-rad[i]^2
arg = bi*bi-ci
if (arg > 0) ; ray intersects sphere
ti1 = -bi - sqrt(arg)
ti2 = -bi + sqrt(arg)
if ti1 > ti2 ; find smallest ti
ti = ti2
else
ti = ti1
endif
if ti > 0 && ti < d
inter[reg] = true
d = ti
; sphere parameters for the intersected sphere
si[reg] = i
rsi = si[reg]
endif
endif
endif
i = i + 1
if inter[reg] && zsort && reg == 0
i = nsph
endif
endwhile
endif
; if planes are present, check for closest intersection and
; compare to sphere distance. Select closest
i = 0
if @pset > 0
while i < planes
ortheta = pnx[i]*origin.m_x+pny[i]*origin.m_y+pnz[i]*origin.m_z
dirtheta = pnx[i]*ray.m_x+pny[i]*ray.m_y+pnz[i]*ray.m_z
pd[i] = -(ortheta+pa.pl[i].pspot)/dirtheta
if pd[i] > 0 && pd[i] < 1e308 && pd[i] < d && !isnan(pd[i]) && !isinf(pd[i])
isplane = true
inter[reg] = true
d = pd[i]
pj = i
endif
i = i + 1
endwhile
endif
; code for lighting and coloring
if inter[reg]
; intersection point
xi[reg] = ray.m_x*d + origin.m_x
yi[reg] = ray.m_y*d + origin.m_y
zi[reg] = ray.m_z*d + origin.m_z
; look for shadows - sphere on sphere if sphere the closest
; object
if @shadow
int j = 0
while j < @nlight
d = 1e308
ti = 0
i = 0
while i < nsph
if (i != rsi) && ((@showbase || (rad[i] < bradius ) \
&& (real(cen[i])*@sa+imag(cen[i])*\
@sb+z[i]*@sc <= @pd||!@slice))&&(!circles || \
circles && ((!showc && rad[i] != rcen) || showc))) \
&& rad[i] > 0
bi = lar.m_elements[j].m_x*(xi[reg]-real(cen[i]))+\
lar.m_elements[j].m_y*(yi[reg]-imag(cen[i]))+\
lar.m_elements[j].m_z*(zi[reg]-z[i])
ci = (xi[reg]-real(cen[i]))^2+\
(yi[reg]-imag(cen[i]))^2+\
(zi[reg]-z[i])^2-rad[i]^2
arg = bi*bi-ci
if (arg > 0) ; ray intersects sphere
ti1 = -bi - sqrt(arg)
ti2 = -bi + sqrt(arg)
if ti1 > ti2 ; find smallest ti
ti = ti2
else
ti = ti1
endif
if ti > 0 && ti < d
shad[reg] = true
endif
endif
endif
i = i + 1
if shad[reg] && zsort
i = nsph
endif
endwhile
j = j + 1
endwhile
endif
; normal at intersection point on sphere if sphere the
; closest object
if !isplane
norm.init((xi[reg]-real(cen[si[reg]]))/rad[si[reg]],\
(yi[reg]-imag(cen[si[reg]]))/rad[si[reg]], \
(zi[reg]-z[si[reg]])/rad[si[reg]], 0)
endif
; normal at intersection point on plane if plane the
; closest object
if isplane
norm.init(pnx[pj],pny[pj],pnz[pj],0)
diffdotz = norm.m_z*ray.m_z
endif
;
;---------------------------------------
; textures
;---------------------------------------
;
; sphere textures
if @f_traptexture != DMJ_TrapShapeFlat && !isplane
norm.Normalize(norm)
; perturb the normals with the textures
pz = 0
if @cent
pz = (xi[reg] + flip(yi[reg])-cen[si[reg]])/rad[si[reg]]
else
pz = (xi[reg] + flip(yi[reg]))/rad[si[reg]]
endif
if @sphmap
pz = pz*(1+|pz|)*@sphsize *0.5
endif
m_TrapTexture.Init(pz)
ptexture = m_TrapTexture.Iterate(pz)
complex tx = m_trapTexture.GetTransformedPoint()
if @texflavor == 0
tx = tx*@p_texturestrength
norm.init(norm.m_x+real(tx),norm.m_y+imag(tx),norm.m_z+cabs(tx),0)
endif
endif
norm.Normalize(norm)
; plane textures
if isplane
if planeno[pj] == 1
if @f_traptexture_plane1 != DMJ_TrapShapeFlat
; perturb the normals with the textures
pz = 0
float ang = atan2(pa.pl[pj].pb-flip(pa.pl[pj].pa))
complex pang = (0,1)^(ang*2/#pi)
if !@pper1
pz = #pixel*pang
else
pz = xi[reg]+ flip(yi[reg])*pang
pz = real(pz) + flip(imag(pz)+zi[reg]*(1-diffdotz))
endif
m_TrapTexture_plane1.Init(pz)
ptexture = m_TrapTexture_plane1.Iterate(pz)
complex tx = m_trapTexture_plane1.GetTransformedPoint()
if @texflavor_plane1 == 0
tx = tx*@p_texturestrength_plane1
norm.init(norm.m_x+real(tx),norm.m_y+imag(tx),norm.m_z+cabs(tx),0)
endif
endif
elseif planeno[pj] == 2
if @f_traptexture_plane2 != DMJ_TrapShapeFlat
; perturb the normals with the textures
pz = 0
float ang = atan2(pa.pl[pj].pb-flip(pa.pl[pj].pa))
complex pang = (0,1)^(ang*2/#pi)
if !@pper2
pz = #pixel*pang
else
pz = xi[reg]+ flip(yi[reg])*pang
pz = real(pz) + flip(imag(pz)+zi[reg]*(1-diffdotz))
endif
m_TrapTexture_plane2.Init(pz)
ptexture = m_TrapTexture_plane2.Iterate(pz)
complex tx = m_trapTexture_plane2.GetTransformedPoint()
if @texflavor_plane2 == 0
tx = tx*@p_texturestrength_plane2
norm.init(norm.m_x+real(tx),norm.m_y+imag(tx),norm.m_z+cabs(tx),0)
endif
endif
elseif planeno[pj] == 3
if @f_traptexture_plane3 != DMJ_TrapShapeFlat
; perturb the normals with the textures
pz = 0
float ang = atan2(pa.pl[pj].pb-flip(pa.pl[pj].pa))
complex pang = (0,1)^(ang*2/#pi)
if !@pper3
pz = #pixel*pang
else
pz = xi[reg]+ flip(yi[reg])*pang
pz = real(pz) + flip(imag(pz)+zi[reg]*(1-diffdotz))
endif
m_TrapTexture_plane3.Init(pz)
ptexture = m_TrapTexture_plane3.Iterate(pz)
complex tx = m_trapTexture_plane3.GetTransformedPoint()
if @texflavor_plane3 == 0
tx = tx*@p_texturestrength_plane3
norm.init(norm.m_x+real(tx),norm.m_y+imag(tx),norm.m_z+cabs(tx),0)
endif
endif
elseif planeno[pj] == 4
if @f_traptexture_plane4 != DMJ_TrapShapeFlat
; perturb the normals with the textures
pz = 0
float ang = atan2(pa.pl[pj].pb-flip(pa.pl[pj].pa))
complex pang = (0,1)^(ang*2/#pi)
if !@pper4
pz = #pixel*pang
else
pz = xi[reg]+ flip(yi[reg])*pang
pz = real(pz) + flip(imag(pz)+zi[reg]*(1-diffdotz))
endif
m_TrapTexture_plane4.Init(pz)
ptexture = m_TrapTexture_plane4.Iterate(pz)
complex tx = m_trapTexture_plane4.GetTransformedPoint()
if @texflavor_plane4 == 0
tx = tx*@p_texturestrength_plane4
norm.init(norm.m_x+real(tx),norm.m_y+imag(tx),norm.m_z+cabs(tx),0)
endif
endif
elseif planeno[pj] == 5
if @f_traptexture_plane5 != DMJ_TrapShapeFlat
; perturb the normals with the textures
pz = 0
float ang = atan2(pa.pl[pj].pb-flip(pa.pl[pj].pa))
complex pang = (0,1)^(ang*2/#pi)
if !@pper5
pz = #pixel*pang
else
pz = xi[reg]+ flip(yi[reg])*pang
pz = real(pz) + flip(imag(pz)+zi[reg]*(1-diffdotz))
endif
m_TrapTexture_plane5.Init(pz)
ptexture = m_TrapTexture_plane5.Iterate(pz)
complex tx = m_trapTexture_plane5.GetTransformedPoint()
if @texflavor_plane5 == 0
tx = tx*@p_texturestrength_plane5
norm.init(norm.m_x+real(tx),norm.m_y+imag(tx),norm.m_z+cabs(tx),0)
endif
endif
endif
norm.Normalize(norm)
endif
;
;---------------------------------------
; illumination parameters
;---------------------------------------
;
; distance squared to light(s). Index is the light number.
lds[0] = (@lightx-xi[reg])^2 + (@lighty-yi[reg])^2 + (@lightz-zi[reg])^2
lf = @lightx^2 + @lighty^2 + @lightz^2
if @nlight > 1
lds[1] = (@lightx2-xi[reg])^2 + (@lighty2-yi[reg])^2 + (@lightz2-zi[reg])^2
lf = lf + @lightx2^2 + @lighty2^2 + @lightz2^2
endif
if @nlight > 2
lds[2] = (@lightx3-xi[reg])^2 + (@lighty3-yi[reg])^2 + (@lightz3-zi[reg])^2
lf = lf + @lightx3^2 + @lighty3^2 + @lightz3^2
endif
if @nlight > 3
lds[3] = (@lightx4-xi[reg])^2 + (@lighty4-yi[reg])^2 + (@lightz4-zi[reg])^2
lf = lf + @lightx4^2 + @lighty4^2 + @lightz4^2
endif
if @nlight > 4
lds[4] = (@lightx5-xi[reg])^2 + (@lighty5-yi[reg])^2 + (@lightz5-zi[reg])^2
lf = lf + @lightx5^2 + @lighty5^2 + @lightz5^2
endif
lf = lf/@nlight
; diffuse value
i = 0
diffuse[reg] = 0
while i < @nlight
diffuse[reg] = diffuse[reg] + lar.m_elements[i].dot(norm)/lds[i]
i = i + 1
endwhile
diffuse[reg] = diffuse[reg]*lf*@bright/@nlight
; specular value
if !isplane
i = 0
while i < @nlight
ray.sub(lar.m_elements[i],hang)
hang.normalize(hang)
specular[reg,i] = -hang.dot(norm)
if specular[reg,i] < 0
specular[reg,i] = 0
endif
specular[reg,i] = specular[reg,i]^shiny[i]*lf*sbright[i]/lds[i]
if shad[0]
specular[reg,i] = 0
endif
if @texflavor == 1
specular[reg,i] = (specular[reg,i]+\
ptexture*@p_texturestrength)
endif
speccol[reg,i] = blend(@ambient,spec[i],specular[reg,i])
if i == 0
rspec[reg] = speccol[reg,i]
rsbright[reg] = sbright[i]
else
rspec[reg] = rspec[reg] + speccol[reg,i]
rsbright[reg] = rsbright[reg] + sbright[i]
endif
i = i + 1
endwhile
rspec[reg] = rspec[reg]/@nlight
scolor = rspec[reg]
rsbright[reg] = rsbright[reg]/@nlight
sbr = rsbright[reg]
endif
if @texflavor == 1 && !isplane
diffuse[reg] = (diffuse[reg]+ptexture*@p_texturestrength)/\
(1+ptexture*@p_texturestrength)
endif
if isplane
if planeno[pj] == 1 && @texflavor_plane1 == 1
diffuse[reg] = (diffuse[reg]+ptexture*@p_texturestrength_plane1)/\
(1+ptexture*@p_texturestrength_plane1)
elseif planeno[pj] == 2 && @texflavor_plane2 == 1
diffuse[reg] = (diffuse[reg]+ptexture*@p_texturestrength_plane2)/\
(1+ptexture*@p_texturestrength_plane2)
elseif planeno[pj] == 3 && @texflavor_plane3 == 1
diffuse[reg] = (diffuse[reg]+ptexture*@p_texturestrength_plane3)/\
(1+ptexture*@p_texturestrength_plane3)
elseif planeno[pj] == 4 && @texflavor_plane4 == 1
diffuse[reg] = (diffuse[reg]+ptexture*@p_texturestrength_plane4)/\
(1+ptexture*@p_texturestrength_plane4)
elseif planeno[pj] == 5 && @texflavor_plane5 == 1
diffuse[reg] = (diffuse[reg]+ptexture*@p_texturestrength_plane5)/\
(1+ptexture*@p_texturestrength_plane5)
endif
endif
oldrsi = rsi
if @refract
refval = (1-@refracval)*@reflcorr
endif
bool inreflect = false
; ; sphere reflections off of a plane - one level only
; ; this may be overwriting the normal plane coloring creating a bug
; if (@reflect || @refract) && reg == 0 && isplane && inter[0]
; ; calculate the reflected ray and the origin vector
; rorigin.init(xi[reg],yi[reg],zi[reg],0)
; ; create reflection vector from the plane
; ctheta = norm.dot(ray);-lxt*vx-lyt*vy-lzt*vz ; N.I
; ctheta = -ctheta
; rray.init(ray.m_x+2*norm.m_x*ctheta, ray.m_y+2*norm.m_y*ctheta, \
; ray.m_z+2*norm.m_z*ctheta, 0)
; rray.normalize(rray)
;
; i = 0
; d = 1e308
; ti = 0
; while i < nsph
; if (i != rsi &&((@showbase || (rad[i] < bradius ) && (real(cen[i])*@sa+imag(cen[i])*\
; @sb+z[i]*@sc <= @pd||!@slice))&&(!circles || \
; circles && ((!showc && rad[i] != rcen) || showc))) && rad[i] > 0)
;
; bi = rray.m_x*(rorigin.m_x-real(cen[i]))+rray.m_y*(rorigin.m_y-imag(cen[i]))+\
; rray.m_z*(rorigin.m_z-z[i])
; ci = (rorigin.m_x-real(cen[i]))^2+(rorigin.m_y-imag(cen[i]))^2+\
; (rorigin.m_z-z[i])^2-rad[i]^2
; arg = bi*bi-ci
; if (arg > 0) ; ray intersects sphere
; ti1 = -bi - sqrt(arg)
; ti2 = -bi + sqrt(arg)
; if ti1 > ti2 ; find smallest ti
; ti = ti2
; else
; ti = ti1
; endif
; if ti > 0 && ti < d
; inter[1] = true
; reg = 1
; regress = 1
; floorrfl = true
; d = ti
; ; sphere parameters for the intersected sphere
; si[reg] = i
; rsi = si[reg]
; endif
; endif
; endif
; i = i + 1
; endwhile
; if floorrfl
;
; ; intersection point
; xi[reg] = rray.m_x*d + rorigin.m_x
; yi[reg] = rray.m_y*d + rorigin.m_y
; zi[reg] = rray.m_z*d + rorigin.m_z
;
; norm.init((xi[reg]-real(cen[si[reg]]))/rad[si[reg]],\
; (yi[reg]-imag(cen[si[reg]]))/rad[si[reg]], \
; (zi[reg]-z[si[reg]])/rad[si[reg]], 0)
;
; ; sphere textures
; if @f_traptexture != DMJ_TrapShapeFlat
; norm.Normalize(norm)
; ; perturb the normals with the textures
; pz = 0
; if @cent
; pz = (xi[reg] + flip(yi[reg])-cen[si[reg]])/rad[si[reg]]
; else
; pz = (xi[reg] + flip(yi[reg]))/rad[si[reg]]
; endif
; if @sphmap
; pz = pz*(1+|pz|)*@sphsize *0.5
; endif
; m_TrapTexture.Init(pz)
; ptexture = m_TrapTexture.Iterate(pz)
; complex tx = m_trapTexture.GetTransformedPoint()
; if @texflavor == 0
; tx = tx*@p_texturestrength
; norm.init(norm.m_x+real(tx),norm.m_y+imag(tx),norm.m_z+cabs(tx),0)
; endif
; endif
; norm.Normalize(norm)
;
; ; illumination parameters
; ; distance squared to light(s). Index is the light number.
; lds[0] = (@lightx-xi[reg])^2 + (@lighty-yi[reg])^2 + (@lightz-zi[reg])^2
; lf = @lightx^2 + @lighty^2 + @lightz^2
; if @nlight > 1
; lds[1] = (@lightx2-xi[reg])^2 + (@lighty2-yi[reg])^2 + (@lightz2-zi[reg])^2
; lf = lf + @lightx2^2 + @lighty2^2 + @lightz2^2
; endif
; if @nlight > 2
; lds[2] = (@lightx3-xi[reg])^2 + (@lighty3-yi[reg])^2 + (@lightz3-zi[reg])^2
; lf = lf + @lightx3^2 + @lighty3^2 + @lightz3^2
; endif
; if @nlight > 3
; lds[3] = (@lightx4-xi[reg])^2 + (@lighty4-yi[reg])^2 + (@lightz4-zi[reg])^2
; lf = lf + @lightx4^2 + @lighty4^2 + @lightz4^2
; endif
; if @nlight > 4
; lds[4] = (@lightx5-xi[reg])^2 + (@lighty5-yi[reg])^2 + (@lightz5-zi[reg])^2
; lf = lf + @lightx5^2 + @lighty5^2 + @lightz5^2
; endif
; lf = lf/@nlight
;
; ; diffuse value
; i = 0
; diffuse[reg] = 0
; while i < @nlight
; diffuse[reg] = diffuse[reg] + lar.m_elements[i].dot(norm)/lds[i]
; i = i + 1
; endwhile
; diffuse[reg] = diffuse[reg]*lf*@bright/@nlight
; ; specular value
; if isplane
; i = 0
; while i < @nlight
; ray.sub(lar.m_elements[i],hang)
; hang.normalize(hang)
; specular[reg,i] = -hang.dot(norm)
; if specular[reg,i] < 0
; specular[reg,i] = 0
; endif
; specular[reg,i] = specular[reg,i]^shiny[i]*lf*sbright[i]/lds[i]
; if shad[0]
; specular[reg,i] = 0
; endif
; if @texflavor == 1
; specular[reg,i] = (specular[reg,i]+\
; ptexture*@p_texturestrength)
; endif
; speccol[reg,i] = blend(@ambient,spec[i],specular[reg,i])
; if i == 0
; rspec[reg] = speccol[reg,i]
; rsbright[reg] = sbright[i]
; else
; rspec[reg] = rspec[reg] + speccol[reg,i]
; rsbright[reg] = rsbright[reg] + sbright[i]
; endif
; i = i + 1
; endwhile
; rspec[reg] = rspec[reg]/@nlight
; scolor = rspec[reg]
; rsbright[reg] = rsbright[reg]/@nlight
; sbr = rsbright[reg]
; endif
; if @texflavor == 1
; diffuse[reg] = (diffuse[reg]+ptexture*@p_texturestrength)/\
; (1+ptexture*@p_texturestrength)
; endif
; endif
; endif
; sphere reflections
if (@reflect || (@refract && @refracval^(reg) > 0.005)) && regress < 9 \
&& refval^(reg) > 0.005 && !isplane
inreflect = true
regress = regress + 1
reg = regress
; calculate the reflected ray and the origin vector
rorigin.init(xi[reg-1],yi[reg-1],zi[reg-1],0)
; create reflection vector [R = I+2*N*(N.I)]
ctheta = norm.dot(ray);-lxt*vx-lyt*vy-lzt*vz ; N.I
ctheta = -ctheta
rray.init(ray.m_x+2*norm.m_x*ctheta, ray.m_y+2*norm.m_y*ctheta, \
ray.m_z+2*norm.m_z*ctheta, 0)
rray.normalize(rray)
inter[reg] = intersect(rorigin, rray, regress, rsi, diffuse[reg], sbr, scolor)
if inter[reg]
si[reg] = rsi
rspec[reg] = scolor
diffuse[reg] = diffuse[reg-1]
rsbright[reg] = sbr
endif
endif
if @refract && regress < 8 && @refracval^(reg) > 0.005 && !isplane
; increment the regression counter if a reflection vector was sent
if oldrsi != rsi || !inreflect
regress = regress + 1
reg = regress
endif
rorigin.init(xi[reg-1],yi[reg-1],zi[reg-1],0)
ctheta = norm.dot(ray) ; N.I
ctheta = -ctheta
; calculate the internal refraction ray.
; T = [I/rfi-(ctheta2-ctheta/rfi)*N]
; Snell's law: sin(angle1)/sin(angle2) = rf2/rf1 = rfi
ctheta2 = sqrt(1 - (1-ctheta^2)/@rfi^2) ; T.I
comp = ctheta2 - ctheta/@rfi
rinternal.init(ray.m_x/@rfi-norm.m_x*comp,ray.m_y/@rfi-norm.m_y*comp,\
ray.m_z/@rfi-norm.m_z*comp,0)
rinternal.normalize(rinternal)
; calculate the intersection at the back of the sphere
bi = rinternal.m_x*(rorigin.m_x-real(cen[oldrsi]))+\
rinternal.m_y*(rorigin.m_y-imag(cen[oldrsi]))+\
rinternal.m_z*(rorigin.m_z-z[oldrsi])
ci = (rorigin.m_x-real(cen[oldrsi]))^2+\
(rorigin.m_y-imag(cen[oldrsi]))^2+\
(rorigin.m_z-z[oldrsi])^2-rad[oldrsi]^2
arg = bi*bi-ci
if (arg > 0) ; ray intersects sphere
ti1 = -bi - sqrt(arg)
ti2 = -bi + sqrt(arg)
if ti1 < ti2 ; find largest ti
ti = ti2
else
ti = ti1
endif
endif
float xb = rorigin.m_x+rinternal.m_x*ti
float yb = rorigin.m_y+rinternal.m_y*ti
float zb = rorigin.m_z+rinternal.m_z*ti
; calculate the surface normal at the back of the sphere
norm.init(-(xb-real(cen[oldrsi]))/rad[oldrsi],\
-(yb-imag(cen[oldrsi]))/rad[oldrsi], \
-(zb-z[oldrsi])/rad[oldrsi], 0)
norm.Normalize(norm)
; calculate the refraction vector from the back of the sphere
ctheta = norm.dot(rinternal) ; N.I
ctheta = -ctheta
ctheta2 = sqrt(1 - (1-ctheta^2)*@rfi^2) ; T.I
comp = ctheta2 - ctheta*@rfi
rrefract.init(rinternal.m_x*@rfi-norm.m_x*comp,rinternal.m_y*@rfi-norm.m_y*comp,\
rinternal.m_z*@rfi-norm.m_z*comp,0)
rrefract.normalize(rrefract)
rBackSph.init(xb,yb,zb,0)
; determine the next sphere intersection
inter[reg] = intersect(rbacksph, rrefract, regress, oldrsi, diffuse[reg], sbr, scolor)
if sin(real(acos(ctheta))) <= 1/@rfi
passed = true
endif
if inter[reg]
si[reg] = oldrsi
rspec[reg] = scolor
diffuse[reg] = diffuse[reg-1]
rsbright[reg] = sbr
endif
endif
endif
return inter[reg]
endfunc
bool func BoundXY(complex grid)
bool outside = false
float dx = (xmax+xmin)/2
float dy = (ymax+ymin)/2
float x = (xmax-xmin)/2
float y = (ymax-ymin)/2
if ((real(grid)-dx)^2/x^2 + (imag(grid)-dy)^2/y^2 - 1 > 0.01)
outside = true
endif
return outside
endfunc
color func Result()
color return_color = rgba(0,0,0,1)
color boundary_color = rgb(0.5,0.5,0.5)
color flrclr = rgba(0,0,0,0)
color tempflr[10]
color base[10]
color temp = rgba(0,0,0,1)
color cpat = rgba(0,0,0,1)
int i = 0
cp = false
if @f_trapcolor != ColorTrapNoColor
while i <= reg
cp = true
pz = 0
if @centp
pz = (xi[i] + flip(yi[i])-cen[si[i]])/rad[si[i]]
else
pz = (xi[i] + flip(yi[i]))/rad[si[i]]
endif
if @sphmapp
pz = pz*(1+|pz|)*@sphsizep *0.25
endif
m_TrapColor.Init(pz)
colpat[i] = m_TrapColor.Iterate(pz)
ispl[i] = isplane
flrrfl[i] = floorrfl
i = i + 1
endwhile
endif
; base coloring
float ctype = 0
i = 0
while i <= reg
if @selctype == "index"
ctype = (si[i] % @mod)/@mod
elseif @selctype == "level"
ctype = (lev[si[i]] % @mod)/@mod
elseif @selctype == "generator"
ctype = (gen[si[i]] % @mod)/@mod
elseif @selctype == "position"
ctype = (cabs(cen[si[i]])%@mod)/@mod
elseif @selctype == "size"
ctype = ((@mod/rad[si[i]])%@mod)/@mod
elseif @selctype == "size threshold"
if rad[si[i]] < @rthresh
ctype = 0
else
ctype = 0.5
endif
endif
base[i] = gradient(ctype)
i = i + 1
endwhile
if inter[0]
ispl[0] = isplane
flrrfl[0] = floorrfl
base[0] = compose(base[0],hsl(hue(base[0]),sat(base[0]),\
@lumfac*lum(base[0])), 1-diffuse[0]^2)
if passed
base[0] = blend(@backdrop,base[0],@blendval)
endif
return_color = m_MergeLight.FullMerge(base[0], rspec[0], \
rsbright[0])
tempflr[0] = return_color
else
color return_color = rgba(0,0,0,1)
endif
i = 1
while i <= reg
ispl[i] = isplane
flrrfl[i] = floorrfl
if inter[i]
base[i] = compose(base[i],hsl(hue(base[i]),sat(base[i]),\
@lumfac*lum(base[i])), 1-diffuse[i]^2)
if passed && @refract
base[i] = blend(@backdrop,base[i],@blendval)
endif
temp = m_MergeLight.FullMerge(base[i], rspec[i], \
rsbright[i])
if @refract
float lm = (1-lum(base[i]))/@tradj
lm = 1 - lm
base[i] = hsla(hue(base[i]),sat(base[i])/@tradj,lm,1/@tradj)
temp = m_MergeLight.FullMerge(base[i], rspec[i], 1)
endif
if @reflect
if !floorrfl
return_color = blend(return_color,temp,refval^i)
else
return_color = temp
endif
elseif @refract
return_color = blend(return_color,temp,@refracval^i)
return_color = blend(return_color,temp,refval^i)
if @pset != 0
return_color = blend(@backdrop,return_color,@blendval)
endif
endif
tempflr[i] = return_color
endif
i = i + 1
endwhile
if inter[0] && cp
cpat = colpat[0]
endif
i = 1
while i <= reg
if inter[i]
temp = colpat[i]
if @reflect
if !floorrfl
cpat = blend(cpat,temp,refval^i)
else
cpat = temp
endif
elseif @refract
if !floorrfl
cpat = blend(cpat,temp,refval^i)
else
cpat = temp
endif
cpat = blend(cpat,temp,@refracval^i)
endif
endif
i = i + 1
endwhile
if cp
if @nmerge == 1
temp = cpat
cpat = return_color
return_color = temp
endif
endif
return_color = m_MergeColor.FullMerge(cpat, return_color, @opacity)
if shad[0]
return_color = blend(return_color,@ambient,@shadval)
endif
if @displaybound && !BoundXY(#pixel*#magn/2*@boundadj)
return_color = blend(boundary_color, return_color,0.5)
endif
i = 0
cp = false
if planeno[pj] == 1
if @f_trapcolor_plane1 != ColorTrapNoColor
cp = true
float ang = atan2(pa.pl[pj].pb-flip(pa.pl[pj].pa))
complex pang = (0,1)^(ang*2/#pi)
if !@pper1
pz = #pixel*pang
else
pz = xi[reg]+ flip(yi[reg])*pang
pz = real(pz) + flip(imag(pz)+zi[reg]*(1-diffdotz))
endif
m_TrapColor_plane1.Init(pz)
colpat[reg] = m_TrapColor_plane1.Iterate(pz)
endif
if inter[reg] && cp
cpat = colpat[reg]
endif
if @usepgrad1
flrclr = gradient(pj/planes)
else
flrclr = @plplaincolor1
endif
if @f_traptexture_plane1 != DMJ_TrapShapeFlat && reg > 0
if @texflavor_plane1 == 0
flrclr = blend(flrclr,tempflr[reg],@adjdif1*(norm.m_x+norm.m_y+ norm.m_z)/3)
else
flrclr = blend(flrclr,tempflr[reg],\
@adjdif1*ptexture*@p_texturestrength_plane1/\
(1+ptexture*@p_texturestrength_plane1))
endif
endif
if cp
if @nmerge_plane1 == 1
temp = cpat
cpat = flrclr
flrclr = temp
endif
flrclr = m_MergeColor_plane1.FullMerge(cpat, flrclr, @opacity_plane1)
endif
if reg == 0
flrclr = blend(@plambient1,flrclr,@adjdif1*diffuse[0])
else
float dcorr = 1-pd[reg]/sqrt(lf)*2
if dcorr < 0
dcorr = 0
elseif dcorr > 1
dcorr = 1
endif
flrclr = blend(tempflr[reg],flrclr,dcorr)
endif
if @tpfade1
flrclr = rgba(red(flrclr),green(flrclr),blue(flrclr),@adjdif1*diffuse[reg]/pfade[pj])
endif
if shad[0]
flrclr = compose(flrclr,@ambient,@shadval)
endif
if reg > 0
flrclr = compose(flrclr,tempflr[reg],1-@flr2sph)
endif
elseif planeno[pj] == 2
if @f_trapcolor_plane2 != ColorTrapNoColor
cp = true
float ang = atan2(pa.pl[pj].pb-flip(pa.pl[pj].pa))
complex pang = (0,1)^(ang*2/#pi)
if !@pper2
pz = #pixel*pang
else
pz = xi[reg]+ flip(yi[reg])*pang
pz = real(pz) + flip(imag(pz)+zi[reg]*(1-diffdotz))
endif
m_TrapColor_plane2.Init(pz)
colpat[reg] = m_TrapColor_plane2.Iterate(pz)
endif
if inter[reg] && cp
cpat = colpat[reg]
endif
if @usepgrad2
flrclr = gradient(pj/planes)
else
flrclr = @plplaincolor2
endif
if @f_traptexture_plane2 != DMJ_TrapShapeFlat && reg > 0
if @texflavor_plane2 == 0
flrclr = blend(flrclr,tempflr[reg],@adjdif2*(norm.m_x+norm.m_y+ norm.m_z)/3)
else
flrclr = blend(flrclr,tempflr[reg],\
@adjdif2*ptexture*@p_texturestrength_plane2/\
(1+ptexture*@p_texturestrength_plane2))
endif
endif
if cp
if @nmerge_plane2 == 1
temp = cpat
cpat = flrclr
flrclr = temp
endif
flrclr = m_MergeColor_plane2.FullMerge(cpat, flrclr, @opacity_plane2)
endif
if reg == 0
flrclr = blend(@plambient2,flrclr,@adjdif2*diffuse[reg])
else
float dcorr = 1-pd[reg]/sqrt(lf)*2
if dcorr < 0
dcorr = 0
elseif dcorr > 1
dcorr = 1
endif
flrclr = blend(tempflr[reg],flrclr,dcorr)
endif
if @tpfade2
flrclr = rgba(red(flrclr),green(flrclr),blue(flrclr),@adjdif2*diffuse[reg]/pfade[pj])
endif
if shad[0]
flrclr = compose(flrclr,@ambient,@shadval)
endif
if reg > 0
flrclr = compose(flrclr,tempflr[reg],1-@flr2sph)
endif
elseif planeno[pj] == 3
if @f_trapcolor_plane3 != ColorTrapNoColor
cp = true
float ang = atan2(pa.pl[pj].pb-flip(pa.pl[pj].pa))
complex pang = (0,1)^(ang*2/#pi)
if !@pper3
pz = #pixel*pang
else
pz = xi[reg]+ flip(yi[reg])*pang
pz = real(pz) + flip(imag(pz)+zi[reg]*(1-diffdotz))
endif
m_TrapColor_plane3.Init(pz)
colpat[reg] = m_TrapColor_plane3.Iterate(pz)
endif
if inter[reg] && cp
cpat = colpat[reg]
endif
if @usepgrad3
flrclr = gradient(pj/planes)
else
flrclr = @plplaincolor3
endif
if @f_traptexture_plane3 != DMJ_TrapShapeFlat && reg > 0
if @texflavor_plane3 == 0
flrclr = blend(flrclr,tempflr[reg],@adjdif3*(norm.m_x+norm.m_y+ norm.m_z)/3)
else
flrclr = blend(flrclr,tempflr[reg],\
@adjdif3*ptexture*@p_texturestrength_plane3/\
(1+ptexture*@p_texturestrength_plane3))
endif
endif
if cp
if @nmerge_plane3 == 1
temp = cpat
cpat = flrclr
flrclr = temp
endif
flrclr = m_MergeColor_plane1.FullMerge(cpat, flrclr, @opacity_plane3)
endif
if reg == 0
flrclr = blend(@plambient3,flrclr,@adjdif3*diffuse[reg])
else
float dcorr = 1-pd[reg]/sqrt(lf)*2
if dcorr < 0
dcorr = 0
elseif dcorr > 1
dcorr = 1
endif
flrclr = blend(tempflr[reg],flrclr,dcorr)
endif
if @tpfade3
flrclr = rgba(red(flrclr),green(flrclr),blue(flrclr),@adjdif3*diffuse[reg]/pfade[pj])
endif
if shad[0]
flrclr = compose(flrclr,@ambient,@shadval)
endif
if reg > 0
flrclr = compose(flrclr,tempflr[reg],1-@flr2sph)
endif
elseif planeno[pj] == 4
if @f_trapcolor_plane4 != ColorTrapNoColor
cp = true
float ang = atan2(pa.pl[pj].pb-flip(pa.pl[pj].pa))
complex pang = (0,1)^(ang*2/#pi)
if !@pper4
pz = #pixel*pang
else
pz = xi[reg]+ flip(yi[reg])*pang
pz = real(pz) + flip(imag(pz)+zi[reg]*(1-diffdotz))
endif
m_TrapColor_plane4.Init(pz)
colpat[reg] = m_TrapColor_plane4.Iterate(pz)
endif
if inter[reg] && cp
cpat = colpat[reg]
endif
if @usepgrad4
flrclr = gradient(pj/planes)
else
flrclr = @plplaincolor4
endif
if @f_traptexture_plane4 != DMJ_TrapShapeFlat && reg > 0
if @texflavor_plane4 == 0
flrclr = blend(flrclr,tempflr[reg],@adjdif4*(norm.m_x+norm.m_y+ norm.m_z)/3)
else
flrclr = blend(flrclr,tempflr[reg],\
@adjdif4*ptexture*@p_texturestrength_plane4/\
(1+ptexture*@p_texturestrength_plane4))
endif
endif
if cp
if @nmerge_plane4 == 1
temp = cpat
cpat = flrclr
flrclr = temp
endif
flrclr = m_MergeColor_plane4.FullMerge(cpat, flrclr, @opacity_plane4)
endif
if reg == 0
flrclr = blend(@plambient4,flrclr,@adjdif4*diffuse[reg])
else
float dcorr = 1-pd[reg]/sqrt(lf)*2
if dcorr < 0
dcorr = 0
elseif dcorr > 1
dcorr = 1
endif
flrclr = blend(tempflr[reg],flrclr,dcorr)
endif
if @tpfade4
flrclr = rgba(red(flrclr),green(flrclr),blue(flrclr),@adjdif4*diffuse[reg]/pfade[pj])
endif
if shad[0]
flrclr = compose(flrclr,@ambient,@shadval)
endif
if reg > 0
flrclr = compose(flrclr,tempflr[reg],1-@flr2sph)
endif
elseif planeno[pj] == 5
if @f_trapcolor_plane5 != ColorTrapNoColor
cp = true
float ang = atan2(pa.pl[pj].pb-flip(pa.pl[pj].pa))
complex pang = (0,1)^(ang*2/#pi)
if !@pper5
pz = #pixel*pang
else
pz = xi[reg]+ flip(yi[reg])*pang
pz = real(pz) + flip(imag(pz)+zi[reg]*(1-diffdotz))
endif
m_TrapColor_plane5.Init(pz)
colpat[reg] = m_TrapColor_plane5.Iterate(pz)
endif
if inter[reg] && cp
cpat = colpat[reg]
endif
if @usepgrad5
flrclr = gradient(pj/planes)
else
flrclr = @plplaincolor5
endif
if @f_traptexture_plane5 != DMJ_TrapShapeFlat && reg > 0
if @texflavor_plane5 == 0
flrclr = blend(flrclr,tempflr[reg],@adjdif5*(norm.m_x+norm.m_y+ norm.m_z)/3)
else
flrclr = blend(flrclr,tempflr[reg],\
@adjdif5*ptexture*@p_texturestrength_plane5/\
(1+ptexture*@p_texturestrength_plane5))
endif
endif
if cp
if @nmerge_plane5 == 1
temp = cpat
cpat = flrclr
flrclr = temp
endif
flrclr = m_MergeColor_plane5.FullMerge(cpat, flrclr, @opacity_plane5)
endif
if reg == 0
flrclr = blend(@plambient5,flrclr,@adjdif5*diffuse[reg])
else
float dcorr = 1-pd[reg]/sqrt(lf)*2
if dcorr < 0
dcorr = 0
elseif dcorr > 1
dcorr = 1
endif
flrclr = blend(tempflr[reg],flrclr,dcorr)
endif
if @tpfade5
flrclr = rgba(red(flrclr),green(flrclr),blue(flrclr),@adjdif5*diffuse[reg]/pfade[pj])
endif
if shad[0]
flrclr = compose(flrclr,@ambient,@shadval)
endif
if reg > 0
flrclr = compose(flrclr,tempflr[reg],1-@flr2sph)
endif
endif
; debugging comment:
; both return_color and flrclr return the reflected spheres!
if !isplane || (isplane && floorrfl)
return return_color
else
return flrclr
endif
endfunc
bool inter[10]
bool isplane
bool ispl[10]
int reg
bool floorrfl
bool flrrfl[10]
protected:
InvertSphere is
PlaneArray pa
TrapShape m_TrapTexture
TrapShape m_TrapTexture_plane1
TrapShape m_TrapTexture_plane2
TrapShape m_TrapTexture_plane3
TrapShape m_TrapTexture_plane4
TrapShape m_TrapTexture_plane5
ColorTrap m_TrapColor
ColorTrap m_TrapColor_plane1
ColorTrap m_TrapColor_plane2
ColorTrap m_TrapColor_plane3
ColorTrap m_TrapColor_plane4
ColorTrap m_TrapColor_plane5
DefaultColorMerge m_MergeColor
DefaultColorMerge m_MergeColor_plane1
DefaultColorMerge m_MergeColor_plane2
DefaultColorMerge m_MergeColor_plane3
DefaultColorMerge m_MergeColor_plane4
DefaultColorMerge m_MergeColor_plane5
IllumColorMerge m_MergeLight
Vector norm
Vector pnorm
Vector hang
Vector rOrigin
Vector rRay
Vector rInternal
Vector rRefract
Vector rBackSph
float rsbright[10]
float xi[10]
float yi[10]
float zi[10]
color colpat[10]
color rspec[10]
float sitrans[10]
float lds[5]
bool shad[10]
complex cen[]
float z[]
float rad[]
int lev[]
int gen[]
float rcen
int nsph
bool zsort
float bradius
bool circles
bool showc
bool cp
float ptexture
complex pz
float xmin
float ymin
float zmin
float xmax
float ymax
float zmax
float refval
bool passed
float pfade[]
float pnx[]
float pny[]
float pnz[]
float pd[]
float diffdotz
int pj
int planes
int planeno[]
float lf
bool sphtoplane
default:
title = "Raytrace Spheres"
int param v_raytracespheres
caption = "Version (Raytrace Spheres)"
default = 100
hint = "This version parameter is used to detect when a change has been made to the formula that is incompatible with the previous version. When that happens, this field will reflect the old version number to alert you to the fact that an alternate rendering is being used."
visible = @v_raytracespheres < 100
endparam
heading
caption = "Illumination model"
expanded = false
endheading
param selctype
caption = "Coloring mode"
default = 1
enum = "index" "level" "generator" "position" "size" "size threshold"
endparam
heading
text = "For the 'generator' option the modulus should equal the \
number of generator spheres. For this condition no two \
spheres of the same color will touch (except for Mobius)."
visible = @selctype == "generator"
endheading
heading
text = " Tetrahedron: 4; Cube: 7; Octahedron: 7; \
Dodecahedron: 13; Circle: circles + 1; Mobius: 4."
visible = @selctype == "generator"
endheading
heading
text = "Specular parameters are found under 'Light parameters'."
endheading
int param mod
caption = "Color modulus"
default = 8
visible = @selctype != "size threshold"
endparam
float param rthresh
caption = "size threshold"
default = 0.03
visible = @selctype == "size threshold"
endparam
float param bright
caption = "Total brightness"
default = 0.9
min = 0
endparam
float param lumfac
caption = "Luminosity factor"
default = 0.2
min = 0
max = 1
endparam
IllumColorMerge param f_lightmerge
caption = "Light Merge"
default = IllumColorMerge
endparam
color param ambient
caption = "Ambient color"
default = rgba(0.05,0.05,0.05,1)
endparam
bool param shadow
caption = "Shadows"
default = false
endparam
float param shadval
caption = "Shadow value"
default = 0.5
visible = @shadow
endparam
bool param reflect
caption = "Reflections"
default = false
visible = !@refract
endparam
float param refval
caption = "Reflect value"
default = 0.5
visible = @reflect && !@refract
endparam
float param flr2sph
caption = "Plane to sphere"
default = 0.5
min = 0
max = 1
visible = (@reflect || @refract) && @pset != "none"
endparam
bool param refract
caption = "Refractions"
default = false
endparam
float param rfi
caption = "Refractive index"
default = 1.33
visible = @refract
endparam
float param refracval
caption = "Refract value"
default = 0.5
visible = @refract
endparam
float param reflcorr
caption = "Reflect correction"
default = 1.0
visible = @refract
endparam
color param backdrop
caption = "Refract backdrop"
default = rgba(0.5,0.5,0.5,1)
visible = @refract
hint = "Coloring for refraction rays that pass through all the \
spheres. Try setting to the background color in the \
outside tab."
endparam
float param blendval
caption = "Backdrop blend"
default = 0.5
visible = @refract
endparam
float param tradj
caption = "Refract color adj"
default = 2
min = 1
visible = @refract
hint = "Adjusts saturation and luminosity of refracted colors."
endparam
heading
caption = "Sphere Textures"
endheading
TrapShape param f_traptexture
caption = "Sphere Textures"
default = DMJ_TrapShapeFlat
expanded = false
hint = "A trap shape that is used as a texture. Textures do not change \
the shape of the trap but may change its coloring."
endparam
float param p_texturestrength
caption = "Texture Amount"
default = 0.0
hint = "Sets the overall amount of texture to be used. Larger numbers \
will increase the effect of the texture. A value of 0 will remove \
the effects of the texture."
visible = (@f_traptexture != DMJ_TrapShapeFlat)
endparam
param texflavor
caption = "Texture type"
default = 0
enum = "Transformed" "Standard"
visible = (@f_traptexture != DMJ_TrapShapeFlat)
endparam
bool param cent
caption = "Center on sphere"
default = true
visible = (@f_traptexture != DMJ_TrapShapeFlat)
endparam
bool param sphmap
caption = "Spherical mapping"
default = false
visible = (@f_traptexture != DMJ_TrapShapeFlat)
endparam
float param sphsize
caption = "Map size"
default = 0.5
visible = @sphmap && (@f_traptexture != DMJ_TrapShapeFlat)
endparam
heading
caption = "Plane Textures"
endheading
heading
text = "Floor Plane"
visible = @pset == "floor" || @pset == "floor-back" || @pset == "floor-left" \
|| @pset == "floor-right" || @pset == "floor-top" \
|| @pset == "floor-back-left"|| @pset == "floor-back-right"\
|| @pset == "floor-left-right" || @pset == "floor-back-top" \
|| @pset == "floor-left-top"|| @pset == "floor-right-top" \
|| @pset == "floor-back-left-right" || @pset == "floor-back-left-top" \
|| @pset == "floor-back-right-top" ||@pset == "floor-left-right-top" \
|| @pset == "open box"
endheading
TrapShape param f_traptexture_plane1
caption = "Plane Textures"
default = DMJ_TrapShapeFlat
expanded = false
hint = "A trap shape that is used as a texture. Textures do not change \
the shape of the trap but may change its coloring."
visible = @pset == "floor" || @pset == "floor-back" || @pset == "floor-left" \
|| @pset == "floor-right" || @pset == "floor-top" \
|| @pset == "floor-back-left"|| @pset == "floor-back-right"\
|| @pset == "floor-left-right" || @pset == "floor-back-top" \
|| @pset == "floor-left-top"|| @pset == "floor-right-top" \
|| @pset == "floor-back-left-right" || @pset == "floor-back-left-top" \
|| @pset == "floor-back-right-top" ||@pset == "floor-left-right-top" \
|| @pset == "open box"
endparam
float param p_texturestrength_plane1
caption = "Texture Amount"
default = 0.0
hint = "Sets the overall amount of texture to be used. Larger numbers \
will increase the effect of the texture. A value of 0 will remove \
the effects of the texture."
visible = (@f_traptexture_plane1 != DMJ_TrapShapeFlat)
endparam
param texflavor_plane1
caption = "Texture type"
default = 0
enum = "Transformed" "Standard"
visible = (@f_traptexture_plane1 != DMJ_TrapShapeFlat)
endparam
heading
text = "Back Plane"
visible = @pset == "back" || @pset == "floor-back"\
|| @pset == "back-left" || @pset == "back-right" \
|| @pset == "back-top" || @pset == "floor-back-left"\
|| @pset == "floor-back-right" || @pset == "back-left-right" \
|| @pset == "floor-back-top" || @pset == "back-left-top" \
|| @pset == "back-right-top" || @pset == "floor-back-left-right" \
|| @pset == "floor-back-left-top" || @pset == "floor-back-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box"
endheading
TrapShape param f_traptexture_plane2
caption = "Plane Textures"
default = DMJ_TrapShapeFlat
expanded = false
hint = "A trap shape that is used as a texture. Textures do not change \
the shape of the trap but may change its coloring."
visible = @pset == "back" || @pset == "floor-back"\
|| @pset == "back-left" || @pset == "back-right" \
|| @pset == "back-top" || @pset == "floor-back-left"\
|| @pset == "floor-back-right" || @pset == "back-left-right" \
|| @pset == "floor-back-top" || @pset == "back-left-top" \
|| @pset == "back-right-top" || @pset == "floor-back-left-right" \
|| @pset == "floor-back-left-top" || @pset == "floor-back-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box"
endparam
float param p_texturestrength_plane2
caption = "Texture Amount"
default = 0.0
hint = "Sets the overall amount of texture to be used. Larger numbers \
will increase the effect of the texture. A value of 0 will remove \
the effects of the texture."
visible = (@f_traptexture_plane2 != DMJ_TrapShapeFlat)
endparam
param texflavor_plane2
caption = "Texture type"
default = 0
enum = "Transformed" "Standard"
visible = (@f_traptexture_plane2 != DMJ_TrapShapeFlat)
endparam
heading
text = "Left Plane"
visible = @pset == "left" || @pset == "floor-left" || @pset == "back-left"\
|| @pset == "left-right" || @pset == "left-top" \
|| @pset == "floor-back-left" || @pset == "floor-left-right" \
|| @pset == "back-left-right" || @pset == "floor-left-top" \
|| @pset == "back-left-top" || @pset == "left-right-top" \
|| @pset == "floor-back-left-right" || @pset == "floor-back-left-top" \
|| @pset == "floor-left-right-top" || @pset == "back-left-right-top" \
|| @pset == "open box"
endheading
TrapShape param f_traptexture_plane3
caption = "Plane Textures"
default = DMJ_TrapShapeFlat
expanded = false
hint = "A trap shape that is used as a texture. Textures do not change \
the shape of the trap but may change its coloring."
visible = @pset == "left" || @pset == "floor-left" || @pset == "back-left"\
|| @pset == "left-right" || @pset == "left-top" \
|| @pset == "floor-back-left" || @pset == "floor-left-right" \
|| @pset == "back-left-right" || @pset == "floor-left-top" \
|| @pset == "back-left-top" || @pset == "left-right-top" \
|| @pset == "floor-back-left-right" || @pset == "floor-back-left-top" \
|| @pset == "floor-left-right-top" || @pset == "back-left-right-top" \
|| @pset == "open box"
endparam
float param p_texturestrength_plane3
caption = "Texture Amount"
default = 0.0
hint = "Sets the overall amount of texture to be used. Larger numbers \
will increase the effect of the texture. A value of 0 will remove \
the effects of the texture."
visible = (@f_traptexture_plane3 != DMJ_TrapShapeFlat)
endparam
param texflavor_plane3
caption = "Texture type"
default = 0
enum = "Transformed" "Standard"
visible = (@f_traptexture_plane3 != DMJ_TrapShapeFlat)
endparam
heading
text = "Right Plane"
visible = @pset == "right" || @pset == "floor-right" \
|| @pset == "back-right" || @pset == "left-right" \
|| @pset == "right-top" || @pset == "floor-back-right"\
|| @pset == "floor-left-right" || @pset == "back-left-right" \
|| @pset == "floor-right-top" || @pset == "back-right-top" \
|| @pset == "left-right-top" || @pset == "floor-back-left-right" \
|| @pset == "floor-back-right-top" || @pset == "floor-left-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box"
endheading
TrapShape param f_traptexture_plane4
caption = "Plane Textures"
default = DMJ_TrapShapeFlat
expanded = false
hint = "A trap shape that is used as a texture. Textures do not change \
the shape of the trap but may change its coloring."
visible = @pset == "right"|| @pset == "floor-right" \
|| @pset == "back-right" || @pset == "left-right" \
|| @pset == "right-top" || @pset == "floor-back-right"\
|| @pset == "floor-left-right" || @pset == "back-left-right" \
|| @pset == "floor-right-top" || @pset == "back-right-top" \
|| @pset == "left-right-top" || @pset == "floor-back-left-right" \
|| @pset == "floor-back-right-top" || @pset == "floor-left-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box"
endparam
float param p_texturestrength_plane4
caption = "Texture Amount"
default = 0.0
hint = "Sets the overall amount of texture to be used. Larger numbers \
will increase the effect of the texture. A value of 0 will remove \
the effects of the texture."
visible = (@f_traptexture_plane4 != DMJ_TrapShapeFlat)
endparam
param texflavor_plane4
caption = "Texture type"
default = 0
enum = "Transformed" "Standard"
visible = (@f_traptexture_plane4 != DMJ_TrapShapeFlat)
endparam
heading
text = "Top Plane"
visible = @pset == "top" || @pset == "floor-top" || @pset == "back-top" \
|| @pset == "left-top" || @pset == "right-top" \
|| @pset == "floor-back-top" || @pset == "floor-left-top" \
|| @pset == "back-left-top" || @pset == "floor-right-top" \
|| @pset == "back-right-top" || @pset == "left-right-top" \
|| @pset == "floor-back-left-top" \
|| @pset == "floor-back-right-top" ||@pset == "floor-left-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box"
endheading
TrapShape param f_traptexture_plane5
caption = "Plane Textures"
default = DMJ_TrapShapeFlat
expanded = false
hint = "A trap shape that is used as a texture. Textures do not change \
the shape of the trap but may change its coloring."
visible = @pset == "top" || @pset == "floor-top" || @pset == "back-top" \
|| @pset == "left-top" || @pset == "right-top" \
|| @pset == "floor-back-top" || @pset == "floor-left-top" \
|| @pset == "back-left-top" || @pset == "floor-right-top" \
|| @pset == "back-right-top" || @pset == "left-right-top" \
|| @pset == "floor-back-left-top" \
|| @pset == "floor-back-right-top" ||@pset == "floor-left-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box"
endparam
float param p_texturestrength_plane5
caption = "Texture Amount"
default = 0.0
hint = "Sets the overall amount of texture to be used. Larger numbers \
will increase the effect of the texture. A value of 0 will remove \
the effects of the texture."
visible = (@f_traptexture_plane5 != DMJ_TrapShapeFlat)
endparam
param texflavor_plane5
caption = "Texture type"
default = 0
enum = "Transformed" "Standard"
visible = (@f_traptexture_plane5 != DMJ_TrapShapeFlat)
endparam
heading
caption = "Patterns and Colors"
endheading
heading
caption = "Spheres"
endheading
ColorTrap param f_trapcolor
caption = "Sphere Colors"
default = ColorTrapNoColor
expanded = false
hint = "A trap shape that is used as a color or pattern."
endparam
bool param centp
caption = "Center on sphere"
default = true
visible = (@f_trapcolor != ColorTrapNoColor)
endparam
bool param sphmapp
caption = "Spherical mapping"
default = false
visible = (@f_trapcolor != ColorTrapNoColor)
endparam
float param sphsizep
caption = "Map size"
default = 1.0
visible = @sphmapp && (@f_trapcolor != ColorTrapNoColor)
endparam
heading
caption = "Sphere Color Merge"
visible = @f_trapcolor != ColorTrapNoColor
endheading
DefaultColorMerge param f_colormerge
caption = "Color Merge"
default = DefaultColorMerge
visible = @f_trapcolor != ColorTrapNoColor
endparam
param nmerge
caption = "Merge order"
default = 0
enum = "Base on Top" "Base on Bottom"
visible = @f_trapcolor != ColorTrapNoColor
endparam
float param opacity
caption = "Merge Opacity"
default = 1.0
visible = @f_trapcolor != ColorTrapNoColor
endparam
heading
caption = "Planes"
endheading
heading
text = "Floor Plane"
visible = @pset == "floor" || @pset == "floor-back" || @pset == "floor-left" \
|| @pset == "floor-right" || @pset == "floor-top" \
|| @pset == "floor-back-left"|| @pset == "floor-back-right"\
|| @pset == "floor-left-right" || @pset == "floor-back-top" \
|| @pset == "floor-left-top"|| @pset == "floor-right-top" \
|| @pset == "floor-back-left-right" || @pset == "floor-back-left-top" \
|| @pset == "floor-back-right-top" ||@pset == "floor-left-right-top" \
|| @pset == "open box"
endheading
bool param pper1
caption = "Use perspective"
default = false
visible = ((@f_traptexture_plane1 != DMJ_TrapShapeFlat) || \
(@f_trapcolor_plane1 != ColorTrapNoColor))&& \
(@pset == "floor" || @pset == "floor-back" || @pset == "floor-left" \
|| @pset == "floor-right" || @pset == "floor-top" \
|| @pset == "floor-back-left"|| @pset == "floor-back-right"\
|| @pset == "floor-left-right" || @pset == "floor-back-top" \
|| @pset == "floor-left-top"|| @pset == "floor-right-top" \
|| @pset == "floor-back-left-right" || @pset == "floor-back-left-top" \
|| @pset == "floor-back-right-top" ||@pset == "floor-left-right-top" \
|| @pset == "open box")
endparam
float param adjdif1
caption = "Diffuse adjustment"
default = 1.0
visible = @pset == "floor" || @pset == "floor-back" || @pset == "floor-left" \
|| @pset == "floor-right" || @pset == "floor-top" \
|| @pset == "floor-back-left"|| @pset == "floor-back-right"\
|| @pset == "floor-left-right" || @pset == "floor-back-top" \
|| @pset == "floor-left-top"|| @pset == "floor-right-top" \
|| @pset == "floor-back-left-right" || @pset == "floor-back-left-top" \
|| @pset == "floor-back-right-top" ||@pset == "floor-left-right-top" \
|| @pset == "open box"
endparam
ColorTrap param f_trapcolor_plane1
caption = "Plane Colors"
default = ColorTrapNoColor
expanded = false
hint = "A trap shape that is used as a color or pattern."
visible = @pset == "floor" || @pset == "floor-back" || @pset == "floor-left" \
|| @pset == "floor-right" || @pset == "floor-top" \
|| @pset == "floor-back-left"|| @pset == "floor-back-right"\
|| @pset == "floor-left-right" || @pset == "floor-back-top" \
|| @pset == "floor-left-top"|| @pset == "floor-right-top" \
|| @pset == "floor-back-left-right" || @pset == "floor-back-left-top" \
|| @pset == "floor-back-right-top" ||@pset == "floor-left-right-top" \
|| @pset == "open box"
endparam
heading
caption = "Plane Color Merge"
visible = @f_trapcolor_plane1 != ColorTrapNoColor
endheading
DefaultColorMerge param f_colormerge_plane1
caption = "Color Merge"
default = DefaultColorMerge
visible = @f_trapcolor_plane1 != ColorTrapNoColor
endparam
param nmerge_plane1
caption = "Merge order"
default = 0
enum = "Base on Top" "Base on Bottom"
visible = @f_trapcolor_plane1 != ColorTrapNoColor
endparam
float param opacity_plane1
caption = "Merge Opacity"
default = 0.5
visible = @f_trapcolor_plane1 != ColorTrapNoColor
endparam
bool param tpfade1
caption = "Use Distance Fade"
default = false
visible = @pset == "floor" || @pset == "floor-back" || @pset == "floor-left" \
|| @pset == "floor-right" || @pset == "floor-top" \
|| @pset == "floor-back-left"|| @pset == "floor-back-right"\
|| @pset == "floor-left-right" || @pset == "floor-back-top" \
|| @pset == "floor-left-top"|| @pset == "floor-right-top" \
|| @pset == "floor-back-left-right" || @pset == "floor-back-left-top" \
|| @pset == "floor-back-right-top" ||@pset == "floor-left-right-top" \
|| @pset == "open box"
endparam
bool param usepgrad1
caption = "Use gradient"
default = true
visible = @pset == "floor" || @pset == "floor-back" || @pset == "floor-left" \
|| @pset == "floor-right" || @pset == "floor-top" \
|| @pset == "floor-back-left"|| @pset == "floor-back-right"\
|| @pset == "floor-left-right" || @pset == "floor-back-top" \
|| @pset == "floor-left-top"|| @pset == "floor-right-top" \
|| @pset == "floor-back-left-right" || @pset == "floor-back-left-top" \
|| @pset == "floor-back-right-top" ||@pset == "floor-left-right-top" \
|| @pset == "open box"
endparam
color param plambient1
caption = "Distant color"
default = rgba(0,0,0,1)
visible = @pset == "floor" || @pset == "floor-back" || @pset == "floor-left" \
|| @pset == "floor-right" || @pset == "floor-top" \
|| @pset == "floor-back-left"|| @pset == "floor-back-right"\
|| @pset == "floor-left-right" || @pset == "floor-back-top" \
|| @pset == "floor-left-top"|| @pset == "floor-right-top" \
|| @pset == "floor-back-left-right" || @pset == "floor-back-left-top" \
|| @pset == "floor-back-right-top" ||@pset == "floor-left-right-top" \
|| @pset == "open box"
endparam
color param plplaincolor1
caption = "Base Color"
default = rgba(0.9,0.9,0.9,1)
visible = !@usepgrad1 && (@pset == "floor" || @pset == "floor-back" || @pset == "floor-left" \
|| @pset == "floor-right" || @pset == "floor-top" \
|| @pset == "floor-back-left"|| @pset == "floor-back-right"\
|| @pset == "floor-left-right" || @pset == "floor-back-top" \
|| @pset == "floor-left-top"|| @pset == "floor-right-top" \
|| @pset == "floor-back-left-right" || @pset == "floor-back-left-top" \
|| @pset == "floor-back-right-top" ||@pset == "floor-left-right-top" \
|| @pset == "open box")
endparam
heading
text = "Back Plane"
visible = @pset == "back" || @pset == "floor-back"\
|| @pset == "back-left" || @pset == "back-right" \
|| @pset == "back-top" || @pset == "floor-back-left"\
|| @pset == "floor-back-right" || @pset == "back-left-right" \
|| @pset == "floor-back-top" || @pset == "back-left-top" \
|| @pset == "back-right-top" || @pset == "floor-back-left-right" \
|| @pset == "floor-back-left-top" || @pset == "floor-back-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box"
endheading
bool param pper2
caption = "Use perspective"
default = false
visible = ((@f_traptexture_plane2 != DMJ_TrapShapeFlat) || \
(@f_trapcolor_plane2 != ColorTrapNoColor))&& \
(@pset == "back" || @pset == "floor-back"\
|| @pset == "back-left" || @pset == "back-right" \
|| @pset == "back-top" || @pset == "floor-back-left"\
|| @pset == "floor-back-right" || @pset == "back-left-right" \
|| @pset == "floor-back-top" || @pset == "back-left-top" \
|| @pset == "back-right-top" || @pset == "floor-back-left-right" \
|| @pset == "floor-back-left-top" || @pset == "floor-back-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box")
endparam
float param adjdif2
caption = "Diffuse adjustment"
default = 1.0
visible = @pset == "back" || @pset == "floor-back"\
|| @pset == "back-left" || @pset == "back-right" \
|| @pset == "back-top" || @pset == "floor-back-left"\
|| @pset == "floor-back-right" || @pset == "back-left-right" \
|| @pset == "floor-back-top" || @pset == "back-left-top" \
|| @pset == "back-right-top" || @pset == "floor-back-left-right" \
|| @pset == "floor-back-left-top" || @pset == "floor-back-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box"
endparam
ColorTrap param f_trapcolor_plane2
caption = "Plane Colors"
default = ColorTrapNoColor
expanded = false
hint = "A trap shape that is used as a color or pattern."
visible = @pset == "back" || @pset == "floor-back"\
|| @pset == "back-left" || @pset == "back-right" \
|| @pset == "back-top" || @pset == "floor-back-left"\
|| @pset == "floor-back-right" || @pset == "back-left-right" \
|| @pset == "floor-back-top" || @pset == "back-left-top" \
|| @pset == "back-right-top" || @pset == "floor-back-left-right" \
|| @pset == "floor-back-left-top" || @pset == "floor-back-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box"
endparam
heading
caption = "Plane Color Merge"
visible = @f_trapcolor_plane2 != ColorTrapNoColor
endheading
DefaultColorMerge param f_colormerge_plane2
caption = "Color Merge"
default = DefaultColorMerge
visible = @f_trapcolor_plane2 != ColorTrapNoColor
endparam
param nmerge_plane2
caption = "Merge order"
default = 0
enum = "Base on Top" "Base on Bottom"
visible = @f_trapcolor_plane2 != ColorTrapNoColor
endparam
float param opacity_plane2
caption = "Merge Opacity"
default = 0.5
visible = @f_trapcolor_plane2 != ColorTrapNoColor
endparam
bool param tpfade2
caption = "Use Distance Fade"
default = false
visible = @pset == "back" || @pset == "floor-back"\
|| @pset == "back-left" || @pset == "back-right" \
|| @pset == "back-top" || @pset == "floor-back-left"\
|| @pset == "floor-back-right" || @pset == "back-left-right" \
|| @pset == "floor-back-top" || @pset == "back-left-top" \
|| @pset == "back-right-top" || @pset == "floor-back-left-right" \
|| @pset == "floor-back-left-top" || @pset == "floor-back-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box"
endparam
bool param usepgrad2
caption = "Use gradient"
default = true
visible = @pset == "back" || @pset == "floor-back"\
|| @pset == "back-left" || @pset == "back-right" \
|| @pset == "back-top" || @pset == "floor-back-left"\
|| @pset == "floor-back-right" || @pset == "back-left-right" \
|| @pset == "floor-back-top" || @pset == "back-left-top" \
|| @pset == "back-right-top" || @pset == "floor-back-left-right" \
|| @pset == "floor-back-left-top" || @pset == "floor-back-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box"
endparam
color param plambient2
caption = "Distant color"
default = rgba(0,0,0,1)
visible = @pset == "back" || @pset == "floor-back"\
|| @pset == "back-left" || @pset == "back-right" \
|| @pset == "back-top" || @pset == "floor-back-left"\
|| @pset == "floor-back-right" || @pset == "back-left-right" \
|| @pset == "floor-back-top" || @pset == "back-left-top" \
|| @pset == "back-right-top" || @pset == "floor-back-left-right" \
|| @pset == "floor-back-left-top" || @pset == "floor-back-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box"
endparam
color param plplaincolor2
caption = "Base Color"
default = rgba(0.9,0.9,0.9,1)
visible = !@usepgrad2 && (@pset == "back" || @pset == "floor-back"\
|| @pset == "back-left" || @pset == "back-right" \
|| @pset == "back-top" || @pset == "floor-back-left"\
|| @pset == "floor-back-right" || @pset == "back-left-right" \
|| @pset == "floor-back-top" || @pset == "back-left-top" \
|| @pset == "back-right-top" || @pset == "floor-back-left-right" \
|| @pset == "floor-back-left-top" || @pset == "floor-back-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box")
endparam
heading
text = "Left Plane"
visible = @pset == "left" || @pset == "floor-left" || @pset == "back-left"\
|| @pset == "left-right" || @pset == "left-top" \
|| @pset == "floor-back-left" || @pset == "floor-left-right" \
|| @pset == "back-left-right" || @pset == "floor-left-top" \
|| @pset == "back-left-top" || @pset == "left-right-top" \
|| @pset == "floor-back-left-right" || @pset == "floor-back-left-top" \
|| @pset == "floor-left-right-top" || @pset == "back-left-right-top" \
|| @pset == "open box"
endheading
bool param pper3
caption = "Use perspective"
default = false
visible = ((@f_traptexture_plane3 != DMJ_TrapShapeFlat) || \
(@f_trapcolor_plane3 != ColorTrapNoColor))&& \
(@pset == "left" || @pset == "floor-left" || @pset == "back-left"\
|| @pset == "left-right" || @pset == "left-top" \
|| @pset == "floor-back-left" || @pset == "floor-left-right" \
|| @pset == "back-left-right" || @pset == "floor-left-top" \
|| @pset == "back-left-top" || @pset == "left-right-top" \
|| @pset == "floor-back-left-right" || @pset == "floor-back-left-top" \
|| @pset == "floor-left-right-top" || @pset == "back-left-right-top" \
|| @pset == "open box")
endparam
float param adjdif3
caption = "Diffuse adjustment"
default = 1.0
visible = @pset == "left" || @pset == "floor-left" || @pset == "back-left"\
|| @pset == "left-right" || @pset == "left-top" \
|| @pset == "floor-back-left" || @pset == "floor-left-right" \
|| @pset == "back-left-right" || @pset == "floor-left-top" \
|| @pset == "back-left-top" || @pset == "left-right-top" \
|| @pset == "floor-back-left-right" || @pset == "floor-back-left-top" \
|| @pset == "floor-left-right-top" || @pset == "back-left-right-top" \
|| @pset == "open box"
endparam
ColorTrap param f_trapcolor_plane3
caption = "Plane Colors"
default = ColorTrapNoColor
expanded = false
hint = "A trap shape that is used as a color or pattern."
visible = @pset == "left" || @pset == "floor-left" || @pset == "back-left"\
|| @pset == "left-right" || @pset == "left-top" \
|| @pset == "floor-back-left" || @pset == "floor-left-right" \
|| @pset == "back-left-right" || @pset == "floor-left-top" \
|| @pset == "back-left-top" || @pset == "left-right-top" \
|| @pset == "floor-back-left-right" || @pset == "floor-back-left-top" \
|| @pset == "floor-left-right-top" || @pset == "back-left-right-top" \
|| @pset == "open box"
endparam
heading
caption = "Plane Color Merge"
visible = @f_trapcolor_plane3 != ColorTrapNoColor
endheading
DefaultColorMerge param f_colormerge_plane3
caption = "Color Merge"
default = DefaultColorMerge
visible = @f_trapcolor_plane3 != ColorTrapNoColor
endparam
param nmerge_plane3
caption = "Merge order"
default = 0
enum = "Base on Top" "Base on Bottom"
visible = @f_trapcolor_plane3 != ColorTrapNoColor
endparam
float param opacity_plane3
caption = "Merge Opacity"
default = 0.5
visible = @f_trapcolor_plane3 != ColorTrapNoColor
endparam
bool param tpfade3
caption = "Use Distance Fade"
default = false
visible = @pset == "left" || @pset == "floor-left" || @pset == "back-left"\
|| @pset == "left-right" || @pset == "left-top" \
|| @pset == "floor-back-left" || @pset == "floor-left-right" \
|| @pset == "back-left-right" || @pset == "floor-left-top" \
|| @pset == "back-left-top" || @pset == "left-right-top" \
|| @pset == "floor-back-left-right" || @pset == "floor-back-left-top" \
|| @pset == "floor-left-right-top" || @pset == "back-left-right-top" \
|| @pset == "open box"
endparam
bool param usepgrad3
caption = "Use gradient"
default = true
visible = @pset == "left" || @pset == "floor-left" || @pset == "back-left"\
|| @pset == "left-right" || @pset == "left-top" \
|| @pset == "floor-back-left" || @pset == "floor-left-right" \
|| @pset == "back-left-right" || @pset == "floor-left-top" \
|| @pset == "back-left-top" || @pset == "left-right-top" \
|| @pset == "floor-back-left-right" || @pset == "floor-back-left-top" \
|| @pset == "floor-left-right-top" || @pset == "back-left-right-top" \
|| @pset == "open box"
endparam
color param plambient3
caption = "Distant color"
default = rgba(0,0,0,1)
visible = @pset == "left" || @pset == "floor-left" || @pset == "back-left"\
|| @pset == "left-right" || @pset == "left-top" \
|| @pset == "floor-back-left" || @pset == "floor-left-right" \
|| @pset == "back-left-right" || @pset == "floor-left-top" \
|| @pset == "back-left-top" || @pset == "left-right-top" \
|| @pset == "floor-back-left-right" || @pset == "floor-back-left-top" \
|| @pset == "floor-left-right-top" || @pset == "back-left-right-top" \
|| @pset == "open box"
endparam
color param plplaincolor3
caption = "Base Color"
default = rgba(0.9,0.9,0.9,1)
visible = !@usepgrad3 && (@pset == "left" || @pset == "floor-left" || @pset == "back-left"\
|| @pset == "left-right" || @pset == "left-top" \
|| @pset == "floor-back-left" || @pset == "floor-left-right" \
|| @pset == "back-left-right" || @pset == "floor-left-top" \
|| @pset == "back-left-top" || @pset == "left-right-top" \
|| @pset == "floor-back-left-right" || @pset == "floor-back-left-top" \
|| @pset == "floor-left-right-top" || @pset == "back-left-right-top" \
|| @pset == "open box")
endparam
heading
text = "Right Plane"
visible = @pset == "right" || @pset == "floor-right" \
|| @pset == "back-right" || @pset == "left-right" \
|| @pset == "right-top" || @pset == "floor-back-right"\
|| @pset == "floor-left-right" || @pset == "back-left-right" \
|| @pset == "floor-right-top" || @pset == "back-right-top" \
|| @pset == "left-right-top" || @pset == "floor-back-left-right" \
|| @pset == "floor-back-right-top" || @pset == "floor-left-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box"
endheading
bool param pper4
caption = "Use perspective"
default = false
visible = ((@f_traptexture_plane4 != DMJ_TrapShapeFlat) || \
(@f_trapcolor_plane4 != ColorTrapNoColor))&& \
(@pset == "right" || @pset == "floor-right" \
|| @pset == "back-right" || @pset == "left-right" \
|| @pset == "right-top" || @pset == "floor-back-right"\
|| @pset == "floor-left-right" || @pset == "back-left-right" \
|| @pset == "floor-right-top" || @pset == "back-right-top" \
|| @pset == "left-right-top" || @pset == "floor-back-left-right" \
|| @pset == "floor-back-right-top" || @pset == "floor-left-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box")
endparam
float param adjdif4
caption = "Diffuse adjustment"
default = 1.0
visible = @pset == "right" || @pset == "floor-right" \
|| @pset == "back-right" || @pset == "left-right" \
|| @pset == "right-top" || @pset == "floor-back-right"\
|| @pset == "floor-left-right" || @pset == "back-left-right" \
|| @pset == "floor-right-top" || @pset == "back-right-top" \
|| @pset == "left-right-top" || @pset == "floor-back-left-right" \
|| @pset == "floor-back-right-top" || @pset == "floor-left-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box"
endparam
ColorTrap param f_trapcolor_plane4
caption = "Plane Colors"
default = ColorTrapNoColor
expanded = false
hint = "A trap shape that is used as a color or pattern."
visible = @pset == "right" || @pset == "floor-right" \
|| @pset == "back-right" || @pset == "left-right" \
|| @pset == "right-top" || @pset == "floor-back-right"\
|| @pset == "floor-left-right" || @pset == "back-left-right" \
|| @pset == "floor-right-top" || @pset == "back-right-top" \
|| @pset == "left-right-top" || @pset == "floor-back-left-right" \
|| @pset == "floor-back-right-top" || @pset == "floor-left-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box"
endparam
heading
caption = "Plane Color Merge"
visible = @f_trapcolor_plane4 != ColorTrapNoColor
endheading
DefaultColorMerge param f_colormerge_plane4
caption = "Color Merge"
default = DefaultColorMerge
visible = @f_trapcolor_plane4 != ColorTrapNoColor
endparam
param nmerge_plane4
caption = "Merge order"
default = 0
enum = "Base on Top" "Base on Bottom"
visible = @f_trapcolor_plane4 != ColorTrapNoColor
endparam
float param opacity_plane4
caption = "Merge Opacity"
default = 0.5
visible = @f_trapcolor_plane4 != ColorTrapNoColor
endparam
bool param tpfade4
caption = "Use Distance Fade"
default = false
visible = @pset == "right" || @pset == "floor-right" \
|| @pset == "back-right" || @pset == "left-right" \
|| @pset == "right-top" || @pset == "floor-back-right"\
|| @pset == "floor-left-right" || @pset == "back-left-right" \
|| @pset == "floor-right-top" || @pset == "back-right-top" \
|| @pset == "left-right-top" || @pset == "floor-back-left-right" \
|| @pset == "floor-back-right-top" || @pset == "floor-left-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box"
endparam
bool param usepgrad4
caption = "Use gradient"
default = true
visible = @pset == "right" || @pset == "floor-right" \
|| @pset == "back-right" || @pset == "left-right" \
|| @pset == "right-top" || @pset == "floor-back-right"\
|| @pset == "floor-left-right" || @pset == "back-left-right" \
|| @pset == "floor-right-top" || @pset == "back-right-top" \
|| @pset == "left-right-top" || @pset == "floor-back-left-right" \
|| @pset == "floor-back-right-top" || @pset == "floor-left-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box"
endparam
color param plambient4
caption = "Distant color"
default = rgba(0,0,0,1)
visible = @pset == "right" || @pset == "floor-right" \
|| @pset == "back-right" || @pset == "left-right" \
|| @pset == "right-top" || @pset == "floor-back-right"\
|| @pset == "floor-left-right" || @pset == "back-left-right" \
|| @pset == "floor-right-top" || @pset == "back-right-top" \
|| @pset == "left-right-top" || @pset == "floor-back-left-right" \
|| @pset == "floor-back-right-top" || @pset == "floor-left-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box"
endparam
color param plplaincolor4
caption = "Base Color"
default = rgba(0.9,0.9,0.9,1)
visible = !@usepgrad4 && (@pset == "right" || @pset == "floor-right" \
|| @pset == "back-right" || @pset == "left-right" \
|| @pset == "right-top" || @pset == "floor-back-right"\
|| @pset == "floor-left-right" || @pset == "back-left-right" \
|| @pset == "floor-right-top" || @pset == "back-right-top" \
|| @pset == "left-right-top" || @pset == "floor-back-left-right" \
|| @pset == "floor-back-right-top" || @pset == "floor-left-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box")
endparam
heading
text = "Top Plane"
visible = @pset == "top" || @pset == "floor-top" || @pset == "back-top" \
|| @pset == "left-top" || @pset == "right-top" \
|| @pset == "floor-back-top" || @pset == "floor-left-top" \
|| @pset == "back-left-top" || @pset == "floor-right-top" \
|| @pset == "back-right-top" || @pset == "left-right-top" \
|| @pset == "floor-back-left-top" \
|| @pset == "floor-back-right-top" ||@pset == "floor-left-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box"
endheading
bool param pper5
caption = "Use perspective"
default = false
visible = ((@f_traptexture_plane5 != DMJ_TrapShapeFlat) || \
(@f_trapcolor_plane5 != ColorTrapNoColor))&& \
(@pset == "top" || @pset == "floor-top" || @pset == "back-top" \
|| @pset == "left-top" || @pset == "right-top" \
|| @pset == "floor-back-top" || @pset == "floor-left-top" \
|| @pset == "back-left-top" || @pset == "floor-right-top" \
|| @pset == "back-right-top" || @pset == "left-right-top" \
|| @pset == "floor-back-left-top" \
|| @pset == "floor-back-right-top" ||@pset == "floor-left-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box")
endparam
float param adjdif5
caption = "Diffuse adjustment"
default = 1.0
visible = @pset == "top" || @pset == "floor-top" || @pset == "back-top" \
|| @pset == "left-top" || @pset == "right-top" \
|| @pset == "floor-back-top" || @pset == "floor-left-top" \
|| @pset == "back-left-top" || @pset == "floor-right-top" \
|| @pset == "back-right-top" || @pset == "left-right-top" \
|| @pset == "floor-back-left-top" \
|| @pset == "floor-back-right-top" ||@pset == "floor-left-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box"
endparam
ColorTrap param f_trapcolor_plane5
caption = "Plane Colors"
default = ColorTrapNoColor
expanded = false
hint = "A trap shape that is used as a color or pattern."
visible = @pset == "top" || @pset == "floor-top" || @pset == "back-top" \
|| @pset == "left-top" || @pset == "right-top" \
|| @pset == "floor-back-top" || @pset == "floor-left-top" \
|| @pset == "back-left-top" || @pset == "floor-right-top" \
|| @pset == "back-right-top" || @pset == "left-right-top" \
|| @pset == "floor-back-left-top" \
|| @pset == "floor-back-right-top" ||@pset == "floor-left-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box"
endparam
heading
caption = "Plane Color Merge"
visible = @f_trapcolor_plane5 != ColorTrapNoColor
endheading
DefaultColorMerge param f_colormerge_plane5
caption = "Color Merge"
default = DefaultColorMerge
visible = @f_trapcolor_plane5 != ColorTrapNoColor
endparam
param nmerge_plane5
caption = "Merge order"
default = 0
enum = "Base on Top" "Base on Bottom"
visible = @f_trapcolor_plane5 != ColorTrapNoColor
endparam
float param opacity_plane5
caption = "Merge Opacity"
default = 0.5
visible = @f_trapcolor_plane5 != ColorTrapNoColor
endparam
bool param tpfade5
caption = "Use Distance Fade"
default = false
visible = @pset == "top" || @pset == "floor-top" || @pset == "back-top" \
|| @pset == "left-top" || @pset == "right-top" \
|| @pset == "floor-back-top" || @pset == "floor-left-top" \
|| @pset == "back-left-top" || @pset == "floor-right-top" \
|| @pset == "back-right-top" || @pset == "left-right-top" \
|| @pset == "floor-back-left-top" \
|| @pset == "floor-back-right-top" ||@pset == "floor-left-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box"
endparam
bool param usepgrad5
caption = "Use gradient"
default = true
visible = @pset == "top" || @pset == "floor-top" || @pset == "back-top" \
|| @pset == "left-top" || @pset == "right-top" \
|| @pset == "floor-back-top" || @pset == "floor-left-top" \
|| @pset == "back-left-top" || @pset == "floor-right-top" \
|| @pset == "back-right-top" || @pset == "left-right-top" \
|| @pset == "floor-back-left-top" \
|| @pset == "floor-back-right-top" ||@pset == "floor-left-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box"
endparam
color param plambient5
caption = "Distant color"
default = rgba(0,0,0,1)
visible = @pset == "top" || @pset == "floor-top" || @pset == "back-top" \
|| @pset == "left-top" || @pset == "right-top" \
|| @pset == "floor-back-top" || @pset == "floor-left-top" \
|| @pset == "back-left-top" || @pset == "floor-right-top" \
|| @pset == "back-right-top" || @pset == "left-right-top" \
|| @pset == "floor-back-left-top" \
|| @pset == "floor-back-right-top" ||@pset == "floor-left-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box"
endparam
color param plplaincolor5
caption = "Base Color"
default = rgba(0.9,0.9,0.9,1)
visible = !@usepgrad5 && (@pset == "top" || @pset == "floor-top" || @pset == "back-top" \
|| @pset == "left-top" || @pset == "right-top" \
|| @pset == "floor-back-top" || @pset == "floor-left-top" \
|| @pset == "back-left-top" || @pset == "floor-right-top" \
|| @pset == "back-right-top" || @pset == "left-right-top" \
|| @pset == "floor-back-left-top" \
|| @pset == "floor-back-right-top" ||@pset == "floor-left-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box")
endparam
heading
caption = "Sphere inversion parameters"
expanded = false
endheading
bool param boundary
caption = "Use boundaries"
default = false
endparam
float param boundadj
caption = "Boundary adj"
default = 1.0
visible = @boundary
endparam
bool param displaybound
caption = "Display boundary"
default = false
visible = @boundary
endparam
InvertSphere param isph
caption = "Inversion Type"
default = InvertSphere
endparam
bool param showbase
caption = "Show base spheres"
default = true
visible = @isph != InvertMobius
endparam
bool param slice
caption = "Slice Gasket"
default = false
visible = @isph != InvertMobius
endparam
heading
caption = "Slicing Plane"
visible = @slice
endheading
float param sa
caption = "X Direction"
default = 0.0
visible = @slice
endparam
float param sb
caption = "Y Direction"
default = -1.0
visible = @slice
endparam
float param sc
caption = "Z Direction"
default = 0.5
visible = @slice
endparam
float param pd
caption = "Position"
default = 0.01
visible = @slice
endparam
heading
caption = "Plane Parameters"
expanded = false
endheading
PlaneArray param paar
caption = "Plane array"
default = PlaneArray
endparam
heading
text = "Choose a set of plane objects"
endheading
heading
text = "Ax + By + Cz + D = 0"
endheading
param pset
caption = "Plane sets"
default = 0
enum = "none" "floor" "back" "left" "right" "top" "floor-back" \
"floor-left" "floor-right" "floor-top" "back-left" "back-right" \
"back-top" "left-right" "left-top" "right-top" "floor-back-left" \
"floor-back-right" "floor-left-right" "back-left-right" \
"floor-back-top" "floor-left-top" "back-left-top" \
"floor-right-top" "back-right-top" "left-right-top" \
"floor-back-left-right" "floor-back-left-top" \
"floor-back-right-top" "floor-left-right-top" \
"back-left-right-top" "open box"
endparam
heading
text = "Floor parameters"
visible = @pset == "floor" || @pset == "floor-back" || @pset == "floor-left" \
|| @pset == "floor-right" || @pset == "floor-top" \
|| @pset == "floor-back-left"|| @pset == "floor-back-right"\
|| @pset == "floor-left-right" || @pset == "floor-back-top" \
|| @pset == "floor-left-top"|| @pset == "floor-right-top" \
|| @pset == "floor-back-left-right" || @pset == "floor-back-left-top" \
|| @pset == "floor-back-right-top" ||@pset == "floor-left-right-top" \
|| @pset == "open box"
endheading
float param p1A
caption = "Floor A"
default = 0
visible = @pset == "floor" || @pset == "floor-back" || @pset == "floor-left" \
|| @pset == "floor-right" || @pset == "floor-top" \
|| @pset == "floor-back-left"|| @pset == "floor-back-right"\
|| @pset == "floor-left-right" || @pset == "floor-back-top" \
|| @pset == "floor-left-top"|| @pset == "floor-right-top" \
|| @pset == "floor-back-left-right" || @pset == "floor-back-left-top" \
|| @pset == "floor-back-right-top" ||@pset == "floor-left-right-top" \
|| @pset == "open box"
endparam
float param p1B
caption = "Floor B"
default = -1
visible = @pset == "floor" || @pset == "floor-back" || @pset == "floor-left" \
|| @pset == "floor-right" || @pset == "floor-top" \
|| @pset == "floor-back-left"|| @pset == "floor-back-right"\
|| @pset == "floor-left-right" || @pset == "floor-back-top" \
|| @pset == "floor-left-top"|| @pset == "floor-right-top" \
|| @pset == "floor-back-left-right" || @pset == "floor-back-left-top" \
|| @pset == "floor-back-right-top" ||@pset == "floor-left-right-top" \
|| @pset == "open box"
endparam
float param p1C
caption = "Floor C"
default = 0
visible = @pset == "floor" || @pset == "floor-back" || @pset == "floor-left" \
|| @pset == "floor-right" || @pset == "floor-top" \
|| @pset == "floor-back-left"|| @pset == "floor-back-right"\
|| @pset == "floor-left-right" || @pset == "floor-back-top" \
|| @pset == "floor-left-top"|| @pset == "floor-right-top" \
|| @pset == "floor-back-left-right" || @pset == "floor-back-left-top" \
|| @pset == "floor-back-right-top" ||@pset == "floor-left-right-top" \
|| @pset == "open box"
endparam
float param p1D
caption = "Floor D"
default = 1
visible = @pset == "floor" || @pset == "floor-back" || @pset == "floor-left" \
|| @pset == "floor-right" || @pset == "floor-top" \
|| @pset == "floor-back-left"|| @pset == "floor-back-right"\
|| @pset == "floor-left-right" || @pset == "floor-back-top" \
|| @pset == "floor-left-top"|| @pset == "floor-right-top" \
|| @pset == "floor-back-left-right" || @pset == "floor-back-left-top" \
|| @pset == "floor-back-right-top" ||@pset == "floor-left-right-top" \
|| @pset == "open box"
endparam
float param p1F
caption = "Fade"
default = 1
visible = @pset == "floor" || @pset == "floor-back" || @pset == "floor-left" \
|| @pset == "floor-right" || @pset == "floor-top" \
|| @pset == "floor-back-left"|| @pset == "floor-back-right"\
|| @pset == "floor-left-right" || @pset == "floor-back-top" \
|| @pset == "floor-left-top"|| @pset == "floor-right-top" \
|| @pset == "floor-back-left-right" || @pset == "floor-back-left-top" \
|| @pset == "floor-back-right-top" ||@pset == "floor-left-right-top" \
|| @pset == "open box"
endparam
heading
text = "Back parameters"
visible = @pset == "back" || @pset == "floor-back"\
|| @pset == "back-left" || @pset == "back-right" \
|| @pset == "back-top" || @pset == "floor-back-left"\
|| @pset == "floor-back-right" || @pset == "back-left-right" \
|| @pset == "floor-back-top" || @pset == "back-left-top" \
|| @pset == "back-right-top" || @pset == "floor-back-left-right" \
|| @pset == "floor-back-left-top" || @pset == "floor-back-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box"
endheading
float param p2A
caption = "Back A"
default = 0
visible = @pset == "back" || @pset == "floor-back"\
|| @pset == "back-left" || @pset == "back-right" \
|| @pset == "back-top" || @pset == "floor-back-left"\
|| @pset == "floor-back-right" || @pset == "back-left-right" \
|| @pset == "floor-back-top" || @pset == "back-left-top" \
|| @pset == "back-right-top" || @pset == "floor-back-left-right" \
|| @pset == "floor-back-left-top" || @pset == "floor-back-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box"
endparam
float param p2B
caption = "Back B"
default = 1e-10
visible = @pset == "back" || @pset == "floor-back"\
|| @pset == "back-left" || @pset == "back-right" \
|| @pset == "back-top" || @pset == "floor-back-left"\
|| @pset == "floor-back-right" || @pset == "back-left-right" \
|| @pset == "floor-back-top" || @pset == "back-left-top" \
|| @pset == "back-right-top" || @pset == "floor-back-left-right" \
|| @pset == "floor-back-left-top" || @pset == "floor-back-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box"
endparam
float param p2C
caption = "Back C"
default = 1
visible = @pset == "back" || @pset == "floor-back"\
|| @pset == "back-left" || @pset == "back-right" \
|| @pset == "back-top" || @pset == "floor-back-left"\
|| @pset == "floor-back-right" || @pset == "back-left-right" \
|| @pset == "floor-back-top" || @pset == "back-left-top" \
|| @pset == "back-right-top" || @pset == "floor-back-left-right" \
|| @pset == "floor-back-left-top" || @pset == "floor-back-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box"
endparam
float param p2D
caption = "Back D"
default = 10
visible = @pset == "back" || @pset == "floor-back"\
|| @pset == "back-left" || @pset == "back-right" \
|| @pset == "back-top" || @pset == "floor-back-left"\
|| @pset == "floor-back-right" || @pset == "back-left-right" \
|| @pset == "floor-back-top" || @pset == "back-left-top" \
|| @pset == "back-right-top" || @pset == "floor-back-left-right" \
|| @pset == "floor-back-left-top" || @pset == "floor-back-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box"
endparam
float param p2F
caption = "Fade"
default = 1
visible = @pset == "back" || @pset == "floor-back"\
|| @pset == "back-left" || @pset == "back-right" \
|| @pset == "back-top" || @pset == "floor-back-left"\
|| @pset == "floor-back-right" || @pset == "back-left-right" \
|| @pset == "floor-back-top" || @pset == "back-left-top" \
|| @pset == "back-right-top" || @pset == "floor-back-left-right" \
|| @pset == "floor-back-left-top" || @pset == "floor-back-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box"
endparam
heading
text = "Left parameters"
visible = @pset == "left" || @pset == "floor-left" || @pset == "back-left"\
|| @pset == "left-right" || @pset == "left-top" \
|| @pset == "floor-back-left" || @pset == "floor-left-right" \
|| @pset == "back-left-right" || @pset == "floor-left-top" \
|| @pset == "back-left-top" || @pset == "left-right-top" \
|| @pset == "floor-back-left-right" || @pset == "floor-back-left-top" \
|| @pset == "floor-left-right-top" || @pset == "back-left-right-top" \
|| @pset == "open box"
endheading
float param p3A
caption = "Left A"
default = 1
visible = @pset == "left" || @pset == "floor-left" || @pset == "back-left"\
|| @pset == "left-right" || @pset == "left-top" \
|| @pset == "floor-back-left" || @pset == "floor-left-right" \
|| @pset == "back-left-right" || @pset == "floor-left-top" \
|| @pset == "back-left-top" || @pset == "left-right-top" \
|| @pset == "floor-back-left-right" || @pset == "floor-back-left-top" \
|| @pset == "floor-left-right-top" || @pset == "back-left-right-top" \
|| @pset == "open box"
endparam
float param p3B
caption = "Left B"
default = 0
visible = @pset == "left" || @pset == "floor-left" || @pset == "back-left"\
|| @pset == "left-right" || @pset == "left-top" \
|| @pset == "floor-back-left" || @pset == "floor-left-right" \
|| @pset == "back-left-right" || @pset == "floor-left-top" \
|| @pset == "back-left-top" || @pset == "left-right-top" \
|| @pset == "floor-back-left-right" || @pset == "floor-back-left-top" \
|| @pset == "floor-left-right-top" || @pset == "back-left-right-top" \
|| @pset == "open box"
endparam
float param p3C
caption = "Left C"
default = 0
visible = @pset == "left" || @pset == "floor-left" || @pset == "back-left"\
|| @pset == "left-right" || @pset == "left-top" \
|| @pset == "floor-back-left" || @pset == "floor-left-right" \
|| @pset == "back-left-right" || @pset == "floor-left-top" \
|| @pset == "back-left-top" || @pset == "left-right-top" \
|| @pset == "floor-back-left-right" || @pset == "floor-back-left-top" \
|| @pset == "floor-left-right-top" || @pset == "back-left-right-top" \
|| @pset == "open box"
endparam
float param p3D
caption = "Left D"
default = 1
visible = @pset == "left" || @pset == "floor-left" || @pset == "back-left"\
|| @pset == "left-right" || @pset == "left-top" \
|| @pset == "floor-back-left" || @pset == "floor-left-right" \
|| @pset == "back-left-right" || @pset == "floor-left-top" \
|| @pset == "back-left-top" || @pset == "left-right-top" \
|| @pset == "floor-back-left-right" || @pset == "floor-back-left-top" \
|| @pset == "floor-left-right-top" || @pset == "back-left-right-top" \
|| @pset == "open box"
endparam
float param p3F
caption = "Fade"
default = 1
visible = @pset == "left" || @pset == "floor-left" || @pset == "back-left"\
|| @pset == "left-right" || @pset == "left-top" \
|| @pset == "floor-back-left" || @pset == "floor-left-right" \
|| @pset == "back-left-right" || @pset == "floor-left-top" \
|| @pset == "back-left-top" || @pset == "left-right-top" \
|| @pset == "floor-back-left-right" || @pset == "floor-back-left-top" \
|| @pset == "floor-left-right-top" || @pset == "back-left-right-top" \
|| @pset == "open box"
endparam
heading
text = "Right parameters"
visible = @pset == "right" || @pset == "floor-right" \
|| @pset == "back-right" || @pset == "left-right" \
|| @pset == "right-top" || @pset == "floor-back-right"\
|| @pset == "floor-left-right" || @pset == "back-left-right" \
|| @pset == "floor-right-top" || @pset == "back-right-top" \
|| @pset == "left-right-top" || @pset == "floor-back-left-right" \
|| @pset == "floor-back-right-top" || @pset == "floor-left-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box"
endheading
float param p4A
caption = "Right A"
default = 1
visible = @pset == "right" || @pset == "floor-right" \
|| @pset == "back-right" || @pset == "left-right" \
|| @pset == "right-top" || @pset == "floor-back-right"\
|| @pset == "floor-left-right" || @pset == "back-left-right" \
|| @pset == "floor-right-top" || @pset == "back-right-top" \
|| @pset == "left-right-top" || @pset == "floor-back-left-right" \
|| @pset == "floor-back-right-top" || @pset == "floor-left-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box"
endparam
float param p4B
caption = "Right B"
default = 0
visible = @pset == "right" || @pset == "floor-right" \
|| @pset == "back-right" || @pset == "left-right" \
|| @pset == "right-top" || @pset == "floor-back-right"\
|| @pset == "floor-left-right" || @pset == "back-left-right" \
|| @pset == "floor-right-top" || @pset == "back-right-top" \
|| @pset == "left-right-top" || @pset == "floor-back-left-right" \
|| @pset == "floor-back-right-top" || @pset == "floor-left-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box"
endparam
float param p4C
caption = "Right C"
default = 0
visible = @pset == "right" || @pset == "floor-right" \
|| @pset == "back-right" || @pset == "left-right" \
|| @pset == "right-top" || @pset == "floor-back-right"\
|| @pset == "floor-left-right" || @pset == "back-left-right" \
|| @pset == "floor-right-top" || @pset == "back-right-top" \
|| @pset == "left-right-top" || @pset == "floor-back-left-right" \
|| @pset == "floor-back-right-top" || @pset == "floor-left-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box"
endparam
float param p4D
caption = "Right D"
default = -1
visible = @pset == "right" || @pset == "floor-right" \
|| @pset == "back-right" || @pset == "left-right" \
|| @pset == "right-top" || @pset == "floor-back-right"\
|| @pset == "floor-left-right" || @pset == "back-left-right" \
|| @pset == "floor-right-top" || @pset == "back-right-top" \
|| @pset == "left-right-top" || @pset == "floor-back-left-right" \
|| @pset == "floor-back-right-top" || @pset == "floor-left-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box"
endparam
float param p4F
caption = "Fade"
default = 1
visible = @pset == "right" || @pset == "floor-right" \
|| @pset == "back-right" || @pset == "left-right" \
|| @pset == "right-top" || @pset == "floor-back-right"\
|| @pset == "floor-left-right" || @pset == "back-left-right" \
|| @pset == "floor-right-top" || @pset == "back-right-top" \
|| @pset == "left-right-top" || @pset == "floor-back-left-right" \
|| @pset == "floor-back-right-top" || @pset == "floor-left-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box"
endparam
heading
text = "Top parameters"
visible = @pset == "top" || @pset == "floor-top" || @pset == "back-top" \
|| @pset == "left-top" || @pset == "right-top" \
|| @pset == "floor-back-top" || @pset == "floor-left-top" \
|| @pset == "back-left-top" || @pset == "floor-right-top" \
|| @pset == "back-right-top" || @pset == "left-right-top" \
|| @pset == "floor-back-left-top" \
|| @pset == "floor-back-right-top" ||@pset == "floor-left-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box"
endheading
float param p5A
caption = "Top A"
default = 0
visible = @pset == "top" || @pset == "floor-top" || @pset == "back-top" \
|| @pset == "left-top" || @pset == "right-top" \
|| @pset == "floor-back-top" || @pset == "floor-left-top" \
|| @pset == "back-left-top" || @pset == "floor-right-top" \
|| @pset == "back-right-top" || @pset == "left-right-top" \
|| @pset == "floor-back-left-top" \
|| @pset == "floor-back-right-top" ||@pset == "floor-left-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box"
endparam
float param p5B
caption = "Top B"
default = -1
visible = @pset == "top" || @pset == "floor-top" || @pset == "back-top" \
|| @pset == "left-top" || @pset == "right-top" \
|| @pset == "floor-back-top" || @pset == "floor-left-top" \
|| @pset == "back-left-top" || @pset == "floor-right-top" \
|| @pset == "back-right-top" || @pset == "left-right-top" \
|| @pset == "floor-back-left-top" \
|| @pset == "floor-back-right-top" ||@pset == "floor-left-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box"
endparam
float param p5C
caption = "Top C"
default = 0
visible = @pset == "top" || @pset == "floor-top" || @pset == "back-top" \
|| @pset == "left-top" || @pset == "right-top" \
|| @pset == "floor-back-top" || @pset == "floor-left-top" \
|| @pset == "back-left-top" || @pset == "floor-right-top" \
|| @pset == "back-right-top" || @pset == "left-right-top" \
|| @pset == "floor-back-left-top" \
|| @pset == "floor-back-right-top" ||@pset == "floor-left-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box"
endparam
float param p5D
caption = "Top D"
default = -1
visible = @pset == "top" || @pset == "floor-top" || @pset == "back-top" \
|| @pset == "left-top" || @pset == "right-top" \
|| @pset == "floor-back-top" || @pset == "floor-left-top" \
|| @pset == "back-left-top" || @pset == "floor-right-top" \
|| @pset == "back-right-top" || @pset == "left-right-top" \
|| @pset == "floor-back-left-top" \
|| @pset == "floor-back-right-top" ||@pset == "floor-left-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box"
endparam
float param p5F
caption = "Fade"
default = 1
visible = @pset == "top" || @pset == "floor-top" || @pset == "back-top" \
|| @pset == "left-top" || @pset == "right-top" \
|| @pset == "floor-back-top" || @pset == "floor-left-top" \
|| @pset == "back-left-top" || @pset == "floor-right-top" \
|| @pset == "back-right-top" || @pset == "left-right-top" \
|| @pset == "floor-back-left-top" \
|| @pset == "floor-back-right-top" ||@pset == "floor-left-right-top" \
|| @pset == "back-left-right-top" || @pset == "open box"
endparam
}
| Constructor Summary | |
|---|---|
RaytraceSphere()
|
|
| Method Summary | |
|---|---|
boolean |
BoundXY(complex grid)
|
void |
Init()
Call Init() in the global section |
boolean |
Intersect(Vector origin,
Vector ray,
int regress,
int rsi,
float dif,
float sbr,
color scolor)
Function to determine object intersections with rays The maximum recursion level is currently set to 10 |
void |
RatytraceSphere(Generic pparent)
import "reb.ulb" |
color |
Result()
call result() in the final section |
| Methods inherited from class reb:RaytraceGeneric |
|---|
ViewPoint |
| Methods inherited from class common:Generic |
|---|
GetParent |
| Methods inherited from class Object |
|---|
|
| Constructor Detail |
|---|
public RaytraceSphere()
| Method Detail |
|---|
public void RatytraceSphere(Generic pparent)
public void Init()
RaytraceGeneric
Init in class RaytraceGeneric
public boolean Intersect(Vector origin,
Vector ray,
int regress,
int rsi,
float dif,
float sbr,
color scolor)
Intersect in class RaytraceGenericorigin - = ray origin as a vectorray - = ray as a vectorregress - = regression levelrsi - = object index - passed back from recursiondif - = diffuse lighting parameter - passed back from recursionsbr - = specular lighting paramer - passed back from recursionscolor - = color of the intersected object
Call Intersect() after viewpointpublic boolean BoundXY(complex grid)
public color Result()
RaytraceGeneric
Result in class RaytraceGeneric
|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||