OpenGl
文章平均质量分 66
屠变恶龙之人
这个作者很懒,什么都没留下…
展开
-
OpenGL系列2:渲染管线
OpenGL渲染管线包含一系列有序地处理数据的阶段。两种图形数据即基于顶点的数据和基于像素的数据,在渲染管线中处理并统一输出到帧缓冲区。注意,OpenGL可以将处理后的数据重新发送到你的程序中(注意下图中的灰色线条)。OpenGL渲染管线显示列表(Display List)显示列表是一组已经被存储或编译过的的命令。所有的数据,几何数据和像素数据都转载 2016-11-03 20:24:18 · 273 阅读 · 0 评论 -
贝塞尔曲线
关于贝塞尔曲线,网上很多博客都已经给出了解释。。。真的好多。但是我看了几百遍都不明白!!不知道大家跟我有没有同样的感受。所以就来个重点解释,通俗易懂版给大家吧~~下面的这个图,相信你也看到过很多。然而,我这里也是需要贴一下这个图的(不知道是哪个大神的图,不好意思,借用一下)。 参数讲解P0是曲线的开始点P3是曲线的结束点P1和P2是控转载 2017-02-17 16:07:42 · 756 阅读 · 0 评论 -
分格化
一、什么叫分格化? 分格化就是把复杂多边形(非凸多边形,如下图)分割成凸多边形的过程。典型的复杂多变性主要有三类:凹多边形、中间有洞的多边形以及自相交多边形。二、为什么要进行分格化? 因为OpenGL只能够保证正确渲染凸多边形,而不能保证渲染复杂多边行结果的正确性(当然有时也正确)。至于OpenGL为什么不提供对复杂多边形的正确性支持,主要转载 2017-02-17 14:39:14 · 783 阅读 · 0 评论 -
模板缓冲区
前言在OpenGL中存在着多种缓冲区,这些缓冲区大致分为: 颜色缓冲区:用于绘图的缓冲区,它包含了颜色索引或者RGBA颜色数据。 深度缓冲区:存储每个像素的深度值,当启动深度测试时,片段像素深度值和深度缓冲区深度值进行比较,决定片段哪些像素点数据可以替换到颜色缓冲区中。 模板缓冲区(Stencil Buffer):模板缓冲区其实就是采用过滤的技术来转载 2017-02-17 13:39:56 · 515 阅读 · 0 评论 -
累积缓冲区
累积缓冲区OpenGL除了颜色缓冲区、深度缓冲区、模板缓冲区之外,还有累积缓冲区。累积缓冲区允许你把渲染到颜色缓冲区的值,拷贝到颜色缓冲区。在多次拷贝操作到累积缓冲区时,可以用不同方式的把颜色缓冲区内容和当前累积缓冲区的内容进行重复混合。当在累积缓冲区完成一幅图像之后,可以拷回颜色缓冲区,然后通过SwapBuffers显示到屏幕上。累积缓冲区的操作通过void glAccum(GL转载 2017-02-17 13:32:16 · 843 阅读 · 0 评论 -
glTexParameter
函数原型: void glTexParameterf(GLenum target,GLenum pname, GLfloat param) void glTexParameteri(GLenum target,GLenum pname,GLint param)参数说明:target: 指定目标纹理,它只能取值GL_TEXTURE_1D或者GL_转载 2017-02-16 20:48:04 · 1648 阅读 · 0 评论 -
OpenGL三维变换
我们生活在一个三维的世界——如果要观察一个物体,我们可以:1、从不同的位置去观察它。(视图变换)2、移动或者旋转它,当然了,如果它只是计算机里面的物体,我们还可以放大或缩小它。(模型变换)3、如果把物体画下来,我们可以选择:是否需要一种“近大远小”的透视效果。另外,我们可能只希望看到物体的一部分,而不是全部(剪裁)。(投影变换)4、我们可能希望把整个看到的图形画下来,但它只占据纸张转载 2016-12-27 10:09:20 · 358 阅读 · 0 评论 -
OpenGL颜色
OpenGL支持两种颜色模式:一种是RGBA,一种是颜色索引模式。无论哪种颜色模式,计算机都必须为每一个像素保存一些数据。不同的是,RGBA模式中,数据直接就代表了颜色;而颜色索引模式中,数据代表的是一个索引,要得到真正的颜色,还必须去查索引表。1. RGBA颜色RGBA模式中,每一个像素会保存以下数据:R值(红色分量)、G值(绿色分量)、B值(蓝色分量)和A值(alpha分量)。转载 2016-12-27 09:32:55 · 320 阅读 · 0 评论 -
画虚线,指定宽度
void display(){ glClear(GL_COLOR_BUFFER_BIT); glEnable(GL_LINE_STIPPLE); glLineStipple(2, 0x0F0F); //设置虚线 glLineWidth(10.0f); //指定宽度 glBegin(GL_LINES原创 2016-12-27 09:14:41 · 1152 阅读 · 0 评论 -
使用纹理贴图的步骤
纹理贴图的步骤1.创建纹理对象,并为它指定一个纹理2.确定纹理如何应用到每个像素上3.启用纹理贴图功能4.绘制场景,提供纹理坐标和几何图形坐标实例:(经过纹理贴图的棋盘)[cpp] view plain copy print?#include #include #include /*转载 2017-02-18 11:08:34 · 1666 阅读 · 0 评论 -
glFlush()与glFinish()区别
glFinish()将缓冲区的指令立即送往硬件执行,但是要一直等到硬件执行完这些指令之后才返回。如果直接绘制到前缓冲,那么在你想保存屏幕截图之前,就需要调用这个函数,确保绘制完毕。如果使用双缓冲,则这个函数不会有太大作用。 glFlush()清空缓冲区,将指令送往缓硬件立即执行,但是它是将命令传送完毕之后立即返回,不会等待指令执行完毕。这些指令会在有限时间转载 2017-02-18 15:17:39 · 593 阅读 · 0 评论 -
光照
1.创建、定位和启用光源(1)定义光源的颜色和位置GLfloat ambient[] = { 0.0, 0.0, 0.0, 1.0 };GLfloat diffuse[] = { 1.0, 1.0, 1.0, 1.0 };GLfloat position[] = { 0.0, 3.0, 2.0, 0.0 };(2)创建光源 glLightfv(GL_LIGHT1, GL_A转载 2017-02-18 16:25:24 · 367 阅读 · 0 评论 -
纹理坐标
纹理本文译自微软DirectX 6.1帮助文件,英文版权属MicroSoft™公司所有,中文版权(如果有的话:-))属程连冀、刘长松所有。 Direct3D支持广泛的纹理特性设置,使程序员可以轻松的访问提供高级纹理技术。下面我们来讨论Direct3D中的纹理的一些内容:1. 纹理的基本概念2. 纹理句柄3. 纹理接口4. 纹理过滤5. 纹理Wrapping6. 纹理转载 2017-02-15 22:15:09 · 6638 阅读 · 0 评论 -
OpenGL-glLight
函数原型: void glLightf(GLenum light,GLenum pname,GLfloat param) void glLighti(GLenum light,GLenum pname,GLint param)参数说明:light:指定光照。光照的数目取决于实现,但至少可以支持8个光照。分别为GL_LIGHT1到GL_LIGHT8转载 2017-02-13 20:18:15 · 1529 阅读 · 0 评论 -
opengl shader
OpenGL着色语言GLSL1、OpenGL的可编程管线①顶点着色阶段:接收顶点数据,独立处理每个顶点。②细分着色阶段:可选阶段。在OpenGL管线内部生成新的几何体。③几何着色阶段:可选阶段。在OpenGL管线内部对所有几何图元进行修改。④片元着色阶段:处理OpenGL光栅化之后生成的独立片元。⑤计算着色阶段:在程序中相对独立的一个阶段。转载 2017-02-17 15:18:56 · 842 阅读 · 0 评论 -
求值器和NURBS
在最底层,图形硬件所绘制的是点、直线和多边形(通常是三角形和四边形)。平滑的曲线或表面是通过使用大量的微小线段或多边形模拟的。但是,从数学角度而言,许多非常实用的曲线和表面可以用少许几个参数(例如控制点)来描述。保存一个表面的16个控制点要比保存1000个三角形以及这些三角形每个顶点的法线向量信息所需要的空间要少的多。另外,这1000个三角形只能对真正的表面进行近似的模拟,而这些控制点却能够准确地转载 2017-02-19 22:40:41 · 1104 阅读 · 0 评论 -
选择和反馈
无论是在选择还是在反馈模式下,绘图信息总是返回到应用程序而不是像渲染模式那样发送到帧缓冲区。因此,在选择或反馈模式下,屏幕冻结,不会进行绘图。在这两种模式下,颜色、深度、模板和累积缓冲区的内容并不会受到影响。选择一般情况下,当我们打算使用OpenGL的选择机制时,首先把整个场景绘制到帧缓冲区,然后进入选择模式,并对场景进行重绘。但是,在进入选择模式之后,帧缓冲区的内容将不会修改,除转载 2017-02-19 22:42:21 · 490 阅读 · 0 评论 -
雾效果
应用雾雾是OpenGL支持的一种易于使用的特殊效果。在使用雾时,OpenGL把雾的颜色与完成所有其他颜色计算的几何图元进行混合。雾与几何图元的混合程度取决于几何图元离观察者的距离。雾可以使物体逐渐模糊最终消失在雾色里(就像在雾中远去的父亲的背影)。在SetupRC函数中开启雾化效果。glClearColor(fLowLight[0], fLowLight[1], fLowLig转载 2017-02-19 22:09:51 · 375 阅读 · 0 评论 -
抗锯齿
启用抗锯齿还是以glEnable来启用抗锯齿,可以根据不同图形进行处理GL_POINT_SMOOTH 点GL_LINE_SMOOTH 线GL_POLYGON_SMOOTH 多边形抗锯齿质量当然效果越好,那么计算机速度就越慢,即有一个参数设置glHint用于对点,线,多边形的抗锯齿程度进行设置GL_DONT_CARE 放弃,应该是系统默认吧GL_F转载 2017-02-19 21:55:46 · 285 阅读 · 0 评论 -
显示列表
显示列表可以提高性能,因为他可以存储OPENGL的函数,供以后使用,如果需要多次重绘同一个几何图形,或者如果一次需要多次调用的用于更改状态的函数,把这些函数存储在显示列表中(将显示列表中的矩阵结果集保存,后续使用不需要重复计算以提高性能)当通过网络在另外一台远程计算机上运算OPENGL程序时,把绘画命令保存在显示列表中具有特别重要意义,由于显示列表是服务器的一部分,这样可以减少网络通信,提转载 2016-11-28 13:27:46 · 384 阅读 · 0 评论 -
像素操作
先简单介绍Windows中常用的BMP文件格式,然后讲OpenGL的像素操作。虽然看起来内容可能有点多,但实际只有少量几个知识点,如果读者对诸如“显示BMP图象”等内容比较感兴趣的话,可能不知不觉就看完了。像素操作可以很复杂,这里仅涉及了简单的部分,让大家对OpenGL像素操作有初步的印象。学过多媒体技术的朋友可能知道,计算机保存图象的方法通常有两种:一是“矢量图”,一是“像素图”。矢量图转载 2016-11-21 17:26:22 · 498 阅读 · 0 评论 -
顶点、 图元、片元、像素的含义
阶段1. 顶点 ->图元几何顶点被组合为图元(点,线段或多边形),然后图元被合成片元,最后片元被转换为帧缓存中的象素数据。阶段2. 图元 ->片元图元被分几步转换为片元:图元被适当的裁剪,颜色和纹理数据也相应作出必要的调整,相关的坐标被转换为窗口坐标。最后,光栅化将裁剪好的图元转换为片元。1) 裁剪在裁剪时点,线段和多边形处理略微不同。对于点,要么保留原始状态(在转载 2016-11-04 15:48:10 · 15721 阅读 · 2 评论 -
OpenGL测试总结
在光栅化阶段(包括纹理和雾)之后,数据就不再是像素,而是成为片断。每个片断都具有与像素对应的坐标数据以及颜色值和深度值,然后,每个片断都经历一系列的测试和操作。如果顺利通过这些测试和操作,片断值便可以转换为像素。为了绘制这些像素,我们需要知道它们的颜色(即存储在颜色缓冲区中的信息)。当每个像素的数据按照统一的方式存储时,存储所有像素的存储空间就叫做缓冲区。不同的缓冲区为每个像素存储的数据量可能不同转载 2016-11-04 15:09:38 · 940 阅读 · 0 评论 -
OpenGL缓冲区总结
帧缓冲区 几乎每个图形程序的重要目标之一都是在屏幕上绘制图形。屏幕是由一个矩形像素数组组成的,每个像素都可以在图像的某一个点上显示一个某种颜色的微小方块。在光栅化阶段(包括纹理和雾)之后,数据就不再是像素,而是片段。每个片段都具有与像素对应的坐标数据以及颜色值和深度值。 如果顺利通过了这些测试和操作,片段值便可以转换为像素。 如果顺利通过了这些测试和操作,片段值便可以转换为像素。为了绘转载 2016-11-04 15:05:40 · 2395 阅读 · 0 评论 -
OpenGL程序:可变大小窗口的正方形
//GLRect.c#include #include #include#includevoid RenderScene(void){glClear(GL_COLOR_BUFFER_BIT);glColor3f(1.0f, 0.0f, 0.0f); //绘图使用的颜色glRectf(100.0f, 150原创 2016-11-04 09:38:20 · 511 阅读 · 0 评论 -
OpenGL程序:绘制正方形和三角形
先上代码:#include#include void display(){ glClearColor(0.0, 0.0, 0.0, 0.0); glClear(GL_COLOR_BUFFER_BIT); glColor4f(1.0, 0.0, 0.0, 1.0); glBegin(GL_QUADS); g原创 2016-11-03 19:17:52 · 2010 阅读 · 0 评论 -
OpenGL深度测试
openGL里常出现深度测试,一直不清楚。今天就来弄清楚。 (1)什么是深度? 深度其实就是该象素点在3d世界中距离摄象机的距离(绘制坐标),深度缓存中存储着每个象素点(绘制在屏幕上的)的深度值! 深度值(Z值)越大,则离摄像机越远。 深度值是存贮在深度缓存里面的,我们用深度缓存的位数来衡量深度缓存的精度。深度缓存位数越高,则精确度越高,目前转载 2016-11-03 21:33:54 · 246 阅读 · 0 评论 -
OpenGl面试题(持续更新)
1.什么是model,view,project矩阵?世界矩阵(World Matrix)、视图矩阵(View Matrix)以及投影矩阵(Projection Matirx); 世界矩阵确定一个统一的世界坐标,用于组织独立的物体形成一个完整的场景; 视图矩阵就是我们能看到的那部分场景,由虚拟摄像机负责拍摄; 投影矩阵就是3维物体的平面影射.把三维场景在一个二维的平面上显示.原创 2016-11-03 20:49:13 · 9778 阅读 · 0 评论 -
OpenGL系列1:OpenGL概述
网上看到了一些好文章,接下来全都转自 http://blog.csdn.net/u012501459/article/details/12945139 系列的,这对于刚入门的我来说,是很好的资料,计划周日前消化完,为图形学打点基础。介绍状态机glBegin()和glEnd()glFlush()和glFinish() OpenGL介绍 OpenGL是一种图转载 2016-11-03 20:16:22 · 386 阅读 · 0 评论 -
OpenGL程序:移动的正方形
#include#include#include#include GLfloat x1 = 100.0f; //指定正方形的位置和大小GLfloat y1 = 150.0f;GLsizei size = 50;GLfloat xstep = 5.0f; //正方形运动变化的步长(每次变化1)GLfloat ystep = 5.0f;GLfloa原创 2016-11-04 18:11:15 · 1034 阅读 · 0 评论 -
OpenGL程序:使用裁剪框渲染一组三角形
#include#include#include#includevoid RenderScene(void){glClearColor(0.0f, 0.0f, 1.0f, 0.0f); //背景色glClear(GL_COLOR_BUFFER_BIT);glClearColor(1.0f, 0.0f, 0.0f, 0.0f); //外边框的矩形原创 2016-11-07 14:07:47 · 451 阅读 · 0 评论 -
OpenGL混合功能与抗锯齿
swith(value){ case 1: //打开抗锯齿glEnable(GL_BLEND);glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);glEnable(GL_POINT_SMOOTH);glHint(GL_POINT_SMOOTH_HINT, GL_NICEST);glEnable(GL_LINE原创 2016-11-07 14:46:15 · 505 阅读 · 0 评论 -
混合
混合是一种常用的技巧,通常可以用来实现半透明。但其实它也是十分灵活的,你可以通过不同的设置得到不同的混合结果,产生一些有趣或者奇怪的图象。混合是什么呢?混合就是把两种颜色混在一起。具体一点,就是把某一像素位置原来的颜色和将要画上去的颜色,通过某种方式混在一起,从而实现特殊的效果。假设我们需要绘制这样一个场景:透过红色的玻璃去看绿色的物体,那么可以先绘制绿色的物体,再绘制红色玻璃。在绘制红色转载 2016-11-21 16:00:50 · 211 阅读 · 0 评论 -
OpenGL程序:实例练习
说起编程作图,大概还有很多人想起TC的#include 吧?但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640*480分辨率、16色来做吗?显然是不行的。本帖的目的是让大家放弃TC的老旧图形接口,让大家接触一些新事物。OpenGL作为当前主流的图形API之一,它在一些场合具有比DirectX更优越的特性。1、与C语言紧密结合。O转载 2016-11-14 12:09:28 · 16901 阅读 · 3 评论 -
太阳、地球、月亮
void display(void){glEnable(GL_DEPTH_TEST);glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);glMatrixMode(GL_PROJECTION); //定义一个可视空间,其以外的物体不会绘制,实现近大远小的功能glLoadIdentity();glu原创 2016-11-17 09:15:51 · 388 阅读 · 0 评论 -
OpenGL法线
法线前面的教程中我们一直在处理法线,但是并不知道法线到底是什么。##三角形法线一个平面的法线是一个长度为1并且垂直于这个平面的向量。 一个三角形的法线是一个长度为1并且垂直于这个三角形的向量。通过简单地将三角形两条边进行叉乘计算(向量a和b的叉乘结果是一个同时垂直于a和b的向量,还记得吗?),然后归一化:使长度为1。伪代码如下:triangle ( v1, v2,转载 2016-11-11 11:04:35 · 4676 阅读 · 1 评论 -
纹理映射
OpenGl 游戏编程笔记 第七章:纹理映射 (texture mapping) (一)本章你将学到纹理映射基础知识纹理坐标纹理对象及绑定纹理过滤mipmap和自动生成mipmap纹理参数, 外包模式, 细节级别纹理环境和纹理函数Table of Contents1 概述2 预备知识: 纹理坐标3 使用纹理映射3.1 纹理对象3.2 纹理绑定3.3转载 2016-11-10 20:37:13 · 484 阅读 · 0 评论 -
OpenGL缓冲区对象
一:为什么要有opengl缓冲区对象前面的顶点数组使得几何图元的显示方便了很多,但是如果每次都要向OPENGL发送一大块数据,而这数据其实并没有修改过,那么这传输就是冗余的。所以这里添加了缓冲区对象,将顶点数组存储在服务器端的缓冲区对象中。二:如何创建和使用缓冲区对象1.创建缓冲区对象 glGenBuffers():OpenGL分配n个当前未使用的名称(非 0转载 2016-11-10 19:16:47 · 499 阅读 · 0 评论 -
矩阵堆栈
1.原理讲解 终于明白为什么使用glPushMatrix()和glPopMatrix()的原因了。将本次需要执行的缩放、平移等操作放在glPushMatrix和glPopMatrix之间。glPushMatrix()和glPopMatrix()的配对使用可以消除上一次的变换对本次变换的影响。使本次变换是以世界坐标系的原点为参考点进行。下面对上述结论做进一步的解释:1)OpenGL中转载 2016-11-09 20:18:06 · 1171 阅读 · 0 评论 -
视图变换和模型变换/投影变换/视口变换
视图变换,是指变换照相机的位置,角度。 模型变换,是指变换被照物体的位置,角度。这两个变换,都会影响最终图形中,物体的位置,角度。而这两个变换,可以达到相同的效果。比如,你想要一个倒着的水杯图形,可以把你自己倒立,这样看到的水杯就是倒立的了。或者把水杯倒立,自己直立,也能看到倒立的水杯。 如图所示,这两种变换,可以看做达到目的的不同途径。甚至可以同时使用视图变换和模型变换,只转载 2016-11-09 18:25:11 · 1917 阅读 · 0 评论