Platforms to show: All Mac Windows Linux Cross-Platform

/Mac64bit/SceneKit/SceneKit Images


Required plugins for this example: MBS Mac64bit Plugin, MBS MacBase Plugin, MBS Main Plugin, MBS MacCG Plugin

You find this example project in your Plugins Download as a Xojo project file within the examples folder: /Mac64bit/SceneKit/SceneKit Images

This example is the version from Mon, 3rd Feb 2019.

Project "SceneKit Images.xojo_binary_project"
Class App Inherits Application
Const kEditClear = "&Delete"
Const kFileQuit = "&Quit"
Const kFileQuitShortcut = ""
EventHandler Sub Open() #if Target64Bit and TargetMacOS then // okay #else MsgBox "Please switch project to 64-bit and run on MacOS." #endif End EventHandler
End Class
Class MainWindow Inherits Window
Control MyControl Inherits SCNControlMBS
ControlInstance MyControl Inherits SCNControlMBS
EventHandler Sub Open() MyView = me.View MyScene = new SCNSceneMBS MyView.scene = MyScene MyView.backgroundColor = NSColorMBS.blackColor MyView.autoenablesDefaultLighting = true Myview.allowsCameraControl = true // show three cylinders. dim c1 as new SCNCylinderMBS(0.5, 100) dim c2 as new SCNCylinderMBS(0.5, 100) dim c3 as new SCNCylinderMBS(0.5, 100) dim n1 as new SCNNodeMBS(c1) dim n2 as new SCNNodeMBS(c2) dim n3 as new SCNNodeMBS(c3) const pi = 3.1415926535897932384626433 n2.eulerAngles = SCNVector3MBS.Vector(pi/2, 0, 0) n3.eulerAngles = SCNVector3MBS.Vector(0, 0, pi/2) MyScene.rootNode.addChildNode n1 MyScene.rootNode.addChildNode n2 MyScene.rootNode.addChildNode n3 End EventHandler
End Control
Control SegmentedControl1 Inherits SegmentedControl
ControlInstance SegmentedControl1 Inherits SegmentedControl
EventHandler Sub Action(itemIndex as integer) Select case itemIndex case 0 CreateImage case 1 CreateCube case 2 CreateFading case 3 CreateCube3d end Select End EventHandler
End Control
Control MyTimer Inherits Timer
ControlInstance MyTimer Inherits Timer
EventHandler Sub Action() dim LastIndex as integer = NodeIndex NodeIndex = (NodeIndex + 1) mod (nodes.Ubound+1) nodes(LastIndex).runAction SCNActionMBS.fadeOut(2) nodes(NodeIndex).runAction SCNActionMBS.fadeIn(2) End EventHandler
End Control
Sub CreateCube() MyScene = new SCNSceneMBS dim pic as Picture = LogoMBS(500) dim box as new SCNBoxMBS(500, 500, 500, 0) box.firstMaterial.diffuse.contents = pic dim node as new SCNNodeMBS(box) MyScene.rootNode.addChildNode node // show scene MyView.scene = MyScene End Sub
Sub CreateCube3d() // See tutorial here: // https://code.tutsplus.com/tutorials/an-introduction-to-scenekit-fundamentals--cms-23847 const pi = 3.1415926535897932384626433 dim scene as new SCNSceneMBS myView.scene = scene dim camera as new SCNCameraMBS dim cameraNode as new SCNNodeMBS cameraNode.camera = camera cameraNode.position = SCNVector3MBS.Vector( -3.0, 3.0, 3.0) // spot light dim light as new SCNLightMBS light.type = SCNLightMBS.SCNLightTypeSpot light.spotInnerAngle = 30.0 light.spotOuterAngle = 80.0 light.castsShadow = true dim lightNode as new SCNNodeMBS lightNode.light = light lightNode.position = SCNVector3MBS.Vector(1.5, 1.5, 1.5) // add cube dim cubeGeometry as new SCNBoxMBS( 1.0, 1.0, 1.0, 0.0) dim cubeNode as new SCNNodeMBS(cubeGeometry) // ground plate dim planeGeometry as new SCNPlaneMBS( 50.0, 50.0) dim planeNode as new SCNNodeMBS(planeGeometry) planeNode.eulerAngles = SCNVector3MBS.Vector( -90 * pi / 180.0, 0, 0) planeNode.position = SCNVector3MBS.Vector( 0, -0.5, 0) // add some colors dim redMaterial as new SCNMaterialMBS redMaterial.diffuse.contents = NSColorMBS.redColor cubeGeometry.setMaterials array(redMaterial) dim greenMaterial as new SCNMaterialMBS greenMaterial.diffuse.contents = NSColorMBS.greenColor planeGeometry.setMaterials array(greenMaterial) // background light dim ambientLight as new SCNLightMBS ambientLight.type = SCNLightMBS.SCNLightTypeAmbient ambientLight.color = NSColorMBS.colorWithRGB( 0.2, 0.2, 0.2, 1.0) cameraNode.light = ambientLight // limit moving dim constraint as new SCNLookAtConstraintMBS(cubeNode) constraint.gimbalLockEnabled = true cameraNode.setConstraints array(constraint) lightNode.setConstraints array(constraint) scene.rootNode.addChildNode(lightNode) scene.rootNode.addChildNode(cameraNode) scene.rootNode.addChildNode(cubeNode) scene.rootNode.addChildNode(planeNode) End Sub
Sub CreateFading() MyScene = new SCNSceneMBS redim nodes(-1) dim w as integer = MyControl.Width dim h as integer = MyControl.Height dim pics() as Picture pics.Append NewPicture(MyControl.Width, MyControl.Height, &cFF0000) pics.Append NewPicture(MyControl.Width, MyControl.Height, &c00FF00) pics.Append NewPicture(MyControl.Width, MyControl.Height, &c0000FF) pics.Append NewPicture(MyControl.Width, MyControl.Height, &c00FFFF) pics.Append NewPicture(MyControl.Width, MyControl.Height, &cFF00FF) pics.Append NewPicture(MyControl.Width, MyControl.Height, &cFFFF00) pics.Append NewPicture(MyControl.Width, MyControl.Height, &cFFFFFF) dim rootNode as SCNNodeMBS = MyScene.rootNode dim planes() as SCNPlaneMBS dim sequence() as SCNActionMBS for each p as Picture in pics dim plane as new SCNPlaneMBS(w,h) plane.firstMaterial.diffuse.contents = p dim node as new SCNNodeMBS(plane) node.opacity = 0 nodes.append node rootNode.addChildNode node next NodeIndex = 0 nodes(NodeIndex).Opacity = 1 dim sequenceAction as SCNActionMBS = SCNActionMBS.sequence(sequence) rootNode.runAction sequenceAction MyView.play // show scene MyView.scene = MyScene 'dim p as SCNVector3MBS = MyView.pointOfView.Position // zoom to full for this view dim n as new SCNNodeMBS n.Position = SCNVector3MBS.Vector(0, 0, 380) MyView.pointOfView = n MyTimer.Mode = 2 End Sub
Sub CreateImage() MyScene = new SCNSceneMBS dim pic as Picture = LogoMBS(500) dim plane as new SCNPlaneMBS(500,500) plane.firstMaterial.diffuse.contents = pic dim node as new SCNNodeMBS(plane) MyScene.rootNode.addChildNode node // show scene MyView.scene = MyScene End Sub
Shared Function NewPicture(w as integer, h as integer, c as color) As Picture dim p as new Picture(w, h) dim g as Graphics = p.Graphics g.ForeColor = c g.FillRect 0, 0, w, h return p End Function
Note "Note"
Based on code found in the tutorial Introduction To SceneKit – Part 1 https://www.weheartswift.com/introduction-scenekit-part-1/
Note "Plugins needed"
MBS Xojo AVFoundation Plugin.xojo_plugin MBS Xojo Mac64bit Plugin.xojo_plugin MBS Xojo MacBase Plugin.xojo_plugin MBS Xojo MacCF Plugin.xojo_plugin MBS Xojo MacCG Plugin.xojo_plugin MBS Xojo MacCloud Plugin.xojo_plugin MBS Xojo MacCocoa Plugin.xojo_plugin MBS Xojo MacControls Plugin.xojo_plugin MBS Xojo Main Plugin.xojo_plugin
Property MyScene As SCNSceneMBS
Property MyView As SCNViewMBS
Property NodeIndex As Integer
Property nodes() As SCNNodeMBS
End Class
MenuBar MainMenuBar
MenuItem FileMenu = "&File"
MenuItem FileQuit = "#App.kFileQuit"
MenuItem EditMenu = "&Edit"
MenuItem EditUndo = "&Undo"
MenuItem EditSeparator1 = "-"
MenuItem EditCut = "Cu&t"
MenuItem EditCopy = "&Copy"
MenuItem EditPaste = "&Paste"
MenuItem EditClear = "#App.kEditClear"
MenuItem EditSeparator2 = "-"
MenuItem EditSelectAll = "Select &All"
End MenuBar
End Project

See also:

The items on this page are in the following plugins: MBS Mac64bit Plugin.


The biggest plugin in space...