62 lines
1.7 KiB
Text
62 lines
1.7 KiB
Text
-- Lesson 23: Models And Light. The finished script, exactly as the lesson ends.
|
|
|
|
sceneEnable(true)
|
|
sceneSetBackground(10, 12, 20)
|
|
sceneSetAmbient(28, 30, 38)
|
|
|
|
local stone = materialNew()
|
|
materialSetColor(stone, 105, 105, 115)
|
|
materialSetRoughness(stone, 0.9)
|
|
|
|
local floor = nodeNew()
|
|
nodeSetMesh(floor, meshBox(24, 0.4, 24), stone)
|
|
nodeSetPosition(floor, 0, -0.2, 0)
|
|
|
|
local dragonModel = modelLoad("Singe/DragonModel.glb")
|
|
local dragon = modelInstance(dragonModel)
|
|
nodeSetScale(dragon, 0.5)
|
|
nodeSetRotation(dragon, 0, -60, 0)
|
|
|
|
local clips = modelGetAnimations(dragonModel)
|
|
|
|
if #clips > 0 then
|
|
animationPlay(dragon, 1, true)
|
|
else
|
|
debugPrint("DragonModel.glb carries no animation clips. The wings are turned by hand.")
|
|
end
|
|
|
|
local wingLeft = nodeFind("wingL", dragon)
|
|
local wingRight = nodeFind("wingR", dragon)
|
|
|
|
local sun = lightNew(LIGHT_DIRECTIONAL)
|
|
nodeSetPosition(sun, -6, 9, 7)
|
|
nodeLookAt(sun, 0, 1.5, 0)
|
|
lightSetColor(sun, 255, 244, 224)
|
|
lightSetIntensity(sun, 1.8)
|
|
lightSetShadow(sun, true)
|
|
|
|
local torch = lightNew(LIGHT_POINT)
|
|
nodeSetPosition(torch, 3.5, 1.2, 3.0)
|
|
lightSetColor(torch, 255, 150, 70)
|
|
lightSetIntensity(torch, 14)
|
|
lightSetRange(torch, 12)
|
|
|
|
local camera = nodeNew()
|
|
nodeSetPosition(camera, 0, 2.6, 9)
|
|
nodeLookAt(camera, 0, 1.7, 0)
|
|
cameraSet(camera)
|
|
cameraSetPerspective(55, 0.1, 200)
|
|
|
|
|
|
function onOverlayUpdate()
|
|
local flap = math.sin(singeGetTicks() / 260) * 22
|
|
|
|
nodeSetRotation(wingLeft, flap, 0, 0)
|
|
nodeSetRotation(wingRight, -flap, 0, 0)
|
|
nodeRotate(dragon, 0, 0.25, 0)
|
|
|
|
overlayClear()
|
|
overlayPrint(2, 2, "Singe/DragonModel.glb")
|
|
overlayPrint(2, 4, "animation clips in the file: " .. #clips)
|
|
return OVERLAY_UPDATED
|
|
end
|