iOS - Scenekit3D引擎初探之 - 给材质贴图

今天简单说一下 SceneKit 给材质贴图。

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 [email protected]"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文件。

时间: 2024-08-14 07:15:14

iOS - Scenekit3D引擎初探之 - 给材质贴图的相关文章

iOS - Scenekit3D引擎初探之 - 导入模型+上传服务器+下载并简单设置

SceneKit是ios8之后苹果推出了一个3D模型渲染框架. SceneKit现在可以支持有限的几种模型,截止到我写这篇文章为止似乎只有.dae和.abc后一种模型我没有使用过.这篇文章只针对.dae模型写. 首先如果是希望加载一个已有的,不需要程序在运行的时候动态添加的dae模型.那么我们可以直接新建一个game类型的工程.在选项中选择SceneKit,在程序中加载自带模型的那句话中将模型名称替换即可.本文主要讲一下如何导出dae模型,并在server端动态下载并显示. 首先我们手中有一个.

cocos2dx 3.2中的物理引擎初探(一)

cocos2dx在设计之初就集成了两套物理引擎,它们是box2d和chipmunk.我目前使用的是最新版的cocos2dx 3.2.引擎中默认使用的是chipmunk,如果想要改使用box2d的话,需要修改对应的android工程或者是ios工程的配置文件. 在2.x版本的cocos中,使用物理引擎的步骤十分繁琐.但在3.x版本中变得非常方便了.我这次的学习目标是制作一个打砖块的小游戏. 首先,现在的Scene类提供了一个静态工厂方法,用以创造一个集成物理引擎的场景. Scene::initWi

famo.us 一个JavaScript游戏引擎初探

好久之前就看到了famo.us的优良特性,尤其是它避开浏览器弊病的跳跃思维,再加上自己使用JQM来开发Web App时的页面切换的白屏bug,又比对了sencha touch,最后还是决定将famo.us作为开发框架,它是基于浏览器的,目标就是使页面呈现性能最大化,而我不会拿它来做游戏,只是做简单的WebApp,要的就是这个界面显示性能. 但悲剧的是国内没有关于famo.us的教程,近些日子Google被天朝打压的挺惨,幸运的是famo.us官网还是可以访问的,所以以下的学习结果都来自官网htt

IOS 物理引擎

来自IOS7 by tutorials   下面是个人的一点翻译总结 1,首先在初始化方法李画一个方块 UIView* square = [[UIView alloc] initWithFrame: CGRectMake(100, 100, 100, 100)]; square.backgroundColor = [UIColor grayColor]; [self.view addSubview:square]; 2,声明两个变量. UIDynamicAnimator* _animator;

ios 3D引擎 SceneKit 开发(5) --关于旋转的几点问题(2)

如果还没看前一篇,可以移驾看看:ios 3D引擎 SceneKit 开发(4) –关于旋转的几点问题(1) 上一篇我们用CABasicAnimation 来模拟了太阳-地球-月球的天体运动.其中月球绕太阳运动和月球绕地球运动都可以看做一个点绕另一个点作圆周运动.(当然现实中是椭圆运动,有远地点,近地点,这里我们看作圆周运动) 一个点绕另一个点作圆周运动,是不是很熟悉.对,就是我们之前学习的数学知识,这里完全可以用数学知识做. 相关数学知识点: 任意点a(x,y),绕一个坐标点b(rx0,ry0)

【iOS】在页面中展示gif动图

1 - (void)viewDidLoad 2 { 3 [super viewDidLoad]; 4 // Do any additional setup after loading the view. 5 6 //1:使用第三方库 7 NSData *data = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"moe" ofType:@"gif"]]; 8 GifVi

ios SceneKit 3D引擎初探

最近到处搜集资料研究3D最后还是决定锁定OC框架,找到的学习资料随后慢慢整理 SceneKit 是一个OC 框架,开始之前,先熟悉一下SceneKit 的三维坐标系: 很清楚的看到,SceneKit 中的坐标系是右手坐标系(笛卡尔坐标系),如果需要与其他3D框架共享数据,先了解其框架是右手坐标系还是左手坐标系.其实也很好转化,就是Z 轴的正负不一样而已. 在开始开发之前,一定要了解下面这几个非常重要的类 类 / 协议 描述 SCNView &SCNSceneRenderer 类似UIView,用

探索推荐引擎内部的秘密,第 1 部分: 推荐引擎初探

"探索推荐引擎内部的秘密"系列将带领读者从浅入深的学习探索推荐引擎的机制,实现方法,其中还涉及一些基本的优化方法,例如聚类和分类的应用.同时在理论讲解的基础上,还会结合 Apache Mahout 介绍如何在大规模数据上实现各种推荐策略,进行策略优化,构建高效的推荐引擎的方法.本文作为这个系列的第一篇文章,将深入介绍推荐引擎的工作原理,和其中涉及的各种推荐机制,以及它们各自的优缺点和适用场景,帮助用户清楚的了解和快速构建适合自己的推荐引擎. 信息发现 如今已经进入了一个数据爆炸的时代,

drools规则引擎初探

1.drools是什么 Drools是为Java量身定制的基于Charles  Forgy的RETE算法的规则引擎的实现.具有了OO接口的RETE,使得商业规则有了更自然的表达. Rule是什么呢? 一条规则是对商业知识的编码.一条规则有 attributes ,一个 Left Hand Side ( LHS )和一个 Right Hand Side ( RHS ).Drools 允许下列几种 attributes : salience , agenda-group , no-loop , au