主要問題是SCNScene
導入不起作用。因此,正確的解決方案是將obj.file導入SCNNode
,將所選顏色(或圖像)的SCNMaterial
添加到SCNNode
,並將SCNNode
添加到SCNScene
。要加載obj.file,您需要通過Model IO Framework導入該文件。
我會給我一些代碼,我如何使它豐富多彩。
#import <SceneKit/SceneKit.h>
#import <ModelIO/ModelIO.h>
#import <SceneKit/ModelIO.h>
...
@property (nonatomic) SCNView* mainView;
....
MDLAsset *asset = [[MDLAsset alloc] initWithURL:url];
SCNScene *scene = [SCNScene scene];
SCNNode *node = [SCNNode nodeWithMDLObject:[asset objectAtIndex:0]];
SCNMaterial *material = [SCNMaterial material];
material.diffuse.contents = [UIColor colorWithHue:0 saturation:0.1 brightness:0.5 alpha:1];
node.geometry.firstMaterial = material;
[scene.rootNode addChildNode:node];
[self.mainView.scene.rootNode addChildNode:scene.rootNode];
或者你可以通過這個添加顏色:
material.diffuse.contents = [UIImage imageNamed:@"farbe.png"];
現在你可以導入一個ny obj.file外部(來自您喜歡的任何選定文件夾)併爲其着色。
感謝SGlindemann,cashmash和Hal Mueller,他幫助我們找到了解決方案。
更新(2017年1月29日)
不知怎的,上述方式不工作了。我沒有弄清楚什麼改變了。但我做了另一個代碼,使加載的3D文件成爲可能(從mainBundle
,而不是外部)。在這裏,我從ViewController.m
調用的SCNNode
類開始。 SCNScene
設置在ViewController
中。以下是我爲SCNNode
課寫的代碼。
在開始之前,將.obj和.mtl文件(兩者同名)放入Xcode項目中。您不需要將其轉換爲場景。
#import <ModelIO/ModelIO.h>
#import <SceneKit/ModelIO.h>
...
@property (nonatomic) SCNNode *objectNode;
...
NSString* path = [[NSBundle mainBundle]
pathForResource:[NSString stringWithFormat:@"name of the obj.file"]
ofType:@"obj"];
NSURL *url = [NSURL fileURLWithPath:path];
MDLAsset *asset = [[MDLAsset alloc]initWithURL:url];
// Create the Block
self.objectNode = [SCNNode nodeWithMDLObject:[asset objectAtIndex:0]];
[self addChildNode: self.objectNode];
return self;
這回self
已被添加到您的視圖。
[self.view.scene.rootNode addChildNode:returnedObj];
的MDLAsset
加載的obj文件與相應的.mtl文件和PNG-文件。我使用這段代碼從MagicaVoxel加載對象(此時導出obj + mtl + png)。我還沒有深入。
我沒有試過這個代碼與外部加載或通過SCNMaterial
手動輸入顏色。所以沒有說明這是否有效。我沒有嘗試。
嘿,我試過這段代碼,但我只能看到白色屏幕。沒有3d模型。你能幫我嗎? –
嘿,我也遇到了這個問題。不知何故,他們改變了一些東西,使外部負載不再工作。我做了另一個正在工作的代碼(通過mainbundle +使用.obj和.mtl文件加載)。 我用我的新代碼更新了上面的帖子。我希望它有幫助。 –