接着上一章的例子,这章节来介绍一下三种灯光(平行光、点光源、聚光灯)的使用。 
引入头文件#import ''NVWorldLight.h'' 
1、创建平行光 
在onCreate里面实例话灯光对象,代码如下图 
 
代码:

    // 灯光、地面、粒子都属于世界对象,所以需要从NVWorld中创建 // 先确认场景中是否添加过了相同名字的灯光,因为要确保对象创建的唯一性 NVWorldLight *light = (NVWorldLight *)[[self getWorld] getObjectByName:@"dir_light"]; if (!light) { light = (NVWorldLight *)[[self getWorld] createObject:LIGHT objectName:@"dir_light"]; // 设置灯光类型 [light setType:DIRECTION]; // 设置灯光的坐标 [light setDirection:NVPosition(0, -1, 0)]; }

在onStart里附加灯光到场景中,代码如下图 
 
代码:

    NVWorldLight *light = (NVWorldLight *)[[self getWorld] getObjectByName:@"dir_light"]; // 将灯光添加到场景中 if (light) { [light attach:self]; }

在onStop里将灯光从场景中移除,代码如下图 
 
代码:

     NVWorldLight *light = (NVWorldLight *)[[self getWorld] getObjectByName:@"dir_light"]; // 将灯光从场景中去除 if (light) { [light dettach]; }

这样就完成了灯光的创建、附加和移除,运行项目,对比上一章没有加灯光的效果来看 
 
立方体的四面有明显的明暗效果,显得更加真实。

2、创建点光源 
创建方法和平行光类似,如下图,需要注意是点光源没有方向,所以不需要设置灯光方向(设置了也无效),还有就是点光源有位置。 
 
代码:

    // 灯光、地面、粒子都属于世界对象,所以需要从NVWorld中创建 // 先确认场景中是否添加过了相同名字的灯光,因为要确保对象创建的唯一性 NVWorldLight *light = (NVWorldLight *)[[self getWorld] getObjectByName:@"point_light"]; if (!light) { light = (NVWorldLight *)[[self getWorld] createObject:LIGHT objectName:@"point_light"]; // 设置灯光类型 [light setType:POINT]; // 设置灯光的坐标 [light setPosition:NVPosition(2.0, 2.0, 2.0)]; // 设置灯光是否具有衰减性 [light enableAttenuation:YES]; }

灯光的附加和删除和平行光的写法一样,只要找到对应的灯光对象名即可,这里就不贴代码了。 

运行项目,由于灯光的位置是在立方体的右上方,所以可以看立方体右上明,其余地方比较暗。

2、创建聚光灯 
创建方法和点光源一样,但是聚光灯有方向也有位置,如图: 
 
代码:

    // 灯光、地面、粒子都属于世界对象,所以需要从NVWorld中创建 // 先确认场景中是否添加过了相同名字的灯光,因为要确保对象创建的唯一性 NVWorldLight *light = (NVWorldLight *)[[self getWorld] getObjectByName:@"spot_light"]; if (!light) { light = (NVWorldLight *)[[self getWorld] createObject:LIGHT objectName:@"spot_light"]; // 设置灯光类型 [light setType:SPOT]; // 设置灯光方向 [light setDirection:NVPosition(-1, -1, -1)]; // 设置灯光的坐标 [light setPosition:NVPosition(1.0, 1.0, 1.0)]; // 设置灯光是否具有衰减性 [light enableAttenuation:YES]; }

灯光的附加和删除也一样。 
 
运行项目,由于灯光的位置是在立方体的右前上方,灯光的方向斜对着物体,所以可以看立方体右前上的一角很亮,其余是暗的,效果如图:

通过本章节,大家应该已经掌握了灯光的加载,在下一章节,我会介绍如何点与场景中的物体进行交互。

转载于:https://blog.51cto.com/13683331/2093641

NVisionXR_iOS教程五 —— 添加灯光渲染相关推荐

  1. 3dmax:3dmax三维VR渲染设置之高级灯光渲染(经典案例—VR灯光渲染房间天光效果)图文教程

    3dmax:3dmax三维VR渲染设置之高级灯光渲染(经典案例-VR灯光渲染房间天光效果)图文教程 目录 VR灯光渲染房间天光效果 VR灯光渲染房间天光效果

  2. Blender全新开源动画短片官方灯光渲染教程,文末附高清参数截图+专家级灯光渲染建议

    看了么?看了么!Blender Studio官方上周发布了2021年全新开源动画短片<Sprite Fright(精灵惊魂记)>. 今年的影片用Blender 3.0制作(Blender ...

  3. 3dmax:3dmax三维VR渲染设置之高级灯光渲染(标准灯光分类及简介—目标聚光灯、泛光灯、台灯+射灯+壁灯+筒灯+电视灯+平行光,灯带+天光灯)图文教程之详细攻略

    3dmax:3dmax三维VR渲染设置之高级灯光渲染(标准灯光分类及简介-目标聚光灯.泛光灯.台灯+射灯+壁灯+筒灯+电视灯+平行光,灯带+天光灯)图文教程之详细攻略 目录 3dmax三维VR渲染设置 ...

  4. 3dmax:3dmax三维VR渲染设置之高级灯光渲染(经典案例—利用自由聚光灯制作筒灯效果效果)图文教程

    3dmax:3dmax三维VR渲染设置之高级灯光渲染(经典案例-利用自由聚光灯制作筒灯效果效果)图文教程 目录 利用自由聚光灯制作筒灯效果 利用自由聚光灯制作筒灯效果

  5. 3dmax:3dmax三维VR渲染设置之高级灯光渲染(经典案例—利用目标灯光制作光域网筒灯效果)图文教程

    3dmax:3dmax三维VR渲染设置之高级灯光渲染(经典案例-利用目标灯光制作光域网筒灯效果)图文教程 目录 利用目标灯光制作光域网筒灯效果 利用目标灯光制作光域网筒灯效果

  6. 3dmax:3dmax三维VR渲染设置之高级灯光渲染(常规参数设置—灯光类型、阴影贴图、区域阴影、强度颜色衰减、衰退、远距衰减、聚光灯参数、大气和效果mental ray间接照明)图文教程之详细攻略

    3dmax:3dmax三维VR渲染设置之高级灯光渲染(常规参数设置-灯光类型.阴影贴图.区域阴影.强度颜色衰减.衰退.远距衰减.聚光灯参数.大气和效果mental ray间接照明)图文教程之详细攻略 ...

  7. 3dmax:3dmax三维VR渲染设置之高级灯光渲染(自然光照明+人工光照明+灯光属性讲解、灯光渲染参数解释、不布光顺序)图文教程之详细攻略

    3dmax:3dmax三维VR渲染设置之高级灯光渲染(自然光照明+人工光照明+灯光属性讲解.灯光渲染参数解释.不布光顺序)图文教程之详细攻略 目录 3dmax三维VR渲染设置之高级灯光渲染(打光顺序. ...

  8. 3dmax:3dmax三维VR渲染设置之高级灯光渲染(经典案例—VR灯光制作直行灯槽效果)图文教程

    3dmax:3dmax三维VR渲染设置之高级灯光渲染(经典案例-VR灯光制作直行灯槽效果)图文教程 目录 VR灯光制作直行灯槽效果 VR灯光制作直行灯槽效果

  9. 3dmax:3dmax三维VR渲染设置之高级灯光渲染(经典案例—自由光灯光点光源制作吊灯效果)图文教程

    3dmax:3dmax三维VR渲染设置之高级灯光渲染(经典案例-自由光灯光点光源制作吊灯效果)图文教程 目录 自由光灯光点光源制作吊灯效果 自由光灯光点光源制作吊灯效果

最新文章

  1. 第6章:可维护性软件构建方法 6.2可维护性设计模式
  2. 调试内存_C/C++程序调试和内存检测
  3. Sql Server 2005 存储过程分页
  4. 编程入门python语言是多大孩子学的-Python 适合初学编程的人学吗?
  5. Flex embed XML and Icon
  6. des加密解密JAVA与.NET互通实例
  7. Remoting实例(同为客户端服务端)
  8. 分类器是如何做检测的?——CascadeClassifier中的detectMultiScale函数解读
  9. 数据结构——堆栈的C++实现
  10. WAM计算机术语,最新的计算机一级考试MSOffice模拟试题及答案
  11. [转载]Programming MS Office 2000 Web Components第二章第三节
  12. UIAlertController中TextField的用法
  13. AlphaGo Zero:从头开始学习
  14. FlashFXP使用阿里云ECS私钥登录
  15. 蓝桥杯单片机第九届 省赛 彩灯控制器
  16. ai面试的优缺点_面试官:因为这一步,我淘汰了90%的应届生
  17. C语言不使用中间变量交换两个变量的数据
  18. 斐波那契(黄金分割法)查找算法
  19. quicktime for java,QuickTime是什么意思
  20. 面包屑导航 java_jquery 面包屑导航 具体实现

热门文章

  1. [转]没有找到 MFC42D.DLL,因此这个应用程序未能启动。重新安装应用程序可能会修复此问题。解决方法!...
  2. 使用Spring Session和Redis解决分布式Session跨域共享问题
  3. 入门篇:函数计算中角色和访问策略的讲解
  4. Kickstart+HTTP+DHCP+TFTP全自动批量安装部署Linux系统
  5. 自己在总结前人经验下弄的几个opencv封装函数
  6. HDU1693 Eat The Trees(插头dp)
  7. 对于android和iphone计划
  8. float最大_Hard 级:二叉树中的最大路径和
  9. Android: android 如何预置APK
  10. Android FrameWork——PackageManager框架