OpenGL笔记
先锋小牛
这个作者很懒,什么都没留下…
展开
-
OpenGL编译着色器程序
编译着色器程序由于着色器是在GPU中执行,因此想要使用写好的着色器,必须使用特定的编译器来解析数据,编译代码,生成可执行程序。在OpenGL调用相关的API就可以实现。流程如下: 相关API如下GLuint glCreateShader(GLenum type)功 能:创建着色器对象返回值:一个非0整数,如果是0则说明发送了错误参 数:顶点着色器原创 2017-12-12 18:41:11 · 1782 阅读 · 0 评论 -
OPenGL--几何着色器的应用(多视口输出)
简述在OpenGL中,可以将一个物体的渲染结果输出到不同的帧缓冲区域,实现多个的视口效果,着色器中提供了一个内置的输出变量gl_ViewportIndex来重定向输出,它的值也可以作为片元着色器的输入使用。多视口在三维建模软件中比较常见,如3DMAX。在OpenGL应用程序中可以通过glViewportIndexedf()或glViewportIndexedfv()函数来设置,可以指定剪切坐标窗口...原创 2018-05-08 17:20:03 · 1879 阅读 · 2 评论 -
OpenGL读取帧缓存数据
简述有些时候我们可能需要获取渲染后的图像数据,比较常用的函数是glReadPixels,它可以直接把显存中的数据拷贝到内存中glReadPixels读取帧缓存数据void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels)功 能:读取帧缓...原创 2018-05-09 12:43:01 · 8647 阅读 · 1 评论 -
OPenGL点精灵
简述点精灵使使用片元着色器渲染的OpenGL点。运行的时候需要考虑点内的片元坐标,这个坐标由内置的两维向量gl_PointCoord保存,这个变量最常见的作用是当作纹理坐标使用或者用于计算颜色和覆盖率。 给点精灵贴上纹理在OpenGL绘制的点,只有一个位置坐标。如果要给一个点贴上纹理,则需要使用内置变量gl_PointCoord来查询纹理中的纹素,这样就可以生成一个带纹理的点精灵了原创 2018-01-19 19:11:35 · 2672 阅读 · 0 评论 -
OPenGL--几何着色器基础入门
简述几何着色器在渲染管道中几何着色器位于片段着色之前,它接收的是一系列顶点组成的图元,并且以数组的形式输入。基本的几何着色器#version 330 core//设置输入的图元类型为三角形layout (triangles) in;//设置输出的图元类型为三角形带,产生的最大顶点个数为3layout (triangles_strip, max_vertces =原创 2017-12-27 18:57:38 · 949 阅读 · 0 评论 -
OPenGL--几何着色器的应用(多实例绘制)
简述多实例渲染是一种连续执行多次相同的渲染命令的方法,并且每个渲染命令所产生的结果都会有轻微的差异。这是一种使用少量API来渲染大量几何体的有效方法。当一个模型需要创建多个实例时,一般地可以在程序中循环调用glDrawArrays()函数完成多次绘制,这样,顶点着色器对每次输入的顶点运行一次,就会从内存中重复提取一次的数据,绘制多次相当于多次运行OPenGL整个管线。给GPU造成了潜在的处原创 2017-12-29 15:37:41 · 2608 阅读 · 0 评论 -
OPenGL--几何着色器的应用(法线向量可视化)
简述几何着色器可以多次调用EmitVertex()输出多种数量的图元,它产生的输出图元比输入的图元更多,这种方法叫扩充。使用这种方法可以显示任意物体顶点的法线向量。首先需要创建两个着色器程序,一个不适应几何着色器正常绘制物体,另一个通过几何着色器生成法线向量,然后输出直线(法线向量)。顶点着色器在顶点着色器中可以得到模型每个顶点的法线向量,为了适配模型缩放和旋转,我们在将法线变换到裁剪原创 2017-12-27 19:12:54 · 2046 阅读 · 0 评论 -
OpenGL缓存及片元的测试和操作
基本颜色理论OpenGL支持的大多数显示设备都会使用一种组合三原色的方法来构成颜色值,三原色就是红色,绿色和蓝色。我们将其称为RGB颜色空间,并且使用这三个颜色值来表达每一种颜色,通常还会在增加第四个alpha分量(透明度),因此也可以称为RGBA颜色空间。在计算机中每个分量的值都是使用一定数量的位来保存。在RGB颜色空间中红色,绿色和蓝色分量都占用了8个比特位,因此得到一个24位的颜色缓原创 2017-12-12 18:18:48 · 934 阅读 · 0 评论 -
OPenGL--GLSL基础
着色器与OpenGL现代OpenGL渲染管线严重依赖着色器来处理出入的数据,如果不使用着色器,那么OpenGL可以处理的事情可能只有清除窗口了,可见着色器对OpenGL的重要性。在3.0版本(含3.0)以前,如果用到了兼容模式环境,OpenGL还包含一个固定渲染管线,可以在不使用着色器的情况下处理几何与像素数据。自从3.1版本开始,固定渲染管线从核心模式中去除,因此必须使用着色器来完成工作。原创 2017-12-11 18:37:06 · 3071 阅读 · 0 评论 -
OpenGL绘制方式详解
简述OpenGL绘制方式OpenGL可以支持很多不同的图元类型,最基础的为点,线,或三角形。线和三角形可以组合成条带,循环体或者扇面三角形。点,线,或三角形也是大部分图象硬件设备支持的基础图元类型。 点点可以通过单一的顶点来表示,点实际上不存在面积,在OpenGL中它通过屏幕上的一个矩形区域来模拟,在渲染点源的时候,OpenGL会通过光栅化规则类判断点的位置。以点位中心绘制一个原创 2017-12-29 16:27:57 · 5342 阅读 · 2 评论 -
OpenGL帧缓存
简述一般在OpenGL环境搭建过程中,窗口系统会创建一个默认的帧缓存,这个帧缓存是唯一可以被图形服务器的显示系统所识别的帧缓存,所以应用程序自定义的帧缓存只能用于离屏渲染的场合。帧缓存不会直接存储渲染数据,必须将渲染的结果保存到一些附件中(颜色,深度和模板)。窗口系统的帧缓存在创建之初就有自己的缓存附件,自定义的帧缓存对象还需要手动添加这些附件。帧缓存的内存模型如下:红色区域就是实际存储数据的内存...原创 2017-12-29 16:05:49 · 4064 阅读 · 2 评论 -
OPenGL--Transform feedback示例解析
简述英文地址https://open.gl/feedback到目前为止,我们总是将顶点数据发送到图形处理器,并且只在帧缓存中生成绘制的像素。如果我们想要在经过顶点着色器或几何着色器之后捕获这些顶点呢?在这一章中,我们将探讨一种方法,即transform feedback。到目前为止,我们已经使用了VBO(顶点缓冲区对象)来存储用于绘制操作的顶点。Transform feedback翻译 2018-01-12 10:41:45 · 9076 阅读 · 1 评论 -
OPenGL--Transform feedback基础
简述TransformFeedback是OpenGL管线中,顶点处理(如果有几何着色器,那么就在几何着色器后)之后,图元装配之前的一个步骤。它可以重新捕获即将装配为图元(点,线段,三角形)的顶点,然后将部分或全部属性传递到缓存对象上来。每当一个顶点传递到图元装配阶段时,将所有需要捕获的属性记录到一个或多个缓存对象上,用户程序可以回读这些缓存对象的内容。根据这个特性,它和顶点着色器可以组原创 2018-01-11 18:32:40 · 1149 阅读 · 0 评论 -
OPenGL纹理基础
简述纹理是一个2D/1D/3D图片,可以更加逼真的描述物体,把一张砖的图片贴合到3d的房子上,这样房子看起来就像有砖墙了。OpenGL支持多类型多维数的纹理对象,每个纹理对象表示一组可以组成纹理的一组图象,纹理可以包括1维,2维或多维的数组,称为纹理数组。 纹理环绕方式纹理坐标的范围通常是0倒1,如果超出后,可以设置不同的环绕方式处理。环绕方式原创 2018-01-02 19:26:16 · 906 阅读 · 0 评论 -
OpenGL缓存数据
简述缓存对象(buffer object)在OpenGL中十分重要,几乎所有的功能都需要用到它。常见操作包括它的创建,数据的输入, 数据的输出,销毁。 创建在OPenGL中可以使用函数glGenBuffers()来创建缓存对象,调用之后只是得到了一个缓存对象名称的数组,这些名称只是个标记,并不是真正的缓存对象,需要绑定到OPenGL系统中才会创建出来,可以调用函数glBindVe原创 2017-12-29 16:34:45 · 3222 阅读 · 1 评论 -
OpenGL图形渲染管线图解
一,概述当前OpenGL的版本为3.3,基于可渲染管线,实现模型生成,渲染,图像输出等工作。可渲染管线就是把三维顶点进过一系列加工编程二维的离散的像素点。并且用户可以在特定着色阶段自由配置(如在顶点着色和片段着色阶段,这也是和固定流水线最大的不同)。可渲染管线简要流程如下图所示。二,详细流程上图所示基本上是正确的,但不太直观,一个三维顶点怎么变换成像素的呢?我把它分为两大步原创 2017-11-24 19:19:58 · 8293 阅读 · 1 评论 -
OpenGL环境配置(基于Qt窗口)
一,简述 OPenGL的环境配置由很多种,这儿使用的环境就是glfw和glad组合。选择Qt来作为界面库使用。二,环境版本vs2013 + Qt5.5 + OpenGL3.3三,方法 和一般的环境配置一样,也需要一个三维绘图窗口和一个用于管理函数指针的库,在Qt中对应的就是两个类QOpenGLWidget和QOpenGLFunctions,只需要继承他们就可以了。cla...原创 2017-11-24 18:25:59 · 5293 阅读 · 3 评论 -
Direct3D11程序框架搭建
简述以简单直观的方式搭建Direct3D11程序框架,其中包含了顶点缓存,索引缓存,顶点着色器,像素着色器,变换矩阵等基本的功能,在此基础上学习Direct3D11和HLSL。简要流程程序主实现了窗口的创建,D3D中设备,缓存等一些东西的初始化,并在事件循环中进行渲染,渲染结束后释放资源。程序以C语言风格编写,总共有6个函数,六大步骤。(1)Windows窗口的创建,程序入口函数...原创 2018-05-16 22:11:08 · 1684 阅读 · 0 评论