
OpenGL
文章平均质量分 60
JeckZ
主要从事图形学及GIS的研究
展开
-
OpenGL的基础光照和计算
1. 简介OpenGL的光照是开启真实世界的一扇窗,由于光照的引入可以带来更大的真实场景模拟,更加强烈的视觉冲击。2. 光的本质我们日常说的光实际上是狭义上的可见光,广义上的光范围更广,包括了人眼不可见的红外、紫外等,光实际是一种电磁波,电磁波图如下所示 3. 颜色说完了光,我们再说说颜色。现实世界中有无数种颜色,每个物体都有它自己的颜色。在计算机中我们转载 2016-12-01 10:08:15 · 592 阅读 · 0 评论 -
LearnOpenGL学习笔记4:纹理
一、 纹理1. 基础纹理 纹理是一个2D图片(甚至也有1D和3D的纹理),它可以用来添加物体的细节。除了图像以外,纹理也可以被用来储存大量的数据,这些数据可以发送到着色器上。 纹理坐标 纹理坐标(Texture Coordinate),用来标明该从纹理图像的哪个部分采样(译注:采集片段颜色)。纹理坐标在x和y轴上,范围为0到1之间(注意我们使用的是2D纹理图像)。纹理坐转载 2017-01-11 14:35:12 · 454 阅读 · 0 评论 -
【GLSL教程】(三)在OpenGL中向shader传递信息
引言一个OpenGL程序可以用多种方式和shader通信。注意这种通信是单向的,因为shader的输出只能是渲染到某些目标,比如颜色和深度缓存。OpenGL的部分状态可以被shader访问,因此程序改变OpenGL某些状态就可以与shader进行通信了。例如一个程序想把光的颜色传给shader,可以直接调用OpenGL接口,就像使用固定功能流水线时做的那样。不过,使用Ope转载 2017-01-11 09:07:30 · 311 阅读 · 0 评论 -
【GLSL教程】(二)在OpenGL中使用GLSL
设置GLSL这一节讲述在OpenGL中配置GLSL,假设你已经写好了顶点shader和像素shader。如果你还没有准备好,可以从如下网址获得相关内容:http://www.3dshaders.com/home/http://www.opengl.org/sdk/tools/ShaderDesigner/http://developer.amd.com/archiv转载 2017-01-10 17:27:40 · 385 阅读 · 0 评论 -
【GLSL教程】(一)图形流水线
这是一些列来自lighthouse3d的GLSL教程,非常适合入门。我将边学习边翻译该教程的内容,同时记录在这里,方便以后查询。流水线概述下图描述了一个简化的图形处理流水线,虽然简略但仍然可以展示着色器编程(shader programming)的一些重要概念。一个固定流水线包括如下功能:顶点变换(Vertex Transformation)转载 2017-01-10 16:09:43 · 284 阅读 · 0 评论 -
OpenGL 红宝书 混合
1 混合1.1 源因子和目标因子假定源和目标混合因子分别为(Sr, Sg, Sb, Sa)和(Dr,Dg,Db,Da), 混合后的RGB值如下:(RsSr + RdDr, GsSg + GdDg, BsSb + BdDb, AsSa + AdDa)最后,将该四元组的各个分量截取到[0,1].将源片元和目标象素合并起来的默认方式是,将它们的值相加.转载 2017-01-16 15:03:55 · 350 阅读 · 0 评论 -
OpenGL基本图元转换为GL_TRIANGLES
1. 简介在OpenGL中基本图元是构成几何体的基本要素,OpenGL在版本发展过程中,支持的图元类型也有一些变化。2. 图元类型2.1 OpenGL 2.1支持的图元类型OpenGL 2.1是OpenGL Legecy,它支持的图元类型包括一下10种:GL_POINTS //点GL_LINES //线段GL_LINE_STRI转载 2017-02-17 17:49:43 · 1761 阅读 · 0 评论 -
VA、VAO和VBO API备忘
缘起接触OpenGL有一段时间了,大多数时候都是使用OSG在进行开发,前几天同事问起OpenGL中VBO的相关内容,才发现很多OpenGL的知识生疏了。这两天花了点时间重新复习了一下与VBO相关的内容,记录在此以备忘。文中大部分内容来自网络。概述OpenGL从OpenGL 3.0开始将API分成了两种类型:即旧式的OpenGL(Legacy OpenGL)和转载 2017-01-19 11:20:48 · 513 阅读 · 0 评论 -
OpenGL缓冲区对象之VAO
简介VAO ( Vertex Array Object )是OpenGL用来处理顶点数据的一个缓冲区对象,它不能单独使用,都是结合VBO来一起使用的。VAO是OpenGL CoreProfile 引入的一个特性。事实上在CoreProfile中做顶点数据传入时,必须使用VAO方式。当我们使用VBO传入顶点数据时,一般的处理如下:// 绑定VBO,设置VBO中的数据glBindBuff转载 2016-12-07 09:52:24 · 620 阅读 · 0 评论 -
【GLSL教程】(三)在OpenGL中向shader传递信息
引言一个OpenGL程序可以用多种方式和shader通信。注意这种通信是单向的,因为shader的输出只能是渲染到某些目标,比如颜色和深度缓存。OpenGL的部分状态可以被shader访问,因此程序改变OpenGL某些状态就可以与shader进行通信了。例如一个程序想把光的颜色传给shader,可以直接调用OpenGL接口,就像使用固定功能流水线时做的那样。不过,使用Ope转载 2017-03-14 10:02:29 · 388 阅读 · 0 评论 -
旋转变换(一)旋转矩阵
1. 简介计算机图形学中的应用非常广泛的变换是一种称为仿射变换的特殊变换,在仿射变换中的基本变换包括平移、旋转、缩放、剪切这几种。本文以及接下来的几篇文章重点介绍一下关于旋转的变换,包括二维旋转变换、三维旋转变换以及它的一些表达方式(旋转矩阵、四元数、欧拉角等)。2. 绕原点二维旋转首先要明确旋转在二维中是绕着某一个点进行旋转,三维中是绕着某一个轴进行旋转。二维旋转中最简单转载 2017-05-27 10:27:38 · 22340 阅读 · 0 评论 -
旋转变换(二)欧拉角
欧拉角(Euler Angles)是一种描述三维旋转的方式,其他的方式还包括矩阵、四元数、旋转轴和旋转角等方式。之所以可以用它来描述旋转是来自于欧拉旋转定理。该定理指出:任何一个旋转都可以用三个旋转的参数来表示。1. 欧拉角的描述欧拉角的描述方式有很多种,由于关于如何定义欧拉角目前并没有一个标准。因此不同人描述的欧拉角的旋转轴和旋转的顺序都可能是不一样的。这样就带来一个很大的隐患,当使用其转载 2017-06-01 09:10:10 · 1782 阅读 · 0 评论 -
旋转变换(二)欧拉角
欧拉角(Euler Angles)是一种描述三维旋转的方式,其他的方式还包括矩阵、四元数、旋转轴和旋转角等方式。之所以可以用它来描述旋转是来自于欧拉旋转定理。该定理指出:任何一个旋转都可以用三个旋转的参数来表示。1. 欧拉角的描述欧拉角的描述方式有很多种,由于关于如何定义欧拉角目前并没有一个标准。因此不同人描述的欧拉角的旋转轴和旋转的顺序都可能是不一样的。这样就带来一个很大的隐患,转载 2017-06-07 11:35:33 · 2606 阅读 · 0 评论 -
OpenGL学习笔记2:绘制和混合
绘制OpenGL几何图元在使用OpenGL在计算机屏幕上进行绘图时不需要从一个点的绘制开始。我们关心的不是物理屏幕坐标和像素,而是视景体中的位置坐标,我们将从7个由定义的几何图元来开始绘制实心几何图形:图元描述GL_POINTS每个顶点在屏幕上都是一个单独的点GL_LINES每一对顶点定义了一个线段转载 2017-01-11 09:56:13 · 562 阅读 · 0 评论 -
OpenGL学习笔记1:环境配置和基本流程
虽然游戏引擎能够满足游戏开发的绝大部分需求,但是如果仅仅会使用引擎而不懂得游戏引擎的运作原理和图形处理原理,势必会沦为引擎的奴隶。为了让自己不仅能够知其然,还要能知其所以然,决定从OpenGL开始研究图形学和游戏引擎开发技术。前面还有很长的路,慢慢来。环境配置和往常一样,还没开始研究OpenGL就开始在网上找OpenGL的库,结果找了好久都没找到最新的库,官网上也都是文档(转载 2017-01-11 09:11:26 · 393 阅读 · 0 评论 -
OpenGL缓冲区对象之Atomic Counter Object
简介Atomic Counter是OpenGL 4.2版本通过GL_ARB_shader_atomic_counters扩展引入的新特性,它可以在各种着色语言中使用。Atomic Counter具体来说指的是在缓冲区对象(Buffer Object)中存储着一个或者多个可以用来计数的变量值,对这些变量定义了特定的操作方式,可以让它们在着色语言中进行加一和减一的操作,除此之后其他转载 2016-12-12 17:40:06 · 358 阅读 · 0 评论 -
OpenGL管线(用经典管线代说着色器内部)
图形管线(graphics pipeline)向来以复杂为特点,这归结为图形任务的复杂性和挑战性。OpenGL作为图形硬件标准,是最通用的图形管线版本。本文用自顶向下的思路来简单总结OpenGL图形管线,即从最高层开始,然后逐步细化到管线图中的每个框,再进一步细化到OpenGL具体函数。注意,这里用经典管线代说着色器内部,也就是OpenGL固定管线功能(Fixed-Function,相对于prog转载 2016-12-05 10:02:46 · 1299 阅读 · 0 评论 -
OpenGL坐标变换及其数学原理,两种摄像机交互模型(附源程序)
实验平台:win7,VS2010 先上结果截图(文章最后下载程序,解压后直接运行BIN文件夹下的EXE程序):a.鼠标拖拽旋转物体,类似于OGRE中的“OgreBites::CameraStyle::CS_ORBIT”。 b.键盘WSAD键移动镜头,鼠标拖拽改变镜头方向,类似于OGRE中的“OgreBites::CameraStyle::CS_FREELOOK转载 2016-12-05 14:20:41 · 1323 阅读 · 0 评论 -
OpenGL模板缓冲区---StencilBuffer
前言在OpenGL中存在着多种缓冲区,这些缓冲区大致分为: 颜色缓冲区:用于绘图的缓冲区,它包含了颜色索引或者RGBA颜色数据。 深度缓冲区:存储每个像素的深度值,当启动深度测试时,片段像素深度值和深度缓冲区深度值进行比较,决定片段哪些像素点数据可以替换到颜色缓冲区中。 模板缓冲区(Stencil Buffer):与颜色缓冲区和深度缓冲区类似,模板转载 2016-12-13 12:10:40 · 1433 阅读 · 0 评论 -
OpenGL中的光照[光照计算]
光照设置在OpenGL中当我们需要使用光照时,我们需要做如下的设置:开启场景中的光照计算设置场景中光源的参数开启设置好的光源下面我们就依次进行:开启和关闭光照计算在OpenGL中使用glEnable和glDisable来开启和关闭光照计算:[cpp] view plain copy print?// 开启光照计算 g转载 2016-12-06 18:38:46 · 1224 阅读 · 0 评论 -
OpenGL缓冲区对象之EBO
简介EBO(Element Buffer Object,也叫IBO:Index Buffer Object)索引缓冲区对象,这个缓冲区主要用来存储顶点的索引信息。考虑这样一种情况,我们需要绘制一个立方体 在指定顶点坐标的时候,可以使用以下的一个数组:GLfloat vertices[] = {//前-1,-1,1, //v41, -1, 1 //v51,转载 2016-12-07 15:26:55 · 311 阅读 · 0 评论 -
OpenGL缓冲区对象之VBO
简介VBO是OpenGL提供的一种特性,主要是用于在非立即模式下(使用glBegin/glEnd这种方式)用来保存顶点数据(包括位置、纹理、颜色等),同时提供了更新这些数据的方法。 VBO相比较立即模式的渲染来说效率更高,这主要是因为VBO的数据一般会放在显存中而不是内存中。通俗点说VBO就好像是显卡中开辟的一块存储区域,用来把以前放在内存中的数据放在了显存中,便于更加方便的传输处理。转载 2016-12-09 11:37:48 · 512 阅读 · 0 评论 -
OpenGL缓冲区对象之FBO
1. 概述在OpenGL渲染管线中几何数据和纹理经过变换和一些测试处理,最终会被展示到屏幕上。OpenGL渲染管线的最终位置是在帧缓冲区中。帧缓冲区是一系列二维的像素存储数组,包括了颜色缓冲区、深度缓冲区、模板缓冲区以及累积缓冲区。默认情况下OpenGL使用的是窗口系统提供的帧缓冲区。OpenGL的GL_ARB_framebuffer_object这个扩展提供了一种方式来创建额外的转载 2016-12-08 14:04:00 · 398 阅读 · 0 评论 -
OpenGL缓冲区对象之UBO
概述UBO(Uniform Buffer Object)是用来存储着色语言中Uniform类型变量的缓冲区对象,使用UBO可以让uniform变量在不同的着色语言程序中实现共用,也可以在着色语言程序中实现uniform类型变量的设置与更新。提到UBO就必须要提到着色语言GLSL中的Uniform Blocks,它将众多的Uniform类型的变量集中在一起进行统一的管理,对于需要大量Un转载 2016-12-09 16:07:27 · 2151 阅读 · 0 评论 -
glBufferSubData | glClearBufferSubData | glCopyBufferSubData
glBufferSubDataglBufferSubData用来更新一个已有缓冲区对象中的一部分数据void glBufferSubData( GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid * data);1234512345参数: target: 可以参考g转载 2016-12-15 14:03:44 · 1738 阅读 · 0 评论 -
glMapBuffer | glUnmapBuffer
glMapBufferglMapBuffer用来将一个缓冲区对象中的数据映射为客户端中的地址空间void *glMapBuffer( GLenum target, GLenum access);123123参数: target: 指定缓冲区的类型,参考glBufferData中的描述 access: 指定缓冲区对象中数据映射后的读写策略(可以只读、只写、或者转载 2016-12-15 14:04:34 · 5461 阅读 · 0 评论 -
OpenGL像素格式
1.简介前文中描述了OpenGL的图像格式,本文接着描述像素格式 图像格式可以理解为对GPU中数据的解释,那么对于CPU端(也就是内存中)的数据解释就是像素格式的内容。像素数据一般会在CPU和GPU中进行传输,如果传输过程是从GPU到CPU一般称为压包(pack),从CPU到GPU的传输称为解包(unpack)2. 像素传输的应用场景在OpenGL中有许多函数会转载 2016-12-22 10:50:07 · 509 阅读 · 0 评论 -
glTexEnv
1. 简介glTexEnv用来设置纹理的环境参数,纹理环境参数主要控制纹理如何与片元颜色进行计算的。2. 函数原型void glTexEnvf( GLenum target, GLenum pname, GLfloat param);void glTexEnvi( GLenum target, GLenum pname, GLint param);转载 2016-12-26 09:28:13 · 2916 阅读 · 1 评论 -
旋转变换(三)四元数
1.简介四元数是另一种描述三维旋转的方式,四元数使用4个分量来描述旋转,四元数的描述方式如下:q=s+xi+yj+zk,(s,x,y,z∈R)i2=j2=k2=ijk=−1四元数的由来和复数很很大的关系,因此首先讨论一下关于复数的内容。1.1 复数复数可以定义如下: z=a+bia,b∈Ri2=−1复数常用的基本运算如下:转载 2017-06-15 17:46:27 · 1666 阅读 · 1 评论