2016-12-01 71 views
1

3D透視應該阻止貨架等正確Scnview節點出現半透明

的ScnView的樣品圖像:

sample ScnView

非常簡單。新增了Scnview。添加了Scnnodes(形狀和燈光)

使用標準Omni型燈。

爲什麼前面的物體沒有阻擋後面的物體?

下面的代碼:

[self.studioView addSubview:showTimeView]; 

showTimeView.frame = CGRectMake(self.paperView.frame.origin.x, 
           self.paperView.frame.origin.y, 
           self.paperView.frame.size.width, 
           self.paperView.frame.size.height); 

SCNView *sceneView = (SCNView *)showTimeView; 
sceneView.backgroundColor = [UIColor whiteColor]; 

sceneView.scene = [SCNScene scene]; 
SCNNode *root = sceneView.scene.rootNode; 
sceneView.allowsCameraControl   = YES; 
sceneView.autoenablesDefaultLighting = NO; 


// Add Camera 
SCNNode *cameraNode = [SCNNode node]; 
cameraNode.camera = [SCNCamera camera]; 
cameraNode.position = SCNVector3Make(0, 0, 100); 
cameraNode.eulerAngles = SCNVector3Make(0, -M_PI/8, 0); 
cameraNode.camera.zNear = 0; 
cameraNode.camera.zFar = thisModuleDepth; 
cameraNode.camera.xFov = thisWallWidth; 
cameraNode.camera.yFov = thisModuleHeight; 
[root addChildNode:cameraNode]; 

// Add Cabinet Piece 
SCNBox *cubeGeom = [SCNBox boxWithWidth:tW 
           height:tH 
           length:tD 
          chamferRadius:0.0]; 
SCNNode *cubeNode = [SCNNode nodeWithGeometry:cubeGeom]; 
cubeNode.position = SCNVector3Make(tX, tY, tZ); 

// Tag Material 
SCNMaterial *material = [SCNMaterial material]; 
material.diffuse.contents = [UIImage imageNamed:thisColor]; 
[material.diffuse.contents setAccessibilityIdentifier:thisColor] ; 
[material.diffuse.contents setAccessibilityLabel:thisID] ; 
cubeNode.geometry.firstMaterial = material; 
cubeNode.geometry.firstMaterial.locksAmbientWithDiffuse = NO; 
cubeNode.physicsBody = [SCNPhysicsBody staticBody]; 
[root addChildNode:cubeNode]; 

// Add spotlight 
SCNLight *spotLight = [SCNLight light]; 
spotLight.type = SCNLightTypeOmni; 
spotLight.color = [UIColor whiteColor]; 
SCNNode *spotLightNode = [SCNNode node]; 
spotLightNode.light = spotLight; 
spotLightNode.position = SCNVector3Make(thisWallWidth/2 ,thisModuleHeight, thisModuleDepth *2); 
spotLightNode.light.intensity = 1000; 
[root addChildNode:spotLightNode]; 
+0

你創建在Interface Builder或代碼SCNView?如果是後者,請提供。它看起來像你的場景已禁用深度測試,但我不認爲這是默認。 –

+0

全部完成代碼...我只添加了IBOutlet SCNView * showTimeView來爲Interface Builder提取正確的視圖... – Juanra

回答

1

感謝諾亞,

我終於想通了,什麼是錯的!

將SCNCamera的automaticallyAdjustsZRange屬性設置爲true,它將確保沒有任何內容被剪切,因爲設置了錯誤的zNear或zFar。

感謝您的幫助!

這是固定的:Perfect 3D Perspective

enter image description here