Cocos 3D功能初探学习笔记(3)---光照

个人原创,欢迎转载,转载请注明地址,专栏地址http://blog.csdn.net/bill_man

3D游戏中光照对于游戏效果占有举足轻重的作用,也是与2D游戏的重要区别。cocos引擎也提供了完善的光效效果支持。

光照就是光源照到物体上的效果,cocos引擎支持四种光源,继承自Node类,也就是说可以作为子节点防止到场景里,四种光源的基类是BaseLight,它是所有灯光的基类,cocos2d-x支持4种灯光,环境光、方向光、点光源和聚光灯。每个灯光都有一个灯光标记lightflag, 只有当物体的灯光掩码lightmask与(1<<lightFlag)做与运算不为0的时候这个物体才会被该灯光照亮。

环境光(AmbientLight)是不来自任何特定方向的光,在整个场景中经典光照模型把它当作一个常量,组成一个合适的第一近似值来缩放场景中的光照部分。计算这个光照并不涉及任何关于光源方向或者眼睛观察场景的方向,它也可以当成积累每个光源的基础贡献值或者当成预先计算的单一全局效果。

使用方法

_ambientLight = AmbientLight::create(Color3B(200, 200, 200));

_ambientLight->retain();

_ambientLight->setEnabled(true);

addChild(_ambientLight);

_ambientLight->setCameraMask(2);

参数就是光的颜色,作为子节点加入到场景中就可以了

方向光(DirectionLight)是一个无限远的光源,他可以与我们表面上所有的点近似有相同的方向。这样的假设简化了数学运算,因此方向光的实现代码很简单,比其他光源的运行速度更快,方向光的典型例子是太阳光。

使用方法

_directionalLight = DirectionLight::create(Vec3(-1.0f, -1.0f, 0.0f), Color3B(200, 200, 200));

_directionalLight->retain();

_directionalLight->setEnabled(false);

addChild(_directionalLight);

_directionalLight->setCameraMask(2);

第一个参数是方向,方向光的方向就是灯光的局部坐标系的-z方向,第二个参数是颜色。

点光源(PointLight)是模拟靠近场景或者在场景中的光源,就像电灯或者路灯。点光源和方向光有两个区别,一是点光源表面的光源方向都是不同的,二是表面接收的光源会随着离光源的距离越远而变少。

使用方法

_pointLight = PointLight::create(Vec3(0.0f, 0.0f, 0.0f), Color3B(200, 200, 200), 10000.0f);

_pointLight->retain();

_pointLight->setEnabled(false);

addChild(_pointLight);

_pointLight->setCameraMask(2);

第一个参数是光源位置,第二个是颜色

聚光灯(SpotLight)是一个强大的光束来照亮一个明确的区域,照射区域可以进一步通过在光源的侧面使用挡板或者窗板的形状来设置。

使用方法

_spotLight = SpotLight::create(Vec3(-1.0f, -1.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Color3B(200, 200, 200), 0.0, 0.5, 10000.0f);

_spotLight->retain();

_spotLight->setEnabled(false);

addChild(_spotLight);

_spotLight->setCameraMask(2);

参数分别是方向、位置、颜色、内径,外径和衰减范围

需要说明的是sprite3D有一个setLightMask方法,用于设置哪个光照对它起作用,-1是所有光照都对它起作用(默认值),剩下的值就可以根据光源设置的setLightFlag的值来选择特定的光源(LIGHT0-LIGHT15)

能力不足,水平有限,如有错误,欢迎指出。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-24 05:50:37

Cocos 3D功能初探学习笔记(3)---光照的相关文章

Cocos 3D功能初探学习笔记(2)---3D精灵

个人原创,欢迎转载,转载请注明地址,专栏地址http://blog.csdn.net/bill_man 在2D阶段,最常用的绘制单元毫无疑问是精灵,通过精灵,我们可以将图片绘制到屏幕上:3d阶段,我们需要绘制在屏幕上的变成了美术人员通过3dmax等工具做出来的3d模型,绘制3D精灵是cocos最早的一批功能之一,也是比较重要的功能之一,本节我们就来学习3D精灵的绘制. 3D精灵支持的格式包括obj,c3t,c3b,不同点如下 obj:是3dmax导出的文件格式,但是不支持模型动画的导出. c3t

3D MAX界面学习 笔记(一)

3D MAX学习 l  视图区 n  通过在视图上右击,来进行视图的切换 n  师徒的快捷键: 顶 T, 前 F, 左 L,透视图 P, 摄像机 C n  试图控制区 n  选中试图,用Alt + w 将试图扩展到整个窗口,用G 来控制栅格的显示 l  视图区的8个工具按钮 l l  帧区域:进行动画的制作 l  帧上的右边有;X Y Z 坐标来进行,所选择的物体的设置 l  缩放 n  滚动鼠标滑轮进行看上去的缩放 n  缩放区域:变化某一个地方,框选,然后右键点击进行恢复 l  试探性工作:

2.传感器学习笔记之光照传感器

这节课我们来学习安卓中的光照传感器,已经会的请绕过此篇. 安卓系统有个自动调整屏幕亮度的功能. 它会检测手机周围环境的光照强度, 然后对手机屏幕的亮度进行相应地调整, 以此保证不管是在强光还是弱光下,手机屏幕都能够看得清. 说的太多理论有点虚,这里直接实战实用光照传感器做个项目. 本课目标: 编写一个简易的光照探测器程序,使手机可以检测到周围环境的光照强度变化. 效果图: 说明: 灯光照到上面数值会发生改变. 友情提示: 模拟器无法感知光照强度,因此建议在真实手机上运行. 1.首先我们新建一个安

unity初探学习笔记-hello unity

unity3d是目前使用最广泛的3d游戏引擎之一,本系列教程将使用unity制作一款坦克大战游戏,从而带大家体验一下unity的使用. 这一篇教程主要介绍引擎的安装和环境的搭建,最后,我们会在手机上运行起来unity的第一个程序. 首先在unity的官方网站上下载unity的最新引擎,目前最新的版本是5.3.4,下载地址:http://unity3d.com/cn/get-unity/download?ref=personal 下载后一步步的按照提示安装即可,运行起unity,效果如下: 在这里

5.27:cocos2d-x初探学习笔记(2)--重要概念及Test样例结构(转)

1.几个重要概念 在cocos2d引擎中,有几个概念,各自是导演.场景,布景和人物角色. 导演(CCDirector):在cocos2d-x引擎中,导演类是游戏的组织者和领导者.导演制定规则让游戏内的场景.布景,和人物角色有序的执行 摄像机(CCCamera):每一个节点都须要使用摄像机,当节点发生缩放,旋转.和位置变化时,都须要覆盖摄像机,让这个节点通过摄像机又一次渲染. 场景(CCScene):在游戏里,场景就是关卡.关卡有人物和背景构成. 布景(CCLayer):从概念上说.布景就是场景里

HTML5拖放事件-上传图片预览功能(学习笔记)

主要用到的知识点有dataTransfer对象和FileReader(读取文件信息) 1.创建简单的HTML标签: <body> <div id="box">请将图片拖拽至此</div> <ul></ul> </body> 2.给标签加上简单的样式: <style type="text/css"> div{ width: 300px; height: 300px; margin:10

STM32学习笔记6(TIM通用模块生成PWM)

1.     TIMER输出PWM基本概念   脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术.简单一点,就是对脉冲宽度的控制.一般用来控制步进电机的速度等等. STM32的定时器除了TIM6和TIM7之外,其他的定时器都可以用来产生PWM输出,其中高级定时器TIM1和TIM8可以同时产生7路的PWM输出,而通用定时器也能同时产生4路的PWM输出. 1.1   PWM输出模式 S

APUE 学习笔记(一) Unix基础知识

1. Unix 体系结构 内核的接口被称为系统调用 公用函数库构建在系统调用接口之上 应用软件既可以调用公用函数库,也可以直接进行系统调用 2. 文件和目录 目录操作函数:opendir---> readdir---> closedir struct dirent 结构体 stat 系统调用 3.程序.进程.线程 程序:存放在磁盘上.并处于某个目录中的一个可执行文件.使用exec系列函数将程序从磁盘读入存储器,并使其执行 进程:程序的执行实体.进程控制的3个函数:fork.exec.waitp

IOS学习笔记 -- 网络编程

一.HTTP协议1.面试题: 聊一下HTTP协议(表达对HTTP协议的看法)* HTTP协议的全称: 超文本传输协议, 定制传输数据的规范(客户端和服务器之间的数据传输规范)* 描述HTTP协议完整的通信过程 2.通信过程1> 请求* 客户端 --> 服务器* 请求的内容a."请求行" : 请求方法\请求资源路径\HTTP协议版本GET /MJServer/login?username=123&pwd=123&method=get&type=JSON