Ale*_*ger 4 colors object scenekit
我是新来的.我的第一个问题出现了.
我用SceneKit构建了一个对象加载器.我得到了路径,对象可用,但我不知道如何为显示的对象着色.
ScnScene *testScene = [SCNScene sceneWithURL:url options:nil error:NULL];
testScene.background.contents = [UIImage imageWithName:@"color.png"];
[self.mainView.scene.rootnode addChildNode:testScene.rootNode];
Run Code Online (Sandbox Code Playgroud)
这没用.我也尝试过:
SCNMaterialProperty *testColor = [SCNMaterialProperty materialPropertyWithContents [UIImage imageNamed:@"color.png"]];
testScene.rootnode.geometry.materials = testcolor;
Run Code Online (Sandbox Code Playgroud)
要么:
SCNMaterial *testColor = [SCNMaterial material];
testColor.diffuse.contesnts = [UIColor redColor];
testScene.rootnode.geometry.firstMaterial = testColor;
Run Code Online (Sandbox Code Playgroud)
什么都行不通.当我启动应用程序时,会显示每个对象.到目前为止,OBJ-Loader工作得非常好.但一切仍然是灰色的.我完全不知道如何为显示的对象着色.有没有人给我提示/想法/解决方案?
顺便说一句.我想避免我必须手动从OBJ信息构建几何.所以我试着通过SCNScene来解决这个问题.
主要问题是a的导入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>
Run Code Online (Sandbox Code Playgroud)
...
@property (nonatomic) SCNView* mainView;
Run Code Online (Sandbox Code Playgroud)
....
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];
Run Code Online (Sandbox Code Playgroud)
或者,您可以通过以下方式添加颜色:
material.diffuse.contents = [UIImage imageNamed:@"farbe.png"];
现在,您可以从外部导入任何obj.file(从您喜欢的任何选定文件夹中)并为其着色.
感谢SGlindemann,cashmash和Hal Mueller,他们帮助找到了解决方案.
更新(29.1.2017)
不知怎的,上面的方式不再起作用了.我还没弄清楚发生了什么变化.但我制作了另一个代码,可以加载3D文件(来自mainBundle,而不是外部).在这里,我从一个SCNNode被调用的类开始ViewController.m.该SCNScene是在设置ViewController.下面是我为该SCNNode课程编写的代码.
在开始之前,将.obj和.mtl文件(都具有相同名称)放入Xcode项目中.您无需将其转换为场景.
#import <ModelIO/ModelIO.h>
#import <SceneKit/ModelIO.h>
Run Code Online (Sandbox Code Playgroud)
...
@property (nonatomic) SCNNode *objectNode;
Run Code Online (Sandbox Code Playgroud)
...
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;
Run Code Online (Sandbox Code Playgroud)
返回的self内容必须添加到您的视图中.
[self.view.scene.rootNode addChildNode:returnedObj];
Run Code Online (Sandbox Code Playgroud)
该MDLAsset加载的obj文件与相应的.mtl文件和PNG-文件.我使用此代码从MagicaVoxel加载对象(这会立即导出obj + mtl + png).我还没有深入研究它.
我没有尝试使用外部加载此代码或手动输入颜色SCNMaterial.所以没有声明这是否有效.我没试过.
| 归档时间: |
|
| 查看次数: |
5446 次 |
| 最近记录: |