Structures et constantes Swift dans Pythonista? Je pensais que je ne pouvais pas changer le LightingModel de SCNMaterial, auquel je ne pouvais pas accéder correctement et pourrais changer la texture du modèle de manière significative, mais j'ai trouvé un moyen de le faire.
setLightingModelName_(string name)
lightingModel est une propriété de SCNMaterial, mais pour le modifier, utilisez la fonction setLightingModelName_.
L'argument est une chaîne de caractères et les chaînes de caractères suivantes peuvent être spécifiées.
class SCNLightingModel:
blinn = 'SCNLightingModelBlinn'
constant = 'SCNLightingModelConstant'
lambert = 'SCNLightingModelLambert'
phong = 'SCNLightingModelPhong'
physicallyBased = 'SCNLightingModelPhysicallyBased'
shadowOnly = 'SCNLightingModelShadowOnly'
scenekit03.py
import objc_util
from objc_util import *
import ui
load_framework('SceneKit')
SCNView,SCNNode,SCNScene,SCNCamera,SCNLight,SCNBox,SCNMaterial = map(ObjCClass, ['SCNView','SCNNode','SCNScene','SCNCamera','SCNLight','SCNBox','SCNMaterial'])
class SCNLightingModel:
blinn = 'SCNLightingModelBlinn'
constant = 'SCNLightingModelConstant'
lambert = 'SCNLightingModelLambert'
phong = 'SCNLightingModelPhong'
physicallyBased = 'SCNLightingModelPhysicallyBased'
shadowOnly = 'SCNLightingModelShadowOnly'
def main():
main_view = ui.View()
main_view_objc = ObjCInstance(main_view)
# View
scene_view = SCNView.alloc().initWithFrame_options_(((0, 0),(400, 400)), None).autorelease()
# UIView.autoresizingMask = flexibleWidth(2) | flexibleHeight(16)
scene_view.setAutoresizingMask_(18)
scene_view.setAllowsCameraControl_(True)
scene = SCNScene.scene()
node_root = scene.rootNode()
# material
material = SCNMaterial.material()
material.setLightingModelName_(SCNLightingModel.physicallyBased)
material.diffuse().setColor_(UIColor.redColor().CGColor())
# box geometry
geom_box = SCNBox.boxWithWidth_height_length_chamferRadius_(1.0,1.0,1.0,0.2)
geom_box.setMaterials_([material])
node_box = SCNNode.nodeWithGeometry_(geom_box)
node_box.setPosition((-0.5,0.5,-0.5))
node_root.addChildNode_(node_box)
# camera
camera = SCNCamera.camera()
node_camera = SCNNode.node()
node_camera.setCamera(camera)
node_camera.setPosition((0,0,5.0))
node_root.addChildNode_(node_camera)
# Light
light = SCNLight.light()
light.setType_('omni')
light.setColor_(UIColor.whiteColor().CGColor())
node_light = SCNNode.node()
node_light.setPosition((2.0,2.0,2.0))
node_light.setLight_(light)
node_root.addChildNode_(node_light)
scene_view.setScene_(scene)
main_view_objc.addSubview_(scene_view)
main_view.name = 'scene kit'
main_view.present()
main()
La relation entre la structure LightingModel de SCNMaterial et SCNLightingModel est un mystère.