I have been trying to implement a simultaneous side view and top view of a 3d craft scene, each with independent orbit viewers, but unfortunately have not succeeded. I hoped it would be possible with two cameras and viewports. I am using the legacy craft version. Any ideas gratefully received?
I managed to make something work, using setContext().
~~~
require(asset.documents.Craft.Cameras)
– splitScreen, PiInTheSky, 31/1/26
function setup()
print(“Hello splitscreen”)
parameter.number(“rot1x”,0,360,0, function() c1.rx=rot1x end)
parameter.number(“rot1y”,0,360,0, function() c1.ry=rot1y end)
parameter.number(“zoom1”,0,360,10, function() c1.zoom=zoom1 end)
parameter.number("rot2x",0,360,0, function() c2.rx=rot2x end)
parameter.number("rot2y",0,360,0, function() c2.ry=rot2y end)
parameter.number("zoom2",0,360,10, function() c2.zoom=zoom2 end)
screen1=image(WIDTH*0.5,HEIGHT)
screen2=image(WIDTH*0.5,HEIGHT)
scene = craft.scene()
local m = craft.model("CastleKit:knightBlue")
myModel = scene:entity()
myModel:add(craft.renderer, m)
ang=0
cam1Ent=scene:entity()
cam1Ent:add(craft.camera,45, 0.1, 1000, false)
c1=cam1Ent:add(OrbitViewer, vec3(0,5,0), 5, 20, 20)
cam1Ent.active=true
cam2Ent=scene:entity()
cam2Ent:add(craft.camera,45, 0.1, 1000, false)
c2=cam2Ent:add(OrbitViewer, vec3(0,5,0), 5, 20, 20)
cam2Ent.active=true
left=true
ang=0
end
function touched(touch)
if touch.pos.x<WIDTH/2 then
c1:touched(touch)
else
c2:touched(touch)
end
end
function update(dt)
ang=ang+0.5
myModel.eulerAngles=vec3(0,ang,0)
scene:update(dt)
end
function standarddraw()
update(DeltaTime)
scene:draw()
end
function draw()
left = not left
update(DeltaTime)
if left then
setContext(screen1,true)
cam1Ent.active=true
cam2Ent.active=false
scene:draw()
setContext()
else
setContext(screen2,true)
cam1Ent.active=false
cam2Ent.active=true
scene:draw()
setContext()
end
background(0)
sprite(screen1,WIDTH*0.25,HEIGHT/2, WIDTH*0.5, HEIGHT)
sprite(screen2,WIDTH*0.75,HEIGHT/2, WIDTH*0.5, HEIGHT)
end
~~~
Formatting is screwed up?
Implemented split view in my KM3NeT event display app.