OpenGL ES之旅(四)-- OpenGL ES 光照计算

OpenGL ES之旅(四)-- OpenGL ES 光照计算,第1张

物体的材质属性取决于物体反射的红绿蓝光的比例。与光源的特性相似,材质也分为泛射材质,漫反射材质,镜面材质和反射材质,分别表示反射相应类型光的反射率。

前面提到,光照效果是由发射光,环境光,漫反射光以及镜面高光四部分组成,这四部分各自独立计算,然后再累加起来得到最终的光照效果。下面就来详细介绍这些组成部分是如何计算的。

环境光的GLSL实现:

结论:有效的光照方向是与物体表面法线夹角在0~90度之间的。

慢反射光的GLSL实现:

镜面光计算公式:

镜面光的GLSL实现:

即为:

注意: 距离衰减常量,线性衰减常量和二次衰减常量均为常量值。环境光,漫反射光和镜面光的强度都会受距离的增大而衰减,只有发射光和全局环境光的强度不会受影响。

系列文章:

我们知道一个类(class)要被使用必须经过装载,连接,初始化这样的过程。下面先对这三阶段做一个简单的描述,之后会结合一个简单的例子来说明java中类的初始化过程。

在装载阶段,类装载器(Bootstrap ClassLoader 或者用户自定义的ClassLoader) 把编译形成的class文件载入内存,创建类相关的Class对象,这个Class对象封装了我们要使用的类的类型信息。

连接阶段又可以分为三个子步骤:验证、准备和解析。

验证就是要确保java类型数据格式 的正确性,并适于JVM使用。

准备阶段,JVM为静态变量分配内存空间,并设置默认值,注意,这里是设置默认值,比如说int型的变量会被赋予默认值0 。在这个阶段,JVM可能还会为一些数据结构分配内存,目的 是提高运行程序的性能,比如说方法表。

解析过程就是在类型的常量池中寻找类、接口、字段和方法的符号引用,把这些符号引用替换成直接引用。这个阶段可以被推迟到初始化之后,当程序运行的过程中真正使用某个符号引用的时候 再去解析它。

类会在首次被“主动使用”时执行初始化,为类(静态)变量赋予正确的初始值。在Java代码中,一个正确的初始值是通过类变量初始化语句或者静态初始化块给出的。而我们这里所说的主动使用 包括:

1 创建类的实例

2 调用类的静态方法

3 使用类的非常量静态字段

4 调用Java API中的某些反射方法

5 初始化某个类的子类

6 含有main()方法的类启动时

初始化一个类包括两个步骤:

1、 如果类存在直接父类的话,且直接父类还没有被初始化,则先初始化其直接父类

2、 如果类存在一个初始化方法,就执行此方法

卡文迪许是用扭秤测出的。

扭秤的主要部分是这样一个T字形轻而结实的框架,把这个T形架倒挂在一根石英丝下。若在T形架的两端施加两个大小相等、方向相反的力,石英丝就会扭转一个角度。力越大,扭转的角度也越大。反过来,如果测出T形架转过的角度,也就可以测出T形架两端所受力的大小。现在在T形架的两端各固定一个小球,再在每个小球的附近各放一个大球,大小两个球间的距离是可以较容易测定的。根据万有引力定律,大球会对小球产生引力,T形架会随之扭转,只要测出其扭转的角度,就可以测出引力的大小。当然由于引力很小,这个扭转的角度会很小。怎样才能把这个角度测出来呢?卡文迪许在T形架上装了一面小镜子,用一束光射向镜子,经镜子反射后的光射向远处的刻度尺,当镜子与T形架一起发生一个很小的转动时,刻度尺上的光斑会发生较大的移动。这样,就起到一个化小为大的效果,通过测定光斑的移动,测定了T形架在放置大球前后扭转的角度,从而测定了此时大球对小球的引力。卡文迪许用此扭秤验证了牛顿万有引力定律,并测定出引力常量G的数值。这个数值与近代用更加科学的方法测定的数值是非常接近的。

以上就是关于OpenGL ES之旅(四)-- OpenGL ES 光照计算全部的内容,包括:OpenGL ES之旅(四)-- OpenGL ES 光照计算、java类中的静态常量是什么时候初始化的、求卡文迪许测量引力常量的方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9713388.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存