opengl es 2.0如何设置散射光源的方向?

adnroid 3D 系列之光效篇
<a data-traceid="question_detail_above_text_l&&
光效三要素
在 OpenGL ES中,光由三个元素组成,分别是环境元素(ambient component), 散射元素(diffuse component)和 高光元素(specular component)。我们使用颜色来设定光线元素,这看上去有些奇怪,但是由于它允许你同时指定各光线元素的颜色和相对强度,这个方法工作得很好。明亮的白色光定义为白色 ({1.0, 1.0, 1.0, 1.0}),而暗白色可能定义为灰色 ({0.3, 0.3, 0.3 1.0})。 你还可以通过改变红,绿,蓝元素的百分比来调整色偏。
下图说明了各要素产生的效果。
高光元素定义了光线直接照射并反射到观察者从而形成了物体上的“热点”或光泽。光点的大小取决于一些因素,但是如果你看到如上图黄球所示一个区域明显的光斑,那通常就是来自于一个或多个光源的高光部分。
散射元素定义了比较平均的定向光源,在物体面向光线的一面具有光泽。
环境光则没有明显的光源。其光线折射与许多物体,因此无法确定其来源。环境元素平均作用于场景中的所有物体的所有面。
你的光效中有越多的环境元素,那么就越不会产生引入注目的效果。所有光线的环境元素会融合在一起产生效果,意思是场景中的总环境光效是由所有启动光源的环境光组合在一起所决定的。如果你使用了不止一个光源,那么最好是只指定一个光源的环境元素,而设定其他所有光源的环境因素为黑 ({0.0, 0.0, 0.0, 1.0}),从而很容易地调整场景的环境光效。
下面演示了怎样指定一个很暗的白色光源:
float lightAmbient[] = new float[] { 0.2f, 0.3f, 0.6f, 1.0f };
//环境光gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_AMBIENT, lightAmbient, 0);
使用像这样的很低的环境元素值使场景看上去更引入注目,但同时也意味着物体没有面向光线的面或者有其他物体挡住的物体将在场景中看得不是很清楚。
在OpenGL ES中可以设定的第二个光线元素是 散射元素(diffuse component)。在现实世界里,散射光线是诸如穿透光纤或从一堵白墙反射的光线。散射光线是发散的,因而参数较柔和的光,一般不会像直射光一样产生光斑。如果你曾经观察过职业摄影家使用摄影室灯光,你可能会看到他们使用 或者反光伞。两者都会穿透像白布之类的轻型材料并反射与轻型有色材料从而使光线发散以产生令人愉悦的照片。在OpenGL ES中,散射元素作用类似,它使光线均匀地散布到物体之上。然而,不像环境光,由于它是定向光,只有面向光线的物体面才会反射散射光,而场景中的所有多面体都会被环境光照射。
下面的例子演示了设定场景中的第一个散射元素:
float lightDiffuse[] = new float[] { 0.2f, 0.3f, 0.6f, 1.0f };//漫反射光gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_DIFFUSE, lightDiffuse, 0);
还需要设定光效的另一个重要属性,即光源3D空间中的位置。这不会影响环境元素,但其他两个元素由于其本性,只有在OpenGL在知道了场景中物体与光的相对位置后才能计算。例如:
float[] lightPos = new float[] {0,0,3,1};
//光源位置gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_POSITION, lightPos, 0)
关于光效的设置还有很多,大家有兴趣可以自己研究,这里有篇不错的文章,大家可以看看
我们今天例子的效果:
实例代码:
public class CubeRenderer implements Renderer {
float box[] = new float[] {
-0.5f, -0.5f,
0.5f, -0.5f,
-0.5f, -0.5f, -0.5f,
0.5f, -0.5f,
0.5f, -0.5f, -0.5f,
0.5f, -0.5f,
-0.5f, -0.5f,
-0.5f, -0.5f, -0.5f,
0.5f, -0.5f,
0.5f, -0.5f, -0.5f,
0.5f, -0.5f,
0.5f, -0.5f,
0.5f, -0.5f,
0.5f, -0.5f,
-0.5f, -0.5f,
-0.5f, -0.5f, -0.5f,
0.5f, -0.5f,
0.5f, -0.5f, -0.5f,
float lightAmbient[] = new float[] { 0.2f, 0.3f, 0.6f, 1.0f };
float lightDiffuse[] = new float[] { 0.2f, 0.3f, 0.6f, 1.0f };//漫反射光
float[] lightPos = new float[] {0,0,3,1};
//光源位置
* 因为进行光照处理,你必须告知系统你定义的模型各个面的方向,以便系统计算光影情况,方向的描述是通过向量点来描述的
float norms[] = new float[] { //法向量数组,用于描述个顶点的方向,以此说明各个面的方向
1f, //方向为(0,0,0)至(0,0,1)即Z轴正方向
1f, 0f, 0f,
1f, 0f, 0f,
1f, 0f, 0f,
1f, 0f, 0f,
FloatBuffer cubeB
FloatBuffer normB
float xrot = 0.0f;
float yrot = 0.0f;
* 将float数组转换存储在字节缓冲数组
* @param arr
public FloatBuffer makeFloatBuffer(float[] arr) {
ByteBuffer bb = ByteBuffer.allocateDirect(arr.length * 4);//分配缓冲空间,一个float占4个字节
bb.order(ByteOrder.nativeOrder()); //设置字节顺序, 其中ByteOrder.nativeOrder()是获取本机字节顺序
FloatBuffer fb = bb.asFloatBuffer(); //转换为float型
fb.put(arr);
//添加数据
fb.position(0);
//设置数组的起始位置
public CubeRenderer() {
// TODO Auto-generated constructor stub
cubeBuff = makeFloatBuffer(box);//转换float数组
normBuff = makeFloatBuffer(norms);
protected void init(GL10 gl) {
gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);//设置清屏时背景的颜色,R,G,B,A
gl.glEnable(GL10.GL_LIGHTING); //启用光照
gl.glEnable(GL10.GL_LIGHT0);
//开启光源0,最多可以开启8个光源
//设置光照参数,也可以使用默认的,不设置
gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_AMBIENT, lightAmbient, 0);
gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_DIFFUSE, lightDiffuse, 0);
gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_POSITION, lightPos, 0);
gl.glNormalPointer(GL10.GL_FLOAT, 0, normBuff);
gl.glEnableClientState(GL10.GL_NORMAL_ARRAY);
gl.glEnable(GL10.GL_DEPTH_TEST); //启用深度缓存
gl.glEnable(GL10.GL_CULL_FACE);
//启用背面剪裁
gl.glClearDepthf(1.0f);
// 设置深度缓存值
gl.glDepthFunc(GL10.GL_LEQUAL);
// 设置深度缓存比较函数,GL_LEQUAL表示新的像素的深度缓存值小于等于当前像素的深度缓存值(通过gl.glClearDepthf(1.0f)设置)时通过深度测试
gl.glShadeModel(GL10.GL_SMOOTH);// 设置阴影模式GL_SMOOTH
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
// TODO Auto-generated method stub
public void onSurfaceChanged(GL10 gl, int w, int h) {
// TODO Auto-generated method stub
gl.glViewport(0, 0, w, h); //设置视窗
gl.glMatrixMode(GL10.GL_PROJECTION); // 设置投影矩阵
gl.glLoadIdentity();
//设置矩阵为单位矩阵,相当于重置矩阵
GLU.gluPerspective(gl, 45.0f, ((float) w) / h, 0.1f, 10f);//设置透视范围
public void onDrawFrame(GL10 gl) {
// TODO Auto-generated method stub
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);// 清除屏幕和深度缓存
gl.glMatrixMode(GL10.GL_MODELVIEW);
//切换至模型观察矩阵
gl.glLoadIdentity();// 重置当前的模型观察矩阵
GLU.gluLookAt(gl, 0, 0, 3, 0, 0, 0, 0, 1, 0);//设置视点和模型中心位置
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, cubeBuff);//设置顶点数据
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glRotatef(xrot, 1, 0, 0);
//绕着(0,0,0)与(1,0,0)即x轴旋转
gl.glRotatef(yrot, 0, 1, 0);
gl.glColor4f(1.0f, 0, 0, 1.0f);
//设置颜色,红色
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);
//绘制正方型FRONT面
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 4, 4);
gl.glColor4f(0, 1.0f, 0, 1.0f);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 8, 4);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 12, 4);
gl.glColor4f(0, 0, 1.0f, 1.0f);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 16, 4);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 20, 4);
xrot += 0.5f;
yrot += 0.5f;
比较上次代码,可以看出,为一个3D模型添加光效,并不需要改动很大。只需要在之前代码基础上添加上述代码即可~~
文章来源:http://blog.csdn.net/hmg25/article/details/6739699&>&OpenGL超级宝典.(第4版).pdf
OpenGL超级宝典.(第4版).pdf
上传大小:118.03MB
中文名: OpenGL超级宝典(第4版)
原名: OpenGL(R) SuperBible: Comprehensive Tutorial and Reference (4th Edition)
别名: OpenGL蓝宝书, OpenGL编程
作者: (美)Richard S. Wright
Benjamin Lipchak
Nicholas Haemel译者: 张琪
资源格式: PDF
版本: 扫描版
出版社: Posts&T Press书号: X发行时间: 2010年9月
地区: 大陆
语言: 简体中文
  本书是OpenGL及3d图形编程最好的入门指南,涵盖了使用最新版本的opengl进行编程所需要的主要知识。
  全书分3个部分,共22章,另有3个附录。第一部分包括第1章到第14章,介绍如何构建一个使用OpenGL的程序,如何设置3d渲染环境,以及如何创建基本对象和光线并对他们进行着色。然后,深入研究使用OpenGL和它的一些高级特性及不同的特殊效果。第二部分包括第15章到第18章,分别介绍了OpenGL中支持可编程硬件[特别是在OpenGL着色语言(glsl)中
]的新特性。第三部分是第19章到第22章,着重介绍OpenGL是如何支持和连接Windows、MAC OS X、Linux和掌上设备。附录部分给出了更多阅读建议、术语表和api参考介绍。
  本书适合希望精通OpenGL以便对他们的图形编程和3d图形知识进行扩展的程序员阅读,也可以帮助那些经验丰富的OpenGL程序员学习如何移植自己的应用程序。本书既可以作为学习OpenGL的教材,也可以作为随时查阅的参考手册。
  Richard S. Wright,Jr.,星彩石软件系统公司(Starstone Software Systems,Inc.)的创建者和总裁,使用OpenGL开发多媒体仿真软件。他开发过范围从游戏到科学应用程序、从数据库可视化工具到教育软件的OpenGL商业应用程序,他曾是OpenGL ARB的Real 3D代表。
  Benjamin Lipchak,管理着AMD的一个OpenGL ES驱动小组。他原来领导着Khronos生态技术小组,建立了OpenGL SDK并创建了OpenGL管线时事通信。
  Nicholas Haemel,AMD Graphics Products Group(图形产品开发小组)的一位开发者,也是本书第3版的技术审稿人; 参与了本书的GLX和OpenGLcES部分的写作.
第一部分 “旧约”——经典属性
第1章 3D图形和OpenGL的介绍
1.1 计算机图形的简单历史回顾
1.1.1 进入电子时代
1.1.2 走向3D
1.2 3D效果初探
1.2.1 透视(视角)
1.2.2 颜色和着色
1.2.3 光照和阴影
1.2.4 纹理贴图
1.2.6 混和和透明
1.2.7 抗锯齿
1.3 3D图形的常见用途
1.3.1 实时3D
1.3.2 非实时3D
1.3.3 着色器
1.4 3D编程的基本原则
1.4.1 立即模式和保持模式
1.4.2 坐标系统
1.4.3 投影:从3D到2D
第2章 使用OpenGL
2.1 什么是OpenGL
2.1.1 标准的演化
2.1.2 API战争
2.1.3 OpenGL的未来
2.2 OpenGL的工作原理
2.2.1 通用实现
2.2.2 硬件实现
2.2.3 管线
2.3 OpenGL是API而不是编程语言
2.3.1 标准函数库和头文件
2.3.2 头文件自定义
2.4 API特定细节
2.4.1 数据类型
2.4.2 函数名约定
2.5 平台独立性
2.5.1 使用GLUT
2.5.2 第一个程序
2.5.3 用OpenGL绘制形状
2.6 使用OpenGL和GLUT生成动画
2.7 OpenGL状态机
2.8 OpenGL错误
2.9 确认版本
2.10 使用glHint获取线索
2.11 使用扩展
2.11.1 检查扩展
2.11.2 这是谁的扩展
第3章 空间绘图:几何图元和缓冲区
3.1 在3D中绘制点
3.2 设置3D画布
3.3 3D空间中的点:顶点
3.4 绘制图形
3.4.1 画点
3.4.2 第一个例子
3.5 设置点的大小
3.6 在3D空间中画直线
3.6.1 线带和线环
3.6.2 用直线构成近似曲线
3.6.3 设置直线的宽度
3.6.4 直线点画
3.7 在3D空间中绘制三角形
3.7.1 三角形:第一种多边形
3.7.2 环绕
3.7.3 三角形带
3.7.4 三角形扇
3.8 创建实心物体
3.8.1 设置多边形的颜色
3.8.2 隐藏表面消除
3.8.3 剔除:隐藏表面,提高性能
3.8.4 多边形模式
3.9 其他图元
3.9.1 四条边的多边形:四边形
3.9.2 通用多边形
3.9.3 填充多边形,重新讨论点画
3.9.4 多边形的创建规则
3.9.5 细分和边界
3.10 其他缓冲区技巧
3.10.1 使用缓冲区目标
3.10.2 操纵深度缓冲区
3.10.3 用剪刀进行裁剪
3.10.4 使用模板缓冲区
3.10.5 创建模板图案
第4章 几何变换:管线
4.1 本章是不是枯燥的数学课
4.2 理解变换
4.2.1 视觉坐标
4.2.2 视图变换
4.2.3 模型变换
4.2.4 模型视图对偶性
4.2.5 投影变换
4.2.6 视口变换
4.3 矩阵:3D图形的数学基础
4.3.1 什么是矩阵
4.3.2 变换管线
4.3.3 模型视图矩阵
4.3.4 单位矩阵
4.3.5 矩阵堆栈
4.3.6 一个原子例子
4.4 使用投影
4.4.1 正投影
4.4.2 透视投影
4.4.3 一个远处缩小的例子
4.5 高级矩阵操作
4.5.1 加载矩阵
4.5.2 自己执行变换
4.5.3 变换的迭加
4.6 使用照相机和角色在OpenGL中移动
4.6.1 角色帧
4.6.2 欧拉角:“卢克!请使用帧”
4.6.3 照相机管理
4.6.4 综合应用
第5章 颜色、材料和光照:基础知识
5.1 什么是颜色
5.1.1 光的波动性
5.1.2 光的粒子性
5.1.3 人眼作为光子检测器
5.1.4 计算机作为光子检测器
5.2 PC颜色硬件
5.3 PC显示模式
5.3.1 屏幕分辨率
5.3.2 颜色深度
5.4 在OpenGL中使用颜色
5.4.1 颜色立方体
5.4.2 设置绘图颜色
5.4.3 着色
5.4.4 设置着色模型
5.5 现实世界的颜色
5.5.1 环境光
5.5.2 散射光
5.5.3 镜面光
5.5.4 综合考虑
5.6 现实世界的材料
5.6.1 材料属性
5.6.2 向材料添加光照
5.6.3 计算环境光效果
5.6.4 散射和镜面光效果
5.7 向场景添加光照
5.7.1 启用光照
5.7.2 设置宇宙背景发射光
5.7.3 设置材料属性
5.8 使用光源
5.8.1 哪种方式最合适
5.8.2 表面法线
5.8.3 指定法线
5.8.4 单位法线
5.8.5 寻找法线
5.8.6 设置光源
5.8.7 设置材料属性
5.8.8 指定多边形
5.9 光照效果
5.9.1 镜面亮点
5.9.2 镜面光
5.9.3 镜面反射
5.9.4 镜面指数
5.9.5 法线均衡
5.10 综合讨论
5.10.1 创建聚光灯
5.10.2 绘制聚光灯
5.11.1 什么是阴影
5.11.2 实现压平的代码
5.11.3 一个阴影例子
5.11.4 重新回顾球体世界
第6章 颜色和材料的更多细节
6.1.1 组合颜色
6.1.2 修改混合方程式
6.1.3 抗锯齿
6.1.4 多重采样
6.2 应用雾
6.2.1 雾方程式
6.2.2 雾坐标
6.3 累积缓冲区
6.4 其他颜色操作
6.4.1 颜色掩码
6.4.2 颜色逻辑操作
6.4.3 alpha测试
6.4.4 抖动
第7章 OpenGL中的图像
7.1.1 一个位图例子
7.1.2 设置光栅位置
7.2 像素包装
7.3 像素图
7.3.1 经过包装的像素格式
7.3.2 一个颜色更丰富的例子
7.3.3 移动像素
7.3.4 保存像素
7.4 像素的更多乐趣
7.4.1 像素缩放
7.4.2 像素转移
7.4.3 像素映射
7.5 图像“子集”和管线
7.5.1 颜色矩阵
7.5.2 颜色查找
7.5.3 代理
7.5.4 其他操作
7.5.5 卷积
7.5.6 最小最大值操作
第8章 纹理贴图:基础知识
8.1 加载纹理
8.1.1 使用颜色缓冲区
8.1.2 更新纹理
8.1.3 将纹理贴图到几何图形
8.1.4 纹理矩阵
8.2 一个简单的2D例子
8.3 纹理环境
8.4 纹理参数
8.4.1 基本过滤
8.4.2 纹理环绕
8.4.3 带纹理的卡通
8.4.4 Mip贴图
8.5 纹理对象
第9章 纹理贴图:高级知识
9.1 辅助颜色
9.2 各向异性过滤
9.3 纹理压缩
9.3.1 压缩纹理
9.3.2 加载压缩纹理
9.4 纹理坐标生成
9.4.1 物体线性贴图
9.4.2 视觉线性贴图
9.4.3 球体贴图
9.4.4 立方体贴图
9.5 多重纹理
9.5.1 多重纹理坐标
9.5.2 一个多重纹理例子
9.6 纹理组合器
9.7 点块纹理
9.7.1 使用点
9.7.2 纹理应用
9.7.3 点参数
第10章 曲线和表面
10.1 内部支持的表面
10.1.1 设置二次方程状态
10.1.2 绘制二次方程图形
10.1.3 用二次方程进行建模
10.2 Bézier曲线和表面
10.2.1 参数方程表示形式
10.2.2 求值器(evaluator)
10.3 NURBS
10.3.1 从Bézier到B样条
10.3.2 结点
10.3.3 创建NURBS表面
10.3.4 NURBS属性
10.3.5 定义表面
10.3.6 修剪
10.3.7 NURBS表面
10.4 分格化(tessellation)
10.4.1 分格器(tessellator)
10.4.2 分格器回调函数
10.4.3 指定顶点数据
10.4.4 综合应用
第11章 这就是管线:更快的几何图形渲染
11.1 显示列表
11.1.1 批处理
11.1.2 预批处理
11.1.3 使用显示列表的一些注意事项
11.1.4 转换到显示列表
11.2 顶点数组
11.2.1 加载几何图形
11.2.2 启用数组
11.2.3 数据在哪里
11.2.4 用数据绘图
11.2.5 索引顶点数组
11.3 顶点缓冲区对象
11.3.1 管理和使用缓冲区对象
11.3.2 回到Thunderbird
第12章 交互式图形
12.1.1 为图元命名
12.1.2 在选择模式下工作
12.1.3 选择缓冲区
12.1.4 挑选
12.1.5 层次式挑选
12.2.1 反馈缓冲区
12.2.2 反馈数据
12.2.3 用户定义标记
12.3 一个反馈例子
12.3.1 对物体加上标签以便反馈
12.3.2 步骤1:选择物体
12.3.3 步骤2:从物体获取反馈信息
第13章 遮挡查询:消除不必要的工作
13.1 遮挡查询之前的世界
13.3 对查询对象进行查询
13.4 最佳实践
第14章 深度纹理和阴影
14.1 作为光源
14.1.1 使场景正好占据整个窗口
14.1.2 去掉不必要的东西
14.2 一种新类型的纹理
14.3 首先绘制阴影
14.4 然后是光照
14.4.1 投影阴影贴图:“为什么”
14.4.2 投影阴影贴图:“怎么做”
14.4.3 阴影比较
14.5 只用两个就够了
14.6 关于多边形偏移
第二部分 “新约”——新的发展
第15章 可编程管线:这已不是旧式的OpenGL
15.1 旧的被淘汰
15.1.1 固定的顶点处理
15.1.2 固定的片断处理
15.2 新的占主导
15.2.1 可编程顶点着色器
15.2.2 固定功能胶水
15.2.3 可编程片断着色器
15.3 初窥OpenGL着色语言
15.4 管理高层着色器
15.4.1 着色器对象
15.4.2 程序对象
15.5.1 基本类型
15.5.2 结构
15.5.3 数组
15.5.4 限定符
15.5.5 内置的变量
15.6 表达式
15.6.1 操作符
15.6.2 数组访问
15.6.3 构造函数
15.6.4 成分选择
15.7 控制流
15.7.1 循环
15.7.2 if/else
15.7.3 discard
15.7.4 函数
第16章 顶点着色:自行转换、光照和Texgen
16.1 初次试验
16.2 散射光照
16.3 镜面光照
16.4 改善镜面光照
16.5 基于顶点的雾
16.6 基于顶点的点大小
16.7 自定义的顶点变换
16.8 顶点混合
第17章 片断着色器:增强像素处理的威力
17.1 颜色转换
17.1.1 灰度
17.1.2 调棕色
17.1.3 反色
17.1.4 热信号
17.1.5 基于片断的雾
17.2 图像处理
17.2.1 模糊
17.2.2 锐化
17.2.3 膨胀和侵蚀
17.2.4 边缘检测
17.3.1 散射光照
17.3.2 多重镜面光照
17.4 过程纹理贴图
17.4.1 棋盘纹理
17.4.2 沙滩球纹理
17.4.3 玩具球纹理
第18章 高级缓冲区
18.1 像素缓冲区对象
18.1.1 如何使用PBO
18.1.2 PBO的优点
18.1.3 实际使用PBO
18.1.4 可以使用PBO的命令
18.2 帧缓冲区对象
18.2.1 如何使用FBO
18.2.2 离屏渲染
18.2.3 渲染到纹理
18.2.4 多个渲染目标
18.3 浮点纹理
18.3.1 高动态范围
18.3.2 OpenEXR文件格式
18.3.3 调和映射(tone mapping)
18.4 更白、更亮
18.4.1 绘制场景
18.4.2 亮度渲染
18.4.3 借助于高斯模糊
18.4.4 把各部分相加
18.4.5 再次使用PBO
第三部分 “新约外传”——扩展应用
第19章 Wiggle:Windows上的OpenGL
19.1 Windows上的OpenGL实现
19.1.1 泛型OpenGL
19.1.2 可安装客户驱动程序
19.1.3 Mini客户驱动程序
19.1.4 Mini驱动程序
19.1.5 Vista上的OpenGL
19.1.6 扩展OpenGL
19.2 基本的窗口渲染
19.2.1 GDI设备环境
19.2.2 像素格式
19.2.3 OpenGL渲染环境
19.3 综合应用
19.3.1 创建窗口
19.3.2 使用OpenGL渲染环境
19.3.3 其他Windows消息
19.4 OpenGL和Windows字体
19.4.1 3D字体和文本
19.4.2 2D字体和文本
19.5 全屏渲染
19.5.1 创建一个无边框窗口
19.5.2 创建一个全屏窗口
19.6 多线程渲染
19.7 OpenGL和WGL扩展
19.7.1 简单扩展
19.7.2 使用新入口
19.7.3 自动魔法扩展
19.7.4 WGL扩展
第20章 Mac OS X上的OpenGL
20.1.1 创建一个GLUT项目
20.1.2 应用程序框架
20.1.3 Ditching Cocoa
20.2 使用Carbon的OpenGL
20.2.1 为OpenGL进行设置
20.2.2 设置像素格式
20.2.3 位图字体
20.3 使用Cocoa的OpenGL
20.3.1 创建一个Cocoa程序
20.3.2 综合运用
20.4 全屏渲染
20.4.1 显示管理
20.4.2 AGL全屏支持
第21章 Linux上的OpenGL
21.1 基础知识
21.2.1 安装Mesa
21.2.2 安装硬件驱动程序
21.2.3 其他安装细节
21.2.4 安装GLUT
21.2.5 生成OpenGL应用程序
21.4 GLX——处理X Window接口
21.4.1 显示和X
21.4.2 配置管理和画面
21.4.3 窗口和渲染表面
21.4.4 环境管理
21.4.5 同步
21.4.6 GLX字符串
21.4.7 其他关于GLX的内容
21.5 综合运用
第22章 OpenGL ES:嵌入式OpenGL
22.1 精简的OpenGL
22.1.1 ES指什么
22.1.2 历史概述
22.2 版本选择
22.2.1 ES 1.0
22.2.2 ES 1.1
22.2.3 ES 2.0
22.2.4 ES SC
22.3 ES环境
22.3.1 应用程序设计的注意事项
22.3.2 有限环境的处理
22.3.3 定点数学
22.4 EGL:新的窗口环境
22.4.1 EGL显示
22.4.2 创建一个窗口
22.4.3 环境管理
22.4.4 呈现缓冲区和渲染同步
22.4.5 更多EGL相关内容
22.5 处理嵌入式环境
22.5.1 流行操作系统
22.5.2 嵌入式硬件
22.5.3 供应商特定扩展
22.5.4 个人玩家
22.6 实施OpenGL ES
22.6.1 设置环境
22.6.2 设置OpenGL ES状态
22.6.3 渲染
22.6.4 清除工作
...展开收缩
综合评分:4
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var parentWrap = $(this).parents(".respond_box"),
q = parentWrap.find(".form1").serializeArray(),
resStr = $.trim(parentWrap.find(".res_area_r").val());
console.log(q);
//var res_area_r = $.trim($(".res_area_r").val());
if (resStr == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
//var mess = $(".res_area_r").val();
var mess = resS
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, data.com_username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click", '.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
var parentWrap = $(v).parents(".respond_box");
parentWrap.find(".res_area_r").val($.trim(parentWrap.find(".res_area").val()));
评论共有41条
不错,很实用的资料!,学3D必备!
很有参考价值
感谢,正好加强基础
VIP会员动态
CSDN下载频道资源及相关规则调整公告V11.10
下载频道用户反馈专区
下载频道积分规则调整V1710.18
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
资源所需积分/C币
当前拥有积分
当前拥有C币
输入下载码
为了良好体验,不建议使用迅雷下载
OpenGL超级宝典.(第4版).pdf
会员到期时间:
剩余下载个数:
剩余积分:0
为了良好体验,不建议使用迅雷下载
积分不足!
资源所需积分/C币
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
为了良好体验,不建议使用迅雷下载
无法举报自己的资源
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可返还被扣除的积分
被举报人:
请选择类型
资源无法下载 ( 404页面、下载失败、资源本身问题)
资源无法使用 (文件损坏、内容缺失、题文不符)
侵犯版权资源 (侵犯公司或个人版权)
虚假资源 (恶意欺诈、刷分资源)
含色情、危害国家安全内容
含广告、木马病毒资源
*投诉人姓名:
*投诉人联系方式:
*版权证明:
*详细原因:
OpenGL超级宝典.(第4版).pdf}

我要回帖

更多关于 用鼠标控制光源opengl投影 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信