/* ----------------------------------------------------------------------------- This source file is part of OpenSpace3D For the latest info, see http://www.openspace3d.com Copyright (c) 2012 I-maginer This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA, or go to http://www.gnu.org/copyleft/lesser.txt ----------------------------------------------------------------------------- */ typeof winShadowSetup = EdWindow;; fun shadowsInitScene(xmlfilestr, envstr, sessionstr)= let SO3SceneGetSelfShadowTexture (V3DgetSession sessionstr) -> selfshadow in let SO3SceneGetShadowFarDistance (V3DgetSession sessionstr) -> fardistance in let SO3SceneGetShadowDirectionalLightExtrusionDistance (V3DgetSession sessionstr) -> extdistance in let SO3SceneGetShadowTextureCount (V3DgetSession sessionstr) -> shadowcount in let SO3SceneGetShadowDirLightTextureOffset (V3DgetSession sessionstr) -> texoffset in let SO3SceneGetShadowTechnique (V3DgetSession sessionstr) -> shadowtechnique in let SO3SceneGetShadowColor (V3DgetSession sessionstr) -> shadowcolor in let SO3SceneGetShadowPreset (V3DgetSession sessionstr) -> shadowpreset in let SO3SceneGetShadowLightingTechnique (V3DgetSession sessionstr) -> shadowpresetmode in let SO3SceneGetShadowQuality (V3DgetSession c3dXsession) -> shadowpresetquality in let XMLaddMark xmlfilestr "shadows" envstr ["preset" (getOgreMaxShadowPresetByType shadowpreset)]::["presetMode" (getOgreMaxShadowPresetModeByType shadowpresetmode)]::["presetQuality" (getOgreMaxShadowPresetQualityByType shadowpresetquality)]::["technique" (getOgreMaxShadowMethodByType shadowtechnique)]::["selfShadow" (XMLgetBoolString selfshadow)]::["farDistance" (XMLgetShortFloatToString fardistance)]::["extrusionDistance" (XMLgetShortFloatToString extdistance)]::nil nil -> shadowstr in let get_rgba shadowcolor -> [r g b a] in let XMLgetShortFloatToString ((itof r) /. 255.0) -> sr in let XMLgetShortFloatToString ((itof g) /. 255.0) -> sg in let XMLgetShortFloatToString ((itof b) /. 255.0) -> sb in let XMLaddMark xmlfilestr "colourShadow" shadowstr ["r" sr]::["g" sg]::["b" sb]::nil nil -> shadowcolorstr in let XMLaddMark xmlfilestr "shadowCameraSetup" shadowstr ["type" (getOgreMaxCameraShadowByType SO3_DEFAULT_SHADOW_CAMERA)]::["planeX" "0"]::["planeY" "0"]::["planeZ" "0"]::["planeD" "1"]::nil nil -> shadowcamerastr in XMLaddMark xmlfilestr "shadowTextures" shadowstr ["size" (itoa iDefaultShadowTextureSize)]::["count" (itoa shadowcount)]::["offset" (XMLgetShortFloatToString texoffset)]::["fadeStart" (XMLgetShortFloatToString fDefaultShadowTextureFadeStart)]::["fadeEnd" (XMLgetShortFloatToString fDefaultShadowTextureFadeEnd)]::nil nil; 0;; fun shadowsLoadEnv(envstr, targetenvironmentstr, sessionstr)= let XMLgetMarkByValueFromMarkSons envstr "shadows" -> shadowstr in let getOgreMaxShadowMethod (XMLgetParam shadowstr "technique") -> shadowtechnique in let getOgreMaxShadowPreset (XMLgetParam shadowstr "preset") -> shadowpreset in let getOgreMaxShadowPresetMode (XMLgetParam shadowstr "presetMode") -> shadowpresetmode in let getOgreMaxShadowPresetQuality (XMLgetParam shadowstr "presetQuality") -> shadowpresetquality in let atof XMLgetParam shadowstr "farDistance" -> shadowfardist in let atof XMLgetParam shadowstr "extrusionDistance" -> extdistance in let if extdistance == nil then shadowfardist else extdistance -> extdistance in let XMLgetBoolParam shadowstr "selfShadow" -> selfshadow in let XMLgetParam shadowstr "casterMaterial" -> shadowcaster in let XMLgetParam shadowstr "receiverMaterial" -> shadowreceiver in let XMLgetMarkByValueFromMarkSons shadowstr "colourShadow" -> shadowcolorstr in let make_rgba (ftoi ((atof XMLgetParam shadowcolorstr "r") *. 255.0)) (ftoi ((atof XMLgetParam shadowcolorstr "g") *. 255.0)) (ftoi ((atof XMLgetParam shadowcolorstr "b") *. 255.0)) 0 -> shadowcolor in let XMLgetMarkByValueFromMarkSons shadowstr "shadowCameraSetup" -> shadowcamerastr in let getOgreMaxCameraShadowType (XMLgetParam shadowcamerastr "type") -> shadowcameratype in let atof XMLgetParam shadowcamerastr "planeX" -> scamplanx in let atof XMLgetParam shadowcamerastr "planeY" -> scamplany in let atof XMLgetParam shadowcamerastr "planeZ" -> scamplanz in let atof XMLgetParam shadowcamerastr "planeD" -> scampland in let XMLgetMarkByValueFromMarkSons shadowstr "shadowTextures" -> shadowtexturestr in let atoi XMLgetParam shadowtexturestr "size" -> shadowtexturesize in let atoi XMLgetParam shadowtexturestr "count" -> shadowtexturecount in let atof XMLgetParam shadowtexturestr "offset" -> shadowtextureoffset in let atof XMLgetParam shadowtexturestr "fadeStart" -> shadowtexturefadestart in let atof XMLgetParam shadowtexturestr "fadeEnd" -> shadowtexturefadestop in ( if shadowstr == nil then nil else ( let XMLgetMarkByValueFromMarkSons targetenvironmentstr "shadows" -> shadowtargetstr in let XMLgetMarkByValueFromMarkSons shadowtargetstr "colourShadow" -> shadowcolortargetstr in ( XMLsetParam shadowcolortargetstr "r" (XMLgetParam shadowcolorstr "r"); XMLsetParam shadowcolortargetstr "g" (XMLgetParam shadowcolorstr "g"); XMLsetParam shadowcolortargetstr "b" (XMLgetParam shadowcolorstr "b"); XMLsetParam shadowtargetstr "preset" getOgreMaxShadowPresetByType shadowpreset; XMLsetParam shadowtargetstr "presetMode" getOgreMaxShadowPresetModeByType shadowpresetmode; XMLsetParam shadowtargetstr "presetQuality" getOgreMaxShadowPresetQualityByType shadowpresetquality; XMLsetParam shadowtargetstr "technique" (getOgreMaxShadowMethodByType shadowtechnique); XMLsetParam shadowtargetstr "selfShadow" (XMLgetBoolString selfshadow); XMLsetParam shadowtargetstr "farDistance" XMLgetShortFloatToString shadowfardist; XMLsetParam shadowtargetstr "extrusionDistance" XMLgetShortFloatToString extdistance; if shadowcamerastr == nil then nil else let XMLgetMarkByValueFromMarkSons shadowtargetstr "shadowCameraSetup" -> shadowcameratargetstr in ( V3DsetShadowCameraType sessionstr shadowcameratype scamplanx scamplany scamplanz scampland; XMLsetParam shadowcameratargetstr "type" getOgreMaxCameraShadowByType shadowcameratype; XMLsetParam shadowcameratargetstr "planeX" XMLgetShortFloatToString scamplanx; XMLsetParam shadowcameratargetstr "planeY" XMLgetShortFloatToString scamplany; XMLsetParam shadowcameratargetstr "planeZ" XMLgetShortFloatToString scamplanz; XMLsetParam shadowcameratargetstr "planeD" XMLgetShortFloatToString scampland; ); if shadowtexturestr == nil then nil else let XMLgetMarkByValueFromMarkSons shadowtargetstr "shadowTextures" -> shadowtexturetargetstr in ( set iShadowTextureSize = shadowtexturesize; set fShadowTextureFadeStart = shadowtexturefadestart; set fShadowTextureFadeEnd = shadowtexturefadestop; V3DsetShadowTextureParams sessionstr shadowtexturesize shadowtexturecount shadowtextureoffset shadowtexturefadestart shadowtexturefadestop; XMLsetParam shadowtexturetargetstr "size" itoa shadowtexturesize; XMLsetParam shadowtexturetargetstr "count" itoa shadowtexturecount; XMLsetParam shadowtexturetargetstr "offset" XMLgetShortFloatToString shadowtextureoffset; ); ); if (shadowpreset == SO3_SHADOWS_PRESET_NONE) then ( V3DsetShadowTechnique sessionstr shadowtechnique shadowfardist shadowcolor selfshadow; if (!strcmp shadowcaster "") || shadowcaster == nil then nil else SO3SceneSetShadowCaster (V3DgetSession sessionstr) shadowcaster; if (!strcmp shadowreceiver "") || shadowreceiver == nil then nil else SO3SceneSetShadowReceiver (V3DgetSession sessionstr) shadowreceiver; 0; ) else ( SO3SceneSetShadowDirectionalLightExtrusionDistance (V3DgetSession sessionstr) extdistance; SO3SceneSetShadowFarDistance (V3DgetSession sessionstr) shadowfardist; SO3SceneSetShadowColor (V3DgetSession sessionstr) shadowcolor; SO3SceneSetShadowQuality (V3DgetSession c3dXsession) shadowpresetquality; SO3SceneSetShadowLightingTechnique (V3DgetSession c3dXsession) shadowpresetmode; SO3SceneSetShadowPreset (V3DgetSession c3dXsession) shadowpreset; 0; ); ); ); 0;; fun shadowsRefreshSceneGraph(envstr, viewportstr, sessionstr)= let XMLgetMarkByValueFromMarkSons envstr "shadows" -> shadowstr in let getOgreMaxShadowMethod (XMLgetParam shadowstr "technique") -> shadowtechnique in let getOgreMaxShadowPreset (XMLgetParam shadowstr "preset") -> shadowpreset in let getOgreMaxShadowPresetMode (XMLgetParam shadowstr "presetMode") -> shadowpresetmode in let getOgreMaxShadowPresetQuality (XMLgetParam shadowstr "presetQuality") -> shadowpresetquality in let XMLgetBoolParam shadowstr "selfShadow" -> selfshadow in let atof XMLgetParam shadowstr "farDistance" -> shadowfardist in let atof XMLgetParam shadowstr "extrusionDistance" -> extdistance in let XMLgetParam shadowstr "casterMaterial" -> shadowcaster in let XMLgetParam shadowstr "receiverMaterial" -> shadowreceiver in let XMLgetMarkByValueFromMarkSons shadowstr "colourShadow" -> shadowcolorstr in let make_rgba (ftoi ((atof XMLgetParam shadowcolorstr "r") *. 255.0)) (ftoi ((atof XMLgetParam shadowcolorstr "g") *. 255.0)) (ftoi ((atof XMLgetParam shadowcolorstr "b") *. 255.0)) 0 -> shadowcolor in let XMLgetMarkByValueFromMarkSons shadowstr "shadowCameraSetup" -> shadowcamerastr in let getOgreMaxCameraShadowType (XMLgetParam shadowcamerastr "type") -> shadowcameratype in let atof XMLgetParam shadowcamerastr "planeX" -> scamplanx in let atof XMLgetParam shadowcamerastr "planeY" -> scamplany in let atof XMLgetParam shadowcamerastr "planeZ" -> scamplanz in let atof XMLgetParam shadowcamerastr "planeD" -> scampland in let XMLgetMarkByValueFromMarkSons shadowstr "shadowTextures" -> shadowtexturestr in let atoi XMLgetParam shadowtexturestr "size" -> shadowtexturesize in let atoi XMLgetParam shadowtexturestr "count" -> shadowtexturecount in let atof XMLgetParam shadowtexturestr "offset" -> shadowtextureoffset in let atof XMLgetParam shadowtexturestr "fadeStart" -> shadowtexturefadestart in let atof XMLgetParam shadowtexturestr "fadeEnd" -> shadowtexturefadestop in ( if shadowstr == nil then nil else ( if (shadowpreset == SO3_SHADOWS_PRESET_NONE) then ( V3DsetShadowTechnique sessionstr shadowtechnique shadowfardist shadowcolor selfshadow; if (!strcmp shadowcaster "") || shadowcaster == nil then nil else SO3SceneSetShadowCaster (V3DgetSession sessionstr) shadowcaster; if (!strcmp shadowreceiver "") || shadowreceiver == nil then nil else SO3SceneSetShadowReceiver (V3DgetSession sessionstr) shadowreceiver; if shadowcamerastr == nil then nil else V3DsetShadowCameraType sessionstr shadowcameratype scamplanx scamplany scamplanz scampland; if shadowtexturestr == nil then nil else V3DsetShadowTextureParams sessionstr shadowtexturesize shadowtexturecount shadowtextureoffset shadowtexturefadestart shadowtexturefadestop; 0; ) else ( SO3SceneSetShadowDirectionalLightExtrusionDistance (V3DgetSession sessionstr) extdistance; SO3SceneSetShadowFarDistance (V3DgetSession sessionstr) shadowfardist; SO3SceneSetShadowColor (V3DgetSession sessionstr) shadowcolor; SO3SceneSetShadowQuality (V3DgetSession c3dXsession) shadowpresetquality; SO3SceneSetShadowLightingTechnique (V3DgetSession c3dXsession) shadowpresetmode; SO3SceneSetShadowPreset (V3DgetSession c3dXsession) shadowpreset; 0; ); if (!bShowWireMode) then nil else SO3ViewportSetShadowEnabled viewportstr.V3D_viewport 0; ); ); 0;; fun shadowsDestroySetting()= dsEdWindow winShadowSetup; set winShadowSetup = nil; 0;; fun shadowsResetScene(sessionstr)= set iShadowTextureSize = iDefaultShadowTextureSize; set fShadowTextureFadeStart = fDefaultShadowTextureFadeStart; set fShadowTextureFadeEnd = fDefaultShadowTextureFadeEnd; SO3SceneSetShadowPreset (V3DgetSession sessionstr) SO3_SHADOWS_PRESET_NONE; SO3SceneSetShadowLightingTechnique (V3DgetSession sessionstr) SO3_MODULATIVE_SHADOWS_PRESET_TECHNIQUE; SO3SceneSetShadowQuality (V3DgetSession c3dXsession) SO3_SHADOWS_QUALITY_MEDIUM; SO3SceneSetShadowTechnique (V3DgetSession sessionstr) SO3_SHADOWTYPE_NONE; SO3SceneSetSelfShadowTexture (V3DgetSession sessionstr) 0; SO3SceneSetShadowFarDistance (V3DgetSession sessionstr) 20.0; SO3SceneSetShadowDirectionalLightExtrusionDistance (V3DgetSession sessionstr) 50.0; SO3SceneSetShadowTextureCount (V3DgetSession sessionstr) 1; SO3SceneSetShadowDirLightTextureOffset (V3DgetSession sessionstr) 0.6; SO3SceneSetShadowColor (V3DgetSession sessionstr) 0; 0;; /** cbDestroyShadowSetupWin [EdWindow] I * callback on destroy shadow setting window * * private * * return 0 **/ fun cbDestroyShadowSetupWin(winstr)= set winShadowSetup = nil; 0;; fun cbShadowSetupPreset(ctrl, pos, elem, p)= let p -> [viewstr val type scenemark] in let V3DgetDefaultSession viewstr -> sessionstr in let XMLgetMarkByValueFromMarkSons scenemark "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "shadows" -> shadowmark in ( XMLsetParam shadowmark "preset" elem; SO3SceneSetShadowPreset (V3DgetSession c3dXsession) (getOgreMaxShadowPreset elem); ); 0;; fun cbShadowSetupPresetMode(ctrl, pos, elem, p)= let p -> [viewstr val type scenemark] in let V3DgetDefaultSession viewstr -> sessionstr in let XMLgetMarkByValueFromMarkSons scenemark "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "shadows" -> shadowmark in ( XMLsetParam shadowmark "presetMode" elem; SO3SceneSetShadowLightingTechnique (V3DgetSession c3dXsession) (getOgreMaxShadowPresetMode elem); ); 0;; fun cbShadowSetupPresetQuality(ctrl, pos, elem, p)= let p -> [viewstr val type scenemark] in let V3DgetDefaultSession viewstr -> sessionstr in let XMLgetMarkByValueFromMarkSons scenemark "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "shadows" -> shadowmark in ( XMLsetParam shadowmark "presetQuality" elem; SO3SceneSetShadowQuality (V3DgetSession c3dXsession) (getOgreMaxShadowPresetQuality elem); ); 0;; fun cbShadowSetupMethod(ctrl, pos, elem, p)= let p -> [[viewstr val type scenemark] ctrlpresetmethod ctrlcamtype ctrlplx ctrlply ctrlplz ctrlpld ctrldist ctrlcount ctrlsize ctrloffset ctrlfadestart ctrlfadeend ctrlshadow] in let V3DgetDefaultSession viewstr -> sessionstr in let XMLgetMarkByValueFromMarkSons scenemark "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "shadows" -> shadowmark in let (getOgreMaxShadowMethod elem) -> seltype in ( XMLsetParam shadowmark "preset" (getOgreMaxShadowPresetByType SO3_SHADOWS_PRESET_NONE); SO3SceneSetShadowPreset (V3DgetSession c3dXsession) SO3_SHADOWS_PRESET_NONE; selectEdCtrlSelectByPos ctrlpresetmethod 0; XMLsetParam shadowmark "technique" elem; SO3SceneSetShadowTechnique (V3DgetSession sessionstr) seltype; if (seltype == SO3_SHADOWTYPE_TEXTURE_MODULATIVE) || (seltype == SO3_SHADOWTYPE_TEXTURE_ADDITIVE) || (seltype == SO3_SHADOWTYPE_TEXTURE_ADDITIVE_INTEGRATED) || (seltype == SO3_SHADOWTYPE_TEXTURE_MODULATIVE_INTEGRATED) then ( setEdCtrlSelectEnable ctrlcamtype 1; let if (getOgreMaxCameraShadowType (getSelectedEdCtrlSelect ctrlcamtype)) == SO3_PLANE_SHADOW_CAMERA then 1 else 0 -> ctrlstate in ( setEdCtrlFloatEnable ctrlplx ctrlstate; setEdCtrlFloatEnable ctrlply ctrlstate; setEdCtrlFloatEnable ctrlplz ctrlstate; setEdCtrlFloatEnable ctrlpld ctrlstate; ); setEdCtrlFloatEnable ctrlcount 1; setEdCtrlSelectEnable ctrlsize 1; setEdCtrlFloatEnable ctrloffset 1; setEdCtrlFloatEnable ctrlfadestart 1; setEdCtrlFloatEnable ctrlfadeend 1; setEdCtrlCheckEnable ctrlshadow 1; 0; ) else if (seltype == SO3_SHADOWTYPE_STENCIL_MODULATIVE) || (seltype == SO3_SHADOWTYPE_STENCIL_ADDITIVE) then ( setEdCtrlSelectEnable ctrlcamtype 0; setEdCtrlFloatEnable ctrlplx 0; setEdCtrlFloatEnable ctrlply 0; setEdCtrlFloatEnable ctrlplz 0; setEdCtrlFloatEnable ctrlpld 0; setEdCtrlFloatEnable ctrlcount 0; setEdCtrlSelectEnable ctrlsize 0; setEdCtrlFloatEnable ctrloffset 0; setEdCtrlFloatEnable ctrlfadestart 0; setEdCtrlFloatEnable ctrlfadeend 0; setEdCtrlCheckEnable ctrlshadow 0; 0; ) else ( setEdCtrlSelectEnable ctrlcamtype 0; setEdCtrlFloatEnable ctrlplx 0; setEdCtrlFloatEnable ctrlply 0; setEdCtrlFloatEnable ctrlplz 0; setEdCtrlFloatEnable ctrlpld 0; setEdCtrlFloatEnable ctrlcount 0; setEdCtrlSelectEnable ctrlsize 0; setEdCtrlFloatEnable ctrloffset 0; setEdCtrlFloatEnable ctrlfadestart 0; setEdCtrlFloatEnable ctrlfadeend 0; setEdCtrlCheckEnable ctrlshadow 0; 0; ); ); 0;; fun cbShadowSetupCameraType(ctrl, pos, elem, p)= let p -> [[viewstr val type scenemark] ctrlpresetmethod ctrlplx ctrlply ctrlplz ctrlpld] in let V3DgetDefaultSession viewstr -> sessionstr in let XMLgetMarkByValueFromMarkSons scenemark "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "shadows" -> shadowmark in let XMLgetMarkByValueFromMarkSons shadowmark "shadowCameraSetup" -> cameramark in let atof (XMLgetParam cameramark "planeX") -> plx in let atof (XMLgetParam cameramark "planeY") -> ply in let atof (XMLgetParam cameramark "planeZ") -> plz in let atof (XMLgetParam cameramark "planeD") -> pld in ( XMLsetParam shadowmark "preset" (getOgreMaxShadowPresetByType SO3_SHADOWS_PRESET_NONE); SO3SceneSetShadowPreset (V3DgetSession c3dXsession) SO3_SHADOWS_PRESET_NONE; selectEdCtrlSelectByPos ctrlpresetmethod 0; let if (getOgreMaxCameraShadowType elem) == SO3_PLANE_SHADOW_CAMERA then 1 else 0 -> ctrlstate in ( setEdCtrlFloatEnable ctrlplx ctrlstate; setEdCtrlFloatEnable ctrlply ctrlstate; setEdCtrlFloatEnable ctrlplz ctrlstate; setEdCtrlFloatEnable ctrlpld ctrlstate; ); XMLsetParam cameramark "type" elem; V3DsetShadowCameraType sessionstr (getOgreMaxCameraShadowType elem) plx ply plz pld; ); 0;; fun cbShadowSetupPlanX(ctrl, value, p)= let p -> [viewstr val type scenemark] in let V3DgetDefaultSession viewstr -> sessionstr in let XMLgetMarkByValueFromMarkSons scenemark "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "shadows" -> shadowmark in let XMLgetMarkByValueFromMarkSons shadowmark "shadowCameraSetup" -> cameramark in let atof (XMLgetParam cameramark "planeX") -> plx in let atof (XMLgetParam cameramark "planeY") -> ply in let atof (XMLgetParam cameramark "planeZ") -> plz in let atof (XMLgetParam cameramark "planeD") -> pld in ( XMLsetParam cameramark "planeX" XMLgetShortFloatToString value; V3DsetShadowCameraType sessionstr (V3DgetShadowCameraType sessionstr) value ply plz pld; ); 0;; fun cbShadowSetupPlanY(ctrl, value, p)= let p -> [viewstr val type scenemark] in let V3DgetDefaultSession viewstr -> sessionstr in let XMLgetMarkByValueFromMarkSons scenemark "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "shadows" -> shadowmark in let XMLgetMarkByValueFromMarkSons shadowmark "shadowCameraSetup" -> cameramark in let atof (XMLgetParam cameramark "planeX") -> plx in let atof (XMLgetParam cameramark "planeY") -> ply in let atof (XMLgetParam cameramark "planeZ") -> plz in let atof (XMLgetParam cameramark "planeD") -> pld in ( XMLsetParam cameramark "planeY" XMLgetShortFloatToString value; V3DsetShadowCameraType sessionstr (V3DgetShadowCameraType sessionstr) plx value plz pld; ); 0;; fun cbShadowSetupPlanZ(ctrl, value, p)= let p -> [viewstr val type scenemark] in let V3DgetDefaultSession viewstr -> sessionstr in let XMLgetMarkByValueFromMarkSons scenemark "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "shadows" -> shadowmark in let XMLgetMarkByValueFromMarkSons shadowmark "shadowCameraSetup" -> cameramark in let atof (XMLgetParam cameramark "planeX") -> plx in let atof (XMLgetParam cameramark "planeY") -> ply in let atof (XMLgetParam cameramark "planeZ") -> plz in let atof (XMLgetParam cameramark "planeD") -> pld in ( XMLsetParam cameramark "planeZ" XMLgetShortFloatToString value; V3DsetShadowCameraType sessionstr (V3DgetShadowCameraType sessionstr) plx ply value pld; ); 0;; fun cbShadowSetupPlanD(ctrl, value, p)= let p -> [viewstr val type scenemark] in let V3DgetDefaultSession viewstr -> sessionstr in let XMLgetMarkByValueFromMarkSons scenemark "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "shadows" -> shadowmark in let XMLgetMarkByValueFromMarkSons shadowmark "shadowCameraSetup" -> cameramark in let atof (XMLgetParam cameramark "planeX") -> plx in let atof (XMLgetParam cameramark "planeY") -> ply in let atof (XMLgetParam cameramark "planeZ") -> plz in let atof (XMLgetParam cameramark "planeD") -> pld in ( XMLsetParam cameramark "planeD" XMLgetShortFloatToString value; V3DsetShadowCameraType sessionstr (V3DgetShadowCameraType sessionstr) plx ply plz value; ); 0;; fun cbShadowSetupColor(ctrlstr, color, p)= if color == nil then nil else let p -> [viewstr val type scenemark] in let G2Dgetrgb color -> [r g b] in let ftoa ((itof r) /. 255.0) -> fr in let ftoa ((itof g) /. 255.0) -> fg in let ftoa ((itof b) /. 255.0) -> fb in let V3DgetDefaultSession viewstr -> sessionstr in let XMLgetMarkByValueFromMarkSons scenemark "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "shadows" -> shadowmark in let XMLgetMarkByValueFromMarkSons shadowmark "colourShadow" -> colormark in ( XMLsetParam colormark "r" fr; XMLsetParam colormark "g" fg; XMLsetParam colormark "b" fb; SO3SceneSetShadowColor (V3DgetSession sessionstr) G2Drgb2rgba color 0; ); 0;; fun cbShadowSetupFarDistance(ctrl, value, p)= let p -> [viewstr val type scenemark] in let V3DgetDefaultSession viewstr -> sessionstr in let XMLgetMarkByValueFromMarkSons scenemark "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "shadows" -> shadowmark in ( XMLsetParam shadowmark "extrusionDistance" XMLgetShortFloatToString value +. 50.0; SO3SceneSetShadowDirectionalLightExtrusionDistance (V3DgetSession sessionstr) value +. 50.0; XMLsetParam shadowmark "farDistance" XMLgetShortFloatToString value; SO3SceneSetShadowFarDistance (V3DgetSession sessionstr) value; ); 0;; fun cbShadowSetupSelfShadow(ctrl, state, p)= let p -> [viewstr val type scenemark] in let V3DgetDefaultSession viewstr -> sessionstr in let XMLgetMarkByValueFromMarkSons scenemark "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "shadows" -> shadowmark in ( XMLsetParam shadowmark "selfShadow" (XMLgetBoolString state); SO3SceneSetSelfShadowTexture (V3DgetSession sessionstr) state; ); 0;; fun cbShadowSetupTextureCount(ctrl, value, p)= let p -> [viewstr val type scenemark] in let V3DgetDefaultSession viewstr -> sessionstr in let XMLgetMarkByValueFromMarkSons scenemark "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "shadows" -> shadowmark in let XMLgetMarkByValueFromMarkSons shadowmark "shadowTextures" -> shadowtexturemark in ( XMLsetParam shadowtexturemark "count" (itoa (ftoi value)); SO3SceneSetShadowTextureCount (V3DgetSession sessionstr) ftoi value; ); 0;; fun cbShadowSetupTextureSize(ctrl, pos, elem, p)= let p -> [viewstr val type scenemark] in let V3DgetDefaultSession viewstr -> sessionstr in let XMLgetMarkByValueFromMarkSons scenemark "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "shadows" -> shadowmark in let XMLgetMarkByValueFromMarkSons shadowmark "shadowTextures" -> shadowtexturemark in ( XMLsetParam shadowtexturemark "size" elem; set iShadowTextureSize = atoi elem; SO3SceneSetShadowTextureSize (V3DgetSession sessionstr) atoi elem; ); 0;; fun cbShadowSetupTextureOffset(ctrl, value, p)= let p -> [viewstr val type scenemark] in let V3DgetDefaultSession viewstr -> sessionstr in let XMLgetMarkByValueFromMarkSons scenemark "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "shadows" -> shadowmark in let XMLgetMarkByValueFromMarkSons shadowmark "shadowTextures" -> shadowtexturemark in ( XMLsetParam shadowtexturemark "offset" XMLgetShortFloatToString value; SO3SceneSetShadowDirLightTextureOffset (V3DgetSession sessionstr) value; ); 0;; fun cbShadowSetupTextureFadeStart(ctrl, value, p)= let p -> [[viewstr val type scenemark] ctrlfadeend] in let V3DgetDefaultSession viewstr -> sessionstr in let getEdCtrlFloatValue ctrlfadeend -> startval in let XMLgetMarkByValueFromMarkSons scenemark "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "shadows" -> shadowmark in let XMLgetMarkByValueFromMarkSons shadowmark "shadowTextures" -> shadowtexturemark in ( if (startval >=. value) then nil else ( XMLsetParam shadowtexturemark "fadeEnd" XMLgetShortFloatToString value; setEdCtrlFloatValue ctrlfadeend value; SO3SceneSetShadowTextureFadeEnd (V3DgetSession sessionstr) value; set fShadowTextureFadeEnd = value; ); XMLsetParam shadowtexturemark "fadeStart" XMLgetShortFloatToString value; set fShadowTextureFadeStart = value; SO3SceneSetShadowTextureFadeStart (V3DgetSession sessionstr) value; ); 0;; fun cbShadowSetupTextureFadeEnd(ctrl, value, p)= let p -> [[viewstr val type scenemark] ctrlfadestart] in let V3DgetDefaultSession viewstr -> sessionstr in let getEdCtrlFloatValue ctrlfadestart -> startval in let XMLgetMarkByValueFromMarkSons scenemark "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "shadows" -> shadowmark in let XMLgetMarkByValueFromMarkSons shadowmark "shadowTextures" -> shadowtexturemark in ( if (startval <=. value) then nil else ( XMLsetParam shadowtexturemark "fadeStart" XMLgetShortFloatToString value; setEdCtrlFloatValue ctrlfadestart value; SO3SceneSetShadowTextureFadeStart (V3DgetSession sessionstr) value; set fShadowTextureFadeStart = value; ); XMLsetParam shadowtexturemark "fadeEnd" XMLgetShortFloatToString value; set fShadowTextureFadeEnd = value; SO3SceneSetShadowTextureFadeEnd (V3DgetSession sessionstr) value; ); 0;; fun cbShadowMaterialCaster(ctrl, pos, value, p)= let p -> [viewstr val type scenemark] in let V3DgetDefaultSession viewstr -> sessionstr in let XMLgetMarkByValueFromMarkSons scenemark "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "shadows" -> shadowmark in ( XMLsetParam shadowmark "casterMaterial" value; let if (!strcmp value "") then nil else value -> value in SO3SceneSetShadowCaster (V3DgetSession sessionstr) value; ); 0;; fun cbShadowMaterialReceiver(ctrl, pos, value, p)= let p -> [viewstr val type scenemark] in let V3DgetDefaultSession viewstr -> sessionstr in let XMLgetMarkByValueFromMarkSons scenemark "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "shadows" -> shadowmark in ( XMLsetParam shadowmark "receiverMaterial" value; let if (!strcmp value "") then nil else value -> value in SO3SceneSetShadowReceiver (V3DgetSession sessionstr) value; ); 0;; fun cbTreeMenuSetShadowMethod(mnuitem, p)= if winShadowSetup == nil then nil else ( dsEdWindow winShadowSetup; set winShadowSetup = nil; ); let p -> [viewstr val type markstr] in let [400 90] -> [iw ih] in let 10 -> ypos in let _GETWorkingAreaSize -> [sw sh] in let _GETscreenPos -> [mx my] in let [(if ((mx + iw) > sw) then (sw - iw) else mx) (if ((my + ih) > sh) then (sh - ih) else my)] -> [x y] in let V3DgetDefaultSession viewstr -> sessionstr in let G2Drgba2rgb SO3SceneGetShadowColor (V3DgetSession sessionstr) -> shadowcolor in let SO3SceneGetShadowTextureCount (V3DgetSession sessionstr) -> shadowcount in let SO3SceneGetSelfShadowTexture (V3DgetSession sessionstr) -> selfshadow in let SO3SceneGetShadowFarDistance (V3DgetSession sessionstr) -> fardistance in let SO3SceneGetShadowDirLightTextureOffset (V3DgetSession sessionstr) -> texoffset in let SO3SceneGetShadowTechnique (V3DgetSession sessionstr) -> shadowtechnique in let SO3SceneGetShadowCaster (V3DgetSession sessionstr) -> shadowcaster in let SO3SceneGetShadowReceiver (V3DgetSession sessionstr) -> shadowreceiver in let SO3SceneGetShadowPreset (V3DgetSession sessionstr) -> shadowpreset in let SO3SceneGetShadowLightingTechnique (V3DgetSession sessionstr) -> shadowpresetmode in let SO3SceneGetShadowQuality (V3DgetSession c3dXsession) -> shadowpresetquality in let SO3SceneGetShadowDirLightTextureOffset (V3DgetSession sessionstr) -> texoffset in let XMLgetMarkByValueFromMarkSons markstr "environment" -> envmark in let XMLgetMarkByValueFromMarkSons envmark "shadows" -> shadowmark in let XMLgetMarkByValueFromMarkSons shadowmark "shadowCameraSetup" -> cameramark in let getOgreMaxCameraShadowType (XMLgetParam cameramark "type") -> cameratype in let atof (XMLgetParam cameramark "planeX") -> plx in let atof (XMLgetParam cameramark "planeY") -> ply in let atof (XMLgetParam cameramark "planeZ") -> plz in let atof (XMLgetParam cameramark "planeD") -> pld in let setEdWindowIcon (crEdDialogWindow _channel mainInterf.MINT_winMain x y iw ih WN_NOSCOL|WN_MENU nil (loc "OS3D_0388")) sWinDlgIcon -> ewinstr in let crEdWindow _channel ewinstr 0 0 iw ih WN_CHILDINSIDE|WN_NOBORDER nil nil "" -> winstr in let crEdCtrlLabel winstr 10 (set ypos = 10) + 2 160 20 (loc "OS3D_0309") nil -> labeltype in let crEdCtrlSelect winstr 180 ypos (iw - 200) 120 nil -> ctrlpresetmethod in //let crEdCtrlLabel winstr 10 (set ypos = ypos + 25) + 2 160 20 (loc "OS3D_0310") nil -> labeltype in //let crEdCtrlSelect winstr 180 ypos (iw - 200) 120 nil -> ctrlpresetmode in let crEdCtrlLabel winstr 10 (set ypos = ypos + 25) + 2 160 20 (loc "OS3D_0311") nil -> labeltype in let crEdCtrlSelect winstr 180 ypos (iw - 200) 120 nil -> ctrlpresetquality in let crEdCtrlLabel winstr 10 (set ypos = ypos + 25) + 2 160 20 (loc "OS3D_0160") nil -> labeldist in let crEdCtrlFloat winstr 180 ypos 100 20 fardistance 0.0 100000.0 0.1 2 nil nil -> ctrldist in /* let crEdFrameWindowEx _channel gwinstr 0 0 (iw-20) 410 EDWIN_RESIZE_MW nil (loc "OS3D_0040") (loc "OS3D_0250") 1 -> winfrm in let crEdWindow _channel winfrm 0 18 (iw-20) 390 WN_CHILDINSIDE|WN_NOBORDER EDWIN_RESIZE_MW nil nil -> winstr in let crEdCtrlLabel winstr 10 (set ypos = 10) + 2 160 20 (loc "OS3D_0386") nil -> labeltype in let crEdCtrlSelect winstr 180 ypos 190 120 nil -> ctrlmethod in let crEdCtrlLabel winstr 10 (set ypos = ypos + 25) + 2 160 20 (loc "OS3D_0083") nil -> labelcamtype in let crEdCtrlSelect winstr 180 ypos 190 120 nil -> ctrlcamtype in let crEdCtrlLabel winstr 10 (set ypos = ypos + 25) + 2 160 20 (loc "OS3D_0300") nil -> labelplan in let crEdCtrlFloat winstr 180 ypos 100 20 plx(-. 100000.0) 100000.0 0.1 5 nil nil -> ctrlplx in let crEdCtrlLabel winstr 10 (set ypos = ypos + 25) + 2 160 20 (loc "OS3D_0301") nil -> labelplan in let crEdCtrlFloat winstr 180 ypos 100 20 ply (-. 100000.0) 100000.0 0.1 5 nil nil -> ctrlply in let crEdCtrlLabel winstr 10 (set ypos = ypos + 25) + 2 160 20 (loc "OS3D_0302") nil -> labelplan in let crEdCtrlFloat winstr 180 ypos 100 20 plz (-. 100000.0) 100000.0 0.1 5 nil nil -> ctrlplz in let crEdCtrlLabel winstr 10 (set ypos = ypos + 25) + 2 160 20 (loc "OS3D_0299") nil -> labelplan in let crEdCtrlFloat winstr 180 ypos 100 20 pld (-. 100000.0) 100000.0 0.1 5 nil nil -> ctrlpld in let crEdCtrlLabel winstr 10 (set ypos = ypos + 25) + 2 160 20 (loc "OS3D_0385") nil -> labelscolor in let crEdCtrlColorButton winstr 180 ypos 100 20 shadowcolor 0 nil nil -> ctrlscolor in let crEdCtrlLabel winstr 10 (set ypos = ypos + 25) + 2 160 20 (loc "OS3D_0415") nil -> labeldist in let crEdCtrlFloat winstr 180 ypos 100 20 itof shadowcount 1.0 256.0 1.0 0 nil nil -> ctrlcount in let crEdCtrlLabel winstr 10 (set ypos = ypos + 25) + 2 160 20 (loc "OS3D_0419") nil -> labelsize in let crEdCtrlSelect winstr 180 ypos 100 120 nil -> ctrlsize in let crEdCtrlLabel winstr 10 (set ypos = ypos + 25) + 2 160 20 (loc "OS3D_0418") nil -> labeloffset in let crEdCtrlFloat winstr 180 ypos 100 20 texoffset 0.0 1.0 0.01 5 nil nil -> ctrloffset in let crEdCtrlLabel winstr 10 (set ypos = ypos + 25) + 2 160 20 (loc "OS3D_0417") nil -> labelfadestart in let crEdCtrlFloat winstr 180 ypos 100 20 fShadowTextureFadeStart 0.0 1.0 0.001 4 nil nil -> ctrlfadestart in let crEdCtrlLabel winstr 10 (set ypos = ypos + 25) + 2 160 20 (loc "OS3D_0416") nil -> labelfadeend in let crEdCtrlFloat winstr 180 ypos 100 20 fShadowTextureFadeEnd 0.0 1.0 0.001 4 nil nil -> ctrlfadeend in let crEdCtrlCheck winstr 10 (set ypos = ypos + 25) + 2 190 20 (loc "OS3D_0369") nil -> ctrlshadow in let crEdCtrlLabel winstr 10 (set ypos = ypos + 25) + 2 160 20 (loc "OS3D_0384") nil -> labeltype in let crEdCtrlSelect winstr 180 ypos 190 120 nil -> ctrlcaster in let crEdCtrlLabel winstr 10 (set ypos = ypos + 25) + 2 160 20 (loc "OS3D_0387") nil -> labeltype in let crEdCtrlSelect winstr 180 ypos 190 120 nil -> ctrlreceiver in */ ( set winShadowSetup = ewinstr; fillEdCtrlSelect ctrlpresetmethod "none"::/*"presetStencil"::*/"presetLISPSM"::"presetPSSM"::"presetCSM"::nil; selectEdCtrlSelect ctrlpresetmethod (getOgreMaxShadowPresetByType shadowpreset); setEdCtrlSelectCb ctrlpresetmethod mkfun4 @cbShadowSetupPreset p; fillEdCtrlSelect ctrlpresetquality "presetVeryLow"::"presetLow"::"presetMedium"::"presetHigh"::"presetVeryHigh"::nil; selectEdCtrlSelect ctrlpresetquality (getOgreMaxShadowPresetQualityByType shadowpresetquality); setEdCtrlSelectCb ctrlpresetquality mkfun4 @cbShadowSetupPresetQuality p; //fillEdCtrlSelect ctrlpresetmode "presetModulative"::"presetAdditive"::nil; //selectEdCtrlSelect ctrlpresetmode (getOgreMaxShadowPresetModeByType shadowpresetmode); //setEdCtrlSelectCb ctrlpresetmode mkfun4 @cbShadowSetupPresetMode p; setEdCtrlFloatCbChange ctrldist mkfun3 @cbShadowSetupFarDistance p; /* let SO3SceneParseMaterialsFromGroup (V3DgetSession sessionstr) (getGroupName currentProject nil) -> l in let sizelist l -> size in let nil -> lmats in let 0 -> i in ( while i < size do ( let nth_list l i -> mat in let SO3MaterialGetName mat -> name in set lmats = name::lmats; set i = i + 1; ); fillEdCtrlSelect ctrlcaster quicksort ""::lmats @suppDoublon; selectEdCtrlSelect ctrlcaster shadowcaster; fillEdCtrlSelect ctrlreceiver quicksort ""::lmats @suppDoublon; selectEdCtrlSelect ctrlreceiver shadowreceiver; setEdCtrlSelectCb ctrlcaster mkfun4 @cbShadowMaterialCaster p; setEdCtrlSelectCb ctrlreceiver mkfun4 @cbShadowMaterialReceiver p; ); if (shadowtechnique == SO3_SHADOWTYPE_TEXTURE_MODULATIVE) || (shadowtechnique == SO3_SHADOWTYPE_TEXTURE_ADDITIVE) || (shadowtechnique == SO3_SHADOWTYPE_TEXTURE_ADDITIVE_INTEGRATED) || (shadowtechnique == SO3_SHADOWTYPE_TEXTURE_MODULATIVE_INTEGRATED) then ( setEdCtrlSelectEnable ctrlcamtype 1; let if (getOgreMaxCameraShadowType (getSelectedEdCtrlSelect ctrlcamtype)) == SO3_PLANE_SHADOW_CAMERA then 1 else 0 -> ctrlstate in ( setEdCtrlFloatEnable ctrlplx ctrlstate; setEdCtrlFloatEnable ctrlply ctrlstate; setEdCtrlFloatEnable ctrlplz ctrlstate; setEdCtrlFloatEnable ctrlpld ctrlstate; ); setEdCtrlFloatEnable ctrlcount 1; setEdCtrlSelectEnable ctrlsize 1; setEdCtrlFloatEnable ctrloffset 1; setEdCtrlFloatEnable ctrlfadestart 1; setEdCtrlFloatEnable ctrlfadeend 1; setEdCtrlCheckEnable ctrlshadow 1; 0; ) else if (shadowtechnique == SO3_SHADOWTYPE_STENCIL_MODULATIVE) || (shadowtechnique == SO3_SHADOWTYPE_STENCIL_ADDITIVE) then ( setEdCtrlSelectEnable ctrlcamtype 0; setEdCtrlFloatEnable ctrlplx 0; setEdCtrlFloatEnable ctrlply 0; setEdCtrlFloatEnable ctrlplz 0; setEdCtrlFloatEnable ctrlpld 0; setEdCtrlFloatEnable ctrlcount 0; setEdCtrlSelectEnable ctrlsize 0; setEdCtrlFloatEnable ctrloffset 0; setEdCtrlFloatEnable ctrlfadestart 0; setEdCtrlFloatEnable ctrlfadeend 0; setEdCtrlCheckEnable ctrlshadow 0; 0; ) else ( setEdCtrlSelectEnable ctrlcamtype 0; setEdCtrlFloatEnable ctrlplx 0; setEdCtrlFloatEnable ctrlply 0; setEdCtrlFloatEnable ctrlplz 0; setEdCtrlFloatEnable ctrlpld 0; setEdCtrlFloatEnable ctrlcount 0; setEdCtrlSelectEnable ctrlsize 0; setEdCtrlFloatEnable ctrloffset 0; setEdCtrlFloatEnable ctrlfadestart 0; setEdCtrlFloatEnable ctrlfadeend 0; setEdCtrlCheckEnable ctrlshadow 0; 0; ); fillEdCtrlSelect ctrlmethod "none"::"stencilModulative"::"stencilAdditive"::"textureModulative"::"textureAdditive"::"textureAdditiveIntegrated"::"textureModulativeIntegrated"::nil; fillEdCtrlSelect ctrlcamtype "uniform"::"uniformFocused"::"LiSPSM"::"planeOptimal"::nil; fillEdCtrlSelect ctrlsize "64"::"128"::"256"::"512"::"1024"::"2048"::"4096"::nil; setEdCtrlCheckState ctrlshadow selfshadow; selectEdCtrlSelect ctrlmethod (getOgreMaxShadowMethodByType shadowtechnique); selectEdCtrlSelect ctrlcamtype (getOgreMaxCameraShadowByType cameratype); selectEdCtrlSelect ctrlsize itoa iShadowTextureSize; setEdCtrlSelectCb ctrlmethod mkfun4 @cbShadowSetupMethod [p ctrlpresetmethod ctrlcamtype ctrlplx ctrlply ctrlplz ctrlpld ctrldist ctrlcount ctrlsize ctrloffset ctrlfadestart ctrlfadeend ctrlshadow]; setEdCtrlSelectCb ctrlcamtype mkfun4 @cbShadowSetupCameraType [p ctrlpresetmethod ctrlplx ctrlply ctrlplz ctrlpld]; setEdCtrlSelectCb ctrlsize mkfun4 @cbShadowSetupTextureSize p; setEdCtrlColorButtonCb ctrlscolor mkfun3 @cbShadowSetupColor p; setEdCtrlFloatCbChange ctrlplx mkfun3 @cbShadowSetupPlanX p; setEdCtrlFloatCbChange ctrlply mkfun3 @cbShadowSetupPlanY p; setEdCtrlFloatCbChange ctrlplz mkfun3 @cbShadowSetupPlanZ p; setEdCtrlFloatCbChange ctrlpld mkfun3 @cbShadowSetupPlanD p; setEdCtrlFloatCbChange ctrlcount mkfun3 @cbShadowSetupTextureCount p; setEdCtrlFloatCbChange ctrloffset mkfun3 @cbShadowSetupTextureOffset p; setEdCtrlFloatCbChange ctrlfadestart mkfun3 @cbShadowSetupTextureFadeStart [p ctrlfadeend]; setEdCtrlFloatCbChange ctrlfadeend mkfun3 @cbShadowSetupTextureFadeEnd [p ctrlfadestart]; setEdCtrlCheckCbState ctrlshadow mkfun3 @cbShadowSetupSelfShadow p; */ setEdwindowCbDestroy winShadowSetup @cbDestroyShadowSetupWin; 0; ); 0;;