Code: Select all
;
; ------------------------------------------------------------
;
; PureBasic - ReloadMaterial
;
; (c) 2012 - Fantaisie Software
;
; ------------------------------------------------------------
;
;Use [F5]
IncludeFile #PB_Compiler_Home + "Examples/3D/Screen3DRequester.pb"
Declare CreateMaterialScript()
If InitEngine3D()
InitSprite()
InitKeyboard()
InitMouse()
If Screen3DRequester()
Add3DArchive("Data/Models" , #PB_3DArchive_FileSystem)
Add3DArchive("Data/Textures", #PB_3DArchive_FileSystem)
Add3DArchive("Data/Scripts" , #PB_3DArchive_FileSystem)
Parse3DScripts()
;- Mesh
LoadMesh(0, "Robot.mesh")
;- Entity
CreateEntity(0, MeshID(0), #PB_Material_None)
;- Plane
CreateEntity(1, MeshID(CreatePlane(#PB_Any, 2000, 2000, 200, 200, 10, 10)), MaterialID(GetScriptMaterial(#PB_Any, "Examples/RustySteel")), 0, 0, 0)
; Camera
;
CreateCamera(0, 0, 0, 100, 100)
CameraLocate(0, 120, 90, 90)
CameraLookAt(0, 0, 50, 0)
CameraBackColor(0, RGB(0, 0, 30))
;- Light
;
AmbientColor(RGB(75, 75, 75))
CreateLight(0, RGB(255, 255, 255), 100, 100, 150)
WorldShadows(#PB_Shadow_Additive)
Repeat
Screen3DEvents()
If ExamineKeyboard()
If KeyboardReleased(#PB_Key_F5)
CreateMaterialScript()
ReloadMaterial("Test", "ReloadMaterial.material", #True)
GetScriptMaterial(0, "Test")
SetEntityMaterial(0, MaterialID(0))
EndIf
EndIf
RenderWorld()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
End
EndIf
Else
MessageRequester("Error","Can't initialize engine3D")
EndIf
Procedure CreateMaterialScript()
If CreateFile(0, "Data\Scripts\ReloadMaterial.material")
Restore Material
Line$ = "material Test"
While Line$<> "END"
WriteStringN(0, Line$)
Read.s Line$
Wend
CloseFile(0)
Else
MessageRequester("Information","may not create the file!")
EndIf
EndProcedure
DataSection
Material:
Data.s "{"
Data.s " receive_shadows off"
Data.s " technique"
Data.s " {"
Data.s " pass"
Data.s " {"
Data.s " texture_unit"
Data.s " {"
Data.s " texture nskingr.jpg"
Data.s " }"
Data.s " }"
Data.s " }"
Data.s "}"
Data.s "END"
EndDataSection
It is like EntityRenderMode(Entity, #PB_Entity_CastShadow) is called
by PB itself. Click F5 and the shadow should be disabled because of
the new material. Currently only a call of EntityRenderMode(Entity, 0)
will deactivate shadows for that entity.
MFG PMV