Android OpenGL ES 开发教程 26 设置光照效果Set Lighting

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.youkuaiyun.com/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

上一篇简单介绍了OpenGL中使用的光照模型,本篇结合OpenGL ES API说明如何使用光照效果:

  • 设置光源
  • 定义法线
  • 设置物体材料光学属性

光源

OpenGL ES中可以最多同时使用八个光源,分别使用0到7表示。

OpenGL ES光源可以分为

  • 平行光源(Parallel light source), 代表由位于无限远处均匀发光体,太阳可以近似控制平行光源。
  • 点光源(Spot light source)  如灯泡就是一个点光源,发出的光可以指向360度,可以为点光源设置光衰减属性(attenuation)或者让点光源只能射向某个方向(如射灯)。
  • 可以为图形的不同部分设置不同的光源。

下面方法可以打开某个光源,使用光源首先要开光源的总开关:

gl.glEnable(GL10.GL_LIGHTING);


然后可以再打开某个光源如0号光源:

 

 

### 使用 OpenGL 绘制 3D 图形 在 Qt 下使用 OpenGL 进行三维图形绘制可以基于 `QOpenGLWidget` 类创建自定义窗口部件,以便集成到应用程序界面中[^1]。对于 Android 平台,则可以通过 `GLSurfaceView` 来承载 OpenGL ES 的渲染逻辑[^2]。 #### Python 中利用 Matplotlib 和 PyOpenGL 实现简单 3D 图表 虽然这里提到的是 Python 环境下的实现方式,但基本原理同样适用于其他支持 OpenGL API 的编程语言环境。下面给出一段完整的 Python 示例代码用于生成一个简单的 3D 表面图: ```python import numpy as np from matplotlib import pyplot as plt from mpl_toolkits.mplot3d import Axes3D def plot_3d_surface(): fig = plt.figure() # 创建网格数据集 X, Y = np.meshgrid(np.linspace(-5, 5, 100), np.linspace(-5, 5, 100)) Z = np.sin(np.sqrt(X ** 2 + Y ** 2)) ax = fig.add_subplot(111, projection='3d') surf = ax.plot_surface(X, Y, Z) ax.set_xlabel('X Label') ax.set_ylabel('Y Label') ax.set_zlabel('Z Label') plt.show() if __name__ == '__main__': plot_3d_surface() ``` 这段程序展示了如何构建并显示一个正弦波形成的曲面图像。它首先导入必要的库文件,接着定义了一个名为 `plot_3d_surface()` 函数来完成实际的数据准备与绘图任务。最后通过调用这个函数启动可视化窗口[^4]。 #### 关键概念介绍 - **顶点着色器(Vertex Shader)**:处理输入几何体的位置和其他属性。 - **片段着色器(Fragment Shader)**:决定屏幕上每个像素的颜色。 - **缓冲区对象(Buffer Object)**:存储大量相同类型的 GPU 数据(比如位置、颜色等),供着色器读取。 - **VAO (Vertex Array Objects)** :保存一组 VBOs 配置信息的对象,简化状态切换过程。 当涉及到更复杂场景时,通常还需要引入纹理映射(Texture Mapping),光照模型(Lighting Model)以及摄像机视角(Camera Viewport)等相关技术[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值