自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

疯狂的程序员

https://cxx001.github.io

  • 博客(23)
  • 资源 (3)
  • 收藏
  • 关注

原创 OpenGL--选择和反馈

理论基础 选择和反馈:整的来说就是鼠标点击,然后算出到底点击的是哪个物体。在选择和反馈模式下,绘制信息返回给应用程序而不是像在渲染模式中那样送往帧缓冲,在这种模式下,屏幕将被冻结,没有图形出现。实现的一般步骤是:1,创建选择缓存,用于记录返回的点中物体信息 2,调用glRenderMode(GL_SELECT)进入选择模式 3,用glInitName(),glPushName()等来初始化名字栈

2015-04-29 17:09:32 3690 5

原创 OpenGL--贝塞尔曲线或曲面

理论基础 贝塞尔曲线和曲面:OpenGL只能直接绘制基本图元,对于曲线和曲面我们一般采用一系列线段或多边形来模拟的,这样当线段或多边形增多时必定很耗性能。其实对于这种曲线和曲面,我们可以使用一些控制点,通过求值器程序先计算出坐标等信息,然后直接用这些数据绘制,这样不仅节省内存,还提高了模拟曲线或曲面的精度(本质还是通过线段或多边形绘制的,只是求值器提前算出了曲线或曲面的顶点信息)。 求值器使用一

2015-04-29 10:32:37 12612 2

原创 OpenGL--二次几何体

理论基础 二次几何体:就是指一些常用的三维物体,如球体,圆柱体,圆盘和圆锥体等,OpenGL核心库也不能直接模拟和渲染,但我们可以使用GLU库来创建这些二次几何体。创建和渲染二次几何体的过程:1,创建一个二次对象 2,注册一个错误回调 3,指定二次对象的渲染属性(绘制模式,法线类型,是否生成纹理坐标,法线方向) 4,调用二次几何体渲染函数 5,删除二次对象。注释:二次几何体opengl 3.1以

2015-04-28 19:14:22 2398

原创 OpenGL--分格化

理论基础 分格化:OpenGL渲染的都是一些简单的凸多边形,对于那些复杂的多边形,如凹多边形,含孔多边形以及自交叉的多边形,OpenGL函数库不能对他们进行渲染。不过OpenGL实用库(GLU)提供了一系列分格化函数,它们可以将一个复杂的多边形划分为一系列简单凸多边形,我们就把这个过程叫做分格化(又称网格化)。分格化一般步骤:1,创建分格化对象 2,注册对应阶段分格处理的回调函数(复杂点的是相交

2015-04-28 16:53:07 2495 1

原创 OpenGL--帧缓冲区

理论基础 1,帧缓冲区(显存):是由像素组成的二维数组,每一个存储单元对应屏幕上的一个像素,整个帧缓冲对应一帧图像即当前屏幕画面。帧缓冲通常包括:颜色缓冲,深度缓冲,模板缓冲和累积缓冲。这些缓冲区可能是在一块内存区域,也可能单独分开,看硬件。而像素数据在进入帧缓冲之前(称为片段)必须通过一系列测试才能写入帧缓冲,如果片段在其中某个测试没有通过,后面的测试或操作都将不再进行。这些测试或操作流程是:开

2015-04-27 11:05:21 6757

原创 OpenGL--模板测试

理论基础 模板测试:通俗点讲就是为屏幕每个像素设置了一个模板值,然后拿一个参考值与之比较,满足条件就通过,则对应像素就会绘制,否则不绘制。类似深度测试一样,只是服务情形不同,深度测试主要用来消除背面的,而模板测试主要可以实现裁剪,指明哪里可以绘制,哪里不绘制。(比较规则:glStencilFunc,修改模板缓冲区的值:glStencilOp)代码示例1,模板实现裁剪实例#include "GLT

2015-04-25 17:17:37 2471

原创 OpenGL--阴影

理论基础 阴影:就是我们所说的影子,其实现原理其实就是把场景渲染了两次,第一次是把相机放到光源位置渲染场景 ,然后存储渲染的深度信息到一张纹理上,即阴影图(只关心深度信息,所以此时可以关闭光照和纹理贴图提高效率)。第二次再从观察者的角度来渲染场景,在这次渲染时才渲染阴影,这次的渲染过程本质就是纹理贴图,只不过这个纹理是阴影图,贴图的方式根据我们设置的深度纹理过滤方式处理。生成阴影的过程是这样的:对

2015-04-24 15:47:18 7135 3

原创 OpenGL--纹理组合器函数

理论基础 纹理组合器函数(glTexEnvf):简单点讲就是指定纹理贴图和材质混合的方式。固定管线时代,它只是告诉你,纹理的像素读取出来之后,其实还可以经过一些复杂变换,然后才拿去使用,这样可以搞出一些绚丽效果。不过现在shader可以进行更多更自由的变换,所以这东西现在就没什么用了。实例代码#include "GLTools.h"#ifdef __APPLE__#include <glut/

2015-04-23 17:45:45 2278

原创 OpenGL--多重纹理

理论基础 多重纹理是指在同一个模型表面指定两个或两个以上的纹理,这些纹理通过一定的融合方式进行混合形成的效果。其每一层各自执行自己的纹理操作,并把结果传递给下一层,直到全部完全。主要应用在如:光照效果,贴花,合成,细节纹理等。 代码示例#include <GLTools.h>#ifdef __APPLE__#include <glut/glut.h>#else#define FREEGL

2015-04-22 19:49:46 5410

原创 OpenGL--环境映射

理论基础 三维场景中得物体不仅受光照影响,而且受周围环境的影响,如金属,水面等材质都可以映射出周围环境的图像。模拟物体光滑表面能够映射出周围环境的技术叫做环境映射(也称反射映射)。 其原理是通过立方体纹理(cube)实现的,具体是:把摄像机放在反射物体旁边,分别朝6个方向照得6张纹理,组成立方体纹理。然后就是利用这个立方体纹理通过一些复制的计算,把反射纹理映射到我们的光亮物体表面,从而形成物体反

2015-04-22 12:00:21 3990 2

原创 OpenGL--自动生成纹理坐标

理论基础 纹理坐标自动生成:有两种形式,一种整形形式(glTexGeni),一种向量形式(glTexGenfv),使用它比手动设置纹理坐标方便(glTexCoord)。实例代码#include <GLTools.h>#ifdef __APPLE__#include <glut/glut.h>#else#define FREEGLUT_STATIC#include <GL/glut.h>

2015-04-21 14:49:42 5018

原创 OpenGL--多级纹理

理论基础 多级纹理(Mipmap):就是分辨率递减的同一纹理,根据距离观察点的距离选着最适合的分辨率纹理。 它主要解决两方面问题:一,闪烁,当屏幕上被渲染物体的表面与它所应用的纹理图像相比显得非常小时,就会出现闪烁。尤其当相机和物体在移动的时候,这种负面效果更容易被看到。二,性能问题,加载了大量的纹理数据之后,还要对其进行过滤处理(缩小),在屏幕上显示的只是一小部分。纹理越大,所造成的性能影响就

2015-04-21 10:50:32 3205

原创 OpenGL--替换纹理图像的全部或一部分

理论基础 和修改原有纹理相比,创建新纹理的开销更大。我们主要使用glTexSubImage*和glCopyTexSubImage*()来修改纹理,前者用于替换的纹理来源外部读取,后者替换的纹理来源自身帧缓冲区。实例代码#include "GLTools.h"#ifdef __APPLE__#include <glut/glut.h>#else#define FREEGLUT_STATIC

2015-04-20 15:30:10 4966

原创 OpenGL--纹理贴图基础

理论基础 纹理贴图:通俗地讲就是可以把我们读取的纹理加载到图元表面的一种技术,这样大大的提高了图像的表现质量。实例代码 //读取tga格式图片/*tga图片头信息结构*/#pragma pack(1)//结构体字节对齐typedef struct{ GLbyte identsize; // Size of ID field that follows he

2015-04-18 17:07:17 3347 1

原创 OpenGL--图像

理论基础 图像:它与位图相似,都是二进制位来表示屏幕对应像素,只是图像的每个像素并不是由1个位来表示的,它的每个像素包含更多地信息。即位图1个位对应1个像素,图像多个位对应1个像素。OpenGL图像操作归根结底就是对像素进行操作。示例图如下: 注释:这些东西现在也基本是废弃机制了.代码示例(图像的缩放与复制操作)#include "GLTools.h"#include "GLShaderMa

2015-04-15 14:34:19 1992

原创 OpenGL--位图

理论基础 位图:就是对应一些二进制位来操作像素,0则表对应像素不绘制,1表绘制,这样来模拟绘制图像。一般可以用来绘制字符,但位图无法做缩放或旋转等特效。位图示例图如下: 注:在opengl 3.0以后基本废弃了。实例代码#include "GLTools.h"#include "GLShaderManager.h"#ifdef __APPLE__#include <glut/glut.h>

2015-04-14 19:35:06 2818

原创 OpenGL--显示列表

理论基础 显示列表:是一组存储在一起的OpenGL函数,可以在以后执行。调用一个显示列表时,它所存储的函数就会按照顺序执行。类似存储在服务端(GPU)的缓冲区对象,能够提高效率。在创建显示列表时,只有表达式的值存储在显示列表中,并且这个值也不会再修改。还有像有返回值的函数与依赖客户端状态的函数都不能放在显示列表中。这主要是因为这样的函数需要依赖客服端数据与状态,但显示列表是存储在服务端的。注:在O

2015-04-14 10:24:31 2612

原创 OpenGL--多边形偏移

理论基础 多边形偏移:有时候我们需要着重显示多边形的边缘,一般做法是先绘制实心的再在同一位置绘制空心的,这样就可以突出边缘。但是,由于直线与多边形的光栅化并不完全相同,即使在同一位置绘制它们的深度值也不一定相同,这样绘制的直线可能忽浓忽淡。这时我们就可以激活多边形偏移来解决这个问题,其原理就是给实体或线框的深度加上一个偏移值。即把实体推向远处或把线框拉近,具体偏移值多少是通过设置glPolygon

2015-04-13 17:48:23 3935

原创 OpenGL--点参数

理论基础 点参数:在有些情况下,我们对如圆或球体的渲染时,不想用效率较低的多边形近似模拟。这时我们可以用点参数,它根据点和观察点的距离,对点的大小和亮度进行衰减。如:雨滴,飞溅的血滴等。代码示例#include "GLTools.h"#include "GLShaderManager.h"#ifdef __APPLE__#include <glut/glut.h>#else#define

2015-04-13 15:42:42 3224

原创 OpenGL--雾

理论基础 雾效果:计算机图像有时候由于过于清晰和锐利,反而显得不太逼真。我们可以通过添加雾效果,使整幅图像变得更加逼真。所谓雾效果,就是使远处的物体看上去逐渐变得模糊。雾效果可以提高性能,因为它可以不绘制那些因为雾的影响而不可见的物体。其实现原理其实就是根据雾距离观察点的距离计算出一个混合因子,然后用它把雾颜色与目标颜色进行混合得到的效果。实例代码 1,RGBA模式下的5个雾化球体#inclu

2015-04-13 10:45:38 3228

原创 OpenGL--抗锯齿

理论基础 1,锯齿:在图元边缘处我们能相当清楚地看到两种颜色的分界,我们把这种称之为锯齿。为什么会产生?这是因为我们的图像是由一个个像素组成的,而每个像素近似一个很小的正方形,这样由正方形组成的图像边缘肯定会产生锯齿。示意图如下: 2,抗锯齿:常见的抗锯齿方法有两种:混合和多重采样。使用混合消除锯齿的原理是,在边缘处降低alpha值再做混合操作从而达到欺骗眼睛的目的。然而混合操作受绘制顺序的

2015-04-11 15:15:29 4840

原创 OpenGL--混合

理论基础 混合:主要就是用来做一些如透明的特效,其实就是源颜色与目标颜色(先写入帧缓冲的是目标颜色,后将要写入的是源颜色)进行混合计算得到一个新颜色的过程。混合发生在图元光栅化之后,片段写入帧缓冲之前,片段与对应位置的帧缓冲区像素进行互操作形成新的像素颜色的过程及时混合。需要通过glEnable(GL_BLEND)来激活混合功能,否则的话片段直接覆盖对应像素。颜色的alpha分量值此时就会发挥作用

2015-04-10 16:47:34 2074

原创 OpenGL--光照

理论基础 1,人眼所看到的五颜六色的世界是由于物体表面反射到眼睛的颜色形成的,而这个反射颜色是由物体本身和光源共同决定的。某种颜色的物体反射对应颜色的光,吸收其它颜色的光,如红色物体吸收全部的G,B颜色,反射全部的R颜色。opengl把光单独分成4种类型:环境光(均匀充满场景),散射光(手电筒),镜面光(朝特定一方向反射),发射光(夜明珠)。他们单独计算,最后叠加在一起,构成整个光照系统。

2015-04-10 09:41:23 2143

文件操作实战练习资源

练习资源练习资源练习资源练习资源练习资源练习资源练习资源练习资源练习资源练习资源练习资源练习资源练习资源

2020-09-26

pomelo 2.2.5

pomelo源码安装

2019-01-28

点满这些技能树,你也是卓越的游戏开发者

点满这些技能树,你也是卓越的游戏开发者,罗列了游戏前端开发需要知道的方方面面

2016-02-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除