12光照
光照在3D世界中非常重要,在不设置光照的情况下很多模型都无法体现它的真正体积。在OpenGLDemo样例中,当立方体旋转时我们可以看到立方体不同面的明暗效果,这就是光照的作用。
要在OpenGL中使用光照,首先要启用光照支持。启用光照支持同样是通过调用glEnable实现,在参数中需要传入GL10.GL_LIGHTING常量,表示所要启动的是光照效果。OpenGLDemo样例中光照效果是在CubeRenderer的contextCreated方法中启用的,代码如下:
gl.glEnable(GL10.GL_LIGHTING);
启用光照支持后需要指定光源,OpenGL缺省提供8个光源,由GL10.LIGHT0,GL10.LIGHT1,…,GL10.LIGHT7这8个常理代表。需要指定光源的时候通过调用glEnable实现,在参数下传入GL10.LIGHT0,GL10.LIGHT1,…,或者是GL10.LIGHT7中的一个。OpenGLDemo样例在CubeRenderer的contextCreated方法中通过以下代码启用了光源GL_LIGHT0。
gl.glEnable(GL10.GL_LIGHT0);
OpenGLDemo样例在启用了光源GL_LIGHT0以后直接使用它的缺省设置,没有对光源的位置,方向,类型进行设置。但实现编程中缺省设置的光源往往不能满足需求,开发人员需要修改光源的属性。光源属性的修改通过方法glLightfv实现,该方法接受三个参数。第一个参数是需要修改的光源,参数可以是LIGHT0到LIGHT7中的任一个值。第二个参数是需要修改的属性名,光源不同属性的名称在GL10中以不同的常量表示,如GL10.GL_POSITION表示需要修改光源的位置属性。第三个参数是属性值,针对不同的属性名,该参数的具体作用不同,但是不管修改什么属性,第三个参数都是接受一个浮点数组。开发人员需要根据自己指定的属性名确定该浮点数组的具体内容,如果指定的内容不符合对应属性的要求,系统会抛出异常。
光源的属性比较复杂,在简化样例中我们只增加最简单的属性,位置属性。就是我们对光源LIGHT0的位置进行修改。
如上所述,需要修改光源LIGHT0的位置的话需要调用glLightfv方法。第一个参数为LIGHT0,指定修改LIGHT0的属性。第二个参数为GL10.GL_POSITION,指定需要修改光源的位置。第三个参数为对应的浮点数组。
光源位置的浮点数组由四个成员构成,前面三个分别是光源的X,Y,Z坐标值,第四个为成员是齐次坐标中w的值,目前不考虑齐次坐标,可以直接将它设置成1.0。
如果我们希望在简化样例中将光源设置在模型的右上角位置的话,则对应的浮点数组为{x,y,-3.5,1}。其中Z值设置为-3.5是因为简化样例中我们通过glTranslatef(0,0,-3.5f)将模型中心设置在了Z轴的-3.5的位置上。浮点数组中的x和y多大取决于你希望将光源放多远,只要x和y相等,同时都大于0,则光源位置就在模型的正右上方。
修改之后的简化样例代码片段如下:
gl.glTranslatef(0, 0, -3.5f);
gl.glRotatef(_angle, 1.0f, 1.0f, 0.0f);
float[] _lightPosition = { 30f,30f,-3.5f,0 };
FloatBuffer bufferLight = ByteBuffer.allocateDirect(
_lightPosition.length * 4).asFloatBuffer();
bufferLight.put(_lightPosition);
bufferLight.rewind();
gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_POSITION, bufferLight);
运行结果如图18-13,其中左图是将光源设置在模型右上角的效果,右图是LIGHT0缺省位置的效果。
图18-13 简化样例,不同的光照效果
分享到:
相关推荐
1.解压BaiduInput_blackberry_v1.0.0.7.zip文件,用黑莓桌面管理器加载baiduinput.alx,在安装时务必把默认的四个选项都打上勾。 2.安装完毕后会在出现一个百度记事本和一个百度输入法图标。 3.百度记事本是用在第三...
Google Sync现在支持blackberry,iPhone、Windows Mobile手机,稍后会支持其他类型的手机,使用Google Sync后,系统会自动同步用户的Gmail联系人、Google Calendar时间到你的手机中,Sync使用Push技术,你在通讯录...
##Supported 平台本书中的示例代码可用于以下平台: 苹果手机(Microsoft Visual Studio) 使用 AMD OpenGL ES 2.0 Emulator 或 PowerVR Khronos OpenGL ES 2.0 SDK WebGL 安卓 2.2+ Linux 黑莓##iPhone ###...
在黑莓上使用的农历软件,适用所有型号。如:9000
MiniExcel,黑莓上使用的excel工具. MiniExcel,黑莓上使用的excel工具.
黑莓新注566个域名:98系列杂米近500个.docx
Blackberry黑莓PRIV使用说明书.pdf
•2009年4月1日在美国、加拿大和英国发布 •2009年7月31日扩展至另外10个国家 •法语、意大利语、德语和西班牙语的本地化支持 •2009年秋季扩展至拉美和亚太地区 •巴西西班牙语的本地化支持 •2010年4月发布...
opengl es 2.0 programming guide source code, including android blackberry iphone linux11 webgl windows
源码非常齐全,Android、iOS、BlackBerry、LinuxX11,Windows,WebGL全平台同步代码
黑莓BlackBerry主题制作使用教程 Just Theme It! - BlackBerry 主题制作指南
Learn BlackBerry Games Development Paperback: 504 pages Publisher: Apress; 1 edition (March 30, 2010) Language: English ISBN-10: 1430227184 ISBN-13: 978-1430227182 Format: PDF You can buy this book: ...
7290 bb blackberry黑莓7290 bb blackberry黑莓7290 bb blackberry黑莓7290 bb blackberry黑莓7290 bb blackberry黑莓7290 bb blackberry黑莓7290 bb blackberry黑莓7290 bb blackberry黑莓7290 bb blackberry黑莓...
MobileSSH,黑莓上使用的SSH客户端工具,在windows或者linux服务器上安装好SSH Server,然后就可以使用你的BB来远程控制它了,是不是很酷?
老黑莓OS经典软件合集大全,独家整理,适合黑莓blackberry 7XXX 8XXX 9XXX等黑莓老机型,格式为cod , alx,jad等格式;;怀旧经典,软件清单如下 Twitter70.zip WacaiBlackberry.zip [BerryCN.com_DZH_v5.18] XECurrency-...
如果要确保应用程序使用uses BlackBerry MDS Services 作为它的连接路径,需要在 URL 最后加上参数“deviceside=false”,这也是我们推荐的方式,如下: 例2: (HttpConnection)Connector.open(...
黑莓usb驱动是一款黑莓手机专用驱动,已经装了桌面管理器的电脑就不需要...驱动介绍相信大家在第一次使用黑莓手机连接电脑的时候都出现了没有反应的问题了,就是手机用数据线连接电脑的时候没有任何的反,欢迎下载体验
1.BlackBerry MDS Studio技术综述 [文档说明]BlackBerry ...[文档说明]黑莓BlackBerry考试认证指南 文档名:BlackBerry_Certification_Program_Guide.pdf 文档全部为E文版,如果不感冒的,请不要下载了,浪费分数。
黑莓有趣的GPS绘图软件,很有意思的哦!!!
BlackBerry for Work: Productivity for Professionals Paperback: 288 pages Publisher: Apress; 1 edition (March 10, 2010) Language: English ISBN-10: 1430226269 ISBN-13: 978-1430226260 Format: PDF You ...