ios 3D引擎 SceneKit 开发(2) --贴图篇

1,最简单的一种方法,直接打开dae 或者 scn 文件直接设置

如上图,这个dae 文件中只有一个几何体,几何体中只有一个材质球,然后设置材质球的diffuse 属性就可以了。

2,代码设置,还是针对这个最简单的dae 文件

ceilNode.geometry.firstMaterial.diffuse.contents= [UIColor redColor];  //可以设置颜色

ceilNode.geometry.firstMaterial.diffuse.contents= @"20151026N222-ZW-DMAX_MS_400-280-390_N_MUV-0_LYX.jpg";  //可以设置图片(名字)

ceilNode.geometry.firstMaterial.diffuse.contents=  [UIImage imageNamed:@"20151026N222-ZW-DMAX_MS_400-280-390_N_MUV-0_LYX.jpg"];  //可以设置图片

两个运行效果一样:

上面是最简单的情况,只有一个材质球,我们也可以设置多个材质球,比如说长方体的六个面,每个面的图案都不一样,那我们我们使用多个材质球来实现此效果

SCNMaterial *allMaterial = [SCNMaterial new];

allMaterial.diffuse.contents= @"allwall.png";

SCNMaterial *smallMaterial1 = [SCNMaterial new];

smallMaterial1.diffuse.contents=@"bottomWall.png";

rightwall.geometry.materials= @[smallMaterial1,allMaterial,[smallMaterial1 copy],allMaterial,allMaterial,allMaterial];


注意长方体每个面的位置:@[front,right,back,left,top,bottom];

自己的Demo 中我创建了一面墙,但也发现了一个问题,如下图:

很明显,两个的窗户不一致,在现实中是不合理的,所以我们需要对贴图做变换。

我们调整back 这个材质球的贴图:

NSArray *allMaterial = rightwall.geometry.materials;

SCNMaterial *smallMaterial2= allMaterial[1];

smallMaterial2.diffuse.contentsTransform= SCNMatrix4MakeScale(-1,1,1);  //就是这句,调整一下贴图的方向

smallMaterial2.diffuse.wrapT= SCNWrapModeRepeat;smallMaterial2.diffuse.wrapS= SCNWrapModeRepeat;


SCNMaterial 还有好多属性,大家可自行去看官方文档。

OK,简单的贴图就简单说到这了。

但实际情况是,我们经常会用到复杂的模型,里面好多个几何体,一个几何体又含有很多个材质球,这样就会有很多张贴图,如果采用上面的方法,自己去贴图,会很麻烦。

其实建模人员已经帮你贴好图了。下面一篇就会讲到如何让建模人员给你导出适合SceneKit 使用的DAE文件。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一:什么是协同程序? 在主线程运行的同时开启另一段逻辑处理,来协助当前程序的执行,协程很像多线程,但是不是多...
    骑士誓言阅读 3,177评论 0 0
  • #鬼迷心窍#人都在顺从,你在反叛,你是冒险家,带着风囊,把我从狭小的自我世界吹出来,不知风囊里的风还剩多少,不知我...
    黑超假面人阅读 2,962评论 0 0
  • 《越狱》里斯科菲尔德有这样一句台词:唯一让我恐惧的,只有恐惧本身。 恐惧是肉体的本能,是生物演化的结果,恐惧让我们...
    唐公子1阅读 3,564评论 0 0
  • 其实最近看的基本人资书内容都是大同小异的,都是分章节的主要讲了人力资源管理的职责、人力资源规划、人才的招聘...
    心平气和海阔天空阅读 3,885评论 0 0

友情链接更多精彩内容