
OpenGL
文章平均质量分 80
攻城狮一叶秋
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
OpenGL深度测试带来的问题----Z冲突
考虑这样一种情况,你需要在泳圈模型上贴一个叮当猫的图像,让泳圈模型显得更好看,那么叮当猫贴图和泳圈模型的深度值z值几乎完全相同,这样就使泳圈模型看起来一团糟原创 2015-08-19 09:19:56 · 1767 阅读 · 0 评论 -
OpenGL GLSL访问纹理
这一节我们给上一节的ADSPhone的程序贴上一张纹理贴图如下图:GLSL访问纹理很简单,只需要把要使用的纹理坐标和纹理的对象传入着色器即可对于本程序,我们把纹理坐标和纹理对象传入顶点着色器ADSTexture.vp中,在片段着色器ADSTexture.fp计算颜色值时 乘上 纹理的颜色值,其余的ADSPhone的程序都一样下面是顶点着色器ADSTe原创 2015-09-03 10:19:06 · 3311 阅读 · 0 评论 -
OpenGL GLSL 丢弃片段
在片段着色器中我们可以使用方法discard来丢弃不想绘制出来的片段比如下面的代码表示当一个片段的alpha值小于0.1时,就不绘制该片段if(vColorValue.a < 0.1f){ discard;}本节我们写一个具有腐蚀效果的例子如下图:我们会看到,泳圈模型上有斑点,就像被腐蚀了一样我们的代码和ADSPhone程序的代码差不多原创 2015-09-03 12:01:37 · 5358 阅读 · 0 评论 -
OpenGL GLSL 一维纹理的使用
我们这节将使用一维纹理实现下图中的效果我们首先会创建一个红色分量逐渐增大的一维纹理数据 //纹理对象颜色值 GLubyte textureData[4][3] = { 32, 0, 0, 64, 0, 0, 128, 0, 0, 255, 0, 0 };该一维纹理只有颜色值,纹理原创 2015-09-03 13:12:59 · 3953 阅读 · 0 评论 -
OpenGL 天空盒
这一节我们实现一个天空盒的效果如下图:简单的说天空盒就是先创建一个立方体,然后再立方体的六个面上贴上纹理图片,然后把照相机移动到立方体中即可立方体有六个面,分别是沿X,Y,Z轴的正方向,和负方向假如我们想为X轴的正方向贴一张纹理图片可以这样GLbyte *pBytes = gltReadTGABits("pos_x.tga", &iWidth, &iHe原创 2015-09-05 12:51:44 · 3597 阅读 · 1 评论 -
OpenGL 创建反射
这一节我们实现下图中的效果要实现这个效果非常简单,我们只需要在上一节 天空盒的代码中增加点东西即可在现实生活中,我们从上图小球中看到的景象实际是光线通过小球的反射,进入我们的眼睛肿才能看到的我们会通过自己的写的反射着色器Reflection.vp 来获取这个反射的向量,这个向量就可以作为小球的纹理坐标,小球的纹理任然使用天空盒的纹理图另外我们的程序支原创 2015-09-05 13:35:57 · 2134 阅读 · 0 评论 -
OpenGL渲染管线
OpenGl在把3D的世界投影到2D的屏幕中的过程中需要做一些工作,我们先来理解几个概念视觉坐标:可以简单的把它理解为3D世界的坐标系视图变换:照相机的坐标系,用来确定照相机的位置,观察方向,向上的方向模型变换:把模型通过一个矩阵变换到照相机的空间中,以便能看到它投影变换:把照相机采集到的数据变换成2D的数据投影变换包括正投影,和透视投影正投影是3D世界中的原创 2015-08-25 23:36:59 · 972 阅读 · 0 评论 -
OpenGL裁剪
裁剪是将OpenGL渲染限制在窗口中的一个特定的矩形区域中,这样可以渲染的时候只刷新屏幕上的一部分原创 2015-08-21 09:22:40 · 2317 阅读 · 0 评论 -
OpenGL混合
前面我们讲深度测试的时候说过,深度值的会把深度值小的覆盖住原创 2015-08-23 10:44:02 · 800 阅读 · 0 评论 -
OpenGL ADSGouraud着色
ADS代表环境光(Ambient),漫射光(Diffuse)和镜面光(Specular).我们可以用当前物体的材质对这三种光的反射量来决定物体的最终颜色值环境光的计算公式是 物体的材质*环境光的值uniform vec3 vAmbientMaterial;uniform vec3 vAmbientLight;vrc3 vAmbientColor = vAmbientMateri原创 2015-09-01 08:45:55 · 916 阅读 · 0 评论 -
OpenGl Mip贴图
Mip贴图可以用来提高游戏的性能,主要原理是把一张纹理图片按照一定侧尺寸缩放,生成一些列的图片,按照图片离照相机的距离的远近,再决定使用哪个图片比如,离照相机远的使用小的原创 2015-08-30 11:29:16 · 1817 阅读 · 0 评论 -
OpenGL数学知识
OpenGl在把3D的世界投影到2D的屏幕中的过程中需要做一些工作,我们先来理解几个概念视觉坐标:可以简单的把它理解为3D世界的坐标系视图变换:照相机的坐标系模型变换:把模型通过一个矩阵变换到照相机的空间中,以便能看到它投影变换:把照相机采集到的数据变换成2D的数据视口变换:把上一步中得到的2D数据投影到屏幕上下面介绍一些函数,这里只是列举一下,原创 2015-08-24 22:28:44 · 761 阅读 · 0 评论 -
OpenGL深度测试
深度测试是指 每个需要渲染到屏幕上的像素都有一个深度值,也就是z值,当两个像素需要在屏幕的相同位置渲染时,谁的z值大,谁就渲染出来,另一个不被渲染。我们来看一个没有开启深度测试的例子在上一节中的泳圈模型中,如果继续旋转模型 则会出现下图这样的问题我们看到泳圈模型就像缺了一块似得。开启深度测试 首先 在mian函数中设置窗口时 需要申请一个深度缓冲区g原创 2015-11-08 13:18:03 · 766 阅读 · 0 评论 -
在window下创建opengl项目
这个OpenGL入门级的系列文章主要参考“OpenGl超级宝典”和“OpenGL编程指南”两本书,加入了一下自己的见解和一些简单的代码实现。创建OpenGL项目需要用到两个库GlTools.lib和freeglut_static.lib。这两个库我已经上传到csdn了。GlTools.lib下载freeglut_static.lib下载第一步 打开vs2013,创建基于wi原创 2015-08-06 22:17:15 · 2056 阅读 · 0 评论 -
OpenGL图元
本章主要讲解OpenGL中的点,线,线带,线环,三角形。并用简单的代码一一实现。一 点首先我们先画出四个点,效果图如下可以看到在黑色的背景框中有四个红色的点,下面具体来讲解用OpenGL如何实现这种效果在上一章中我们在window线创建了OpenGL工程,首先在该工程中加入Primitives.cpp的文件首先包含头文件和定义全局变量#include原创 2015-08-09 10:51:21 · 694 阅读 · 0 评论 -
OpenGL背面剔除
背面剔除 就是对几何体的背面,我们看不到的三角形进行剔除,以便提高性能我们先来看一个没有背面剔除的例子这是一个类似于游泳圈的模型,稍微的对其旋转了一下,从侧面看到的效果如下图:我们看到有一些黑色的线条 这是因为在没有开启 背面剔除 模式的情况下,三角形的排序可能会出现混乱,从而造成这种现象。我们来看看怎么来写这个例子工程的创建在前面已经讲过了首先是m原创 2015-08-18 22:39:09 · 2769 阅读 · 0 评论 -
OpenGL照相机
我们这节会创建一个游戏世界,里面有一些游戏模型,可以通过键盘的上下左右键,在游戏世界里面行走。如下图:决定一个照相机的因素有三个,照相机的位置,照相机的朝向,照相机的向上的正方向我们可以通过Opgl的一个类GLFrame来获取一个默认的摄像机的数据结构GLFrame cameraFrame;M3DMatrix44f mCamera;cam原创 2015-08-27 20:57:44 · 1211 阅读 · 0 评论 -
OpenGL镜面效果
我们这一节的效果图如下:我们会给每个模型贴上纹理图,纹理图的使用上一节已经讲过了,我们会实现一个镜面的效果,如上图,每个模型下面都有一个像是通过镜子反射的模型一样。其实做法很简单,我们只需要把原来的视口矩阵反转如下的代码modelViewMatrix.Scale(1.0f, -1.0f, 1.0f);然后把改变多边形的正面,OpenGl默认的多边形的正面是逆时针的,原创 2015-08-30 19:14:11 · 4294 阅读 · 1 评论 -
OpenGL 抗锯齿
我们先来绘制一条线段如下图:我们可以看到在线段上有很多小锯齿一样的东西,我们可以用OpenGL的抗锯齿模式来减小这种影响开启抗锯齿// 开启抗锯齿 glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);原创 2015-11-08 13:22:12 · 2492 阅读 · 0 评论 -
OpenGL GLSL
GLSL是OpenGL的着色语言, 我们之前的例子,都是用的着色器管理类GLShaderManager中的函数UseStockShader来使用着色器的,该函数完成的东西就是对我们的顶点数据进一步的加工,比如设置顶点颜色,设置顶点光照的强度,设置顶点纹理等。假如说我们对UseStockShader函数一些默认的效果不满意,比如我们要让模型的一部分比另一部分更亮,也就是光线照到的地方,比没有照到原创 2015-08-31 22:09:39 · 1131 阅读 · 0 评论 -
OpenGL ADSPhong着色
在上一节ADSGouraud着色模式下,我们看到当小球旋转时,亮光的部分时隐时现的,这是由于三角形之间的不连续造成的。我们可以用ADSPhong着色模式来解决这种问题,在ADSGouraud着色模式下,顶点着色器传入片段着色器的是每个顶点的颜色值,顶点之间的颜色是通过线性插值计算出来的,这样在小球旋转的情况先就可能产生亮光的部分时隐时现的的情况 ,ADSPhong着色模式中顶点着色器传入到片段原创 2015-09-02 00:08:30 · 781 阅读 · 0 评论 -
OpenGL 多重纹理
OpenGL使用多重纹理也同样非常简单,比如我们想在上一节反射的小球上再加一层纹理,实现下面的效果我们给小球加上去的纹理贴图名字叫做"tarnish.tga",如下图还记得上一节反射中,我们给小球设置颜色值时,只是将对应的天空盒的纹理坐标赋予小球的颜色值,如下vFragColor = texture(cubeMap, vVaryingTexCoord);原创 2015-09-05 16:16:14 · 6681 阅读 · 0 评论 -
OpenGL纹理
这一节我们会在一个矩形上贴一张图片,如下图:我们使用的图片格式为.TGA的纹理图片的数据解包与包装OpenGL在读取一张图片时,首先要知道以什么方式在解析(解包)图像数据,因为一张图片的内存排列方式可以是4字节对齐,也可以是1字节排列,而.TGA格式的文件是1字节对齐的函数glPixelStorei可以改变像素的存储方式比如:glPixelStorei(GL原创 2015-08-29 09:36:07 · 1320 阅读 · 0 评论