OpenGL
文章平均质量分 87
莫之
不努力奔跑,怎么能停在原地
展开
-
Unity Shader之模板测试 原理与应用
一、认识模板测试模板测试是在逐片元测试几个阶段中的第一个阶段,它是在深度测试和融混之前的;在平时,我们可能会接触深度测试比较多一点,所以接下来在认识模板测试的时候,经常会与深度测试做比较,以辅助大家来理解模板测试;首先,想要进行模板测试,就需要有一个缓冲区,这个缓冲区就是模板缓冲;只有在建立一个窗口过程中预先请求模板缓冲,才能够进行模板测试,如果没有模板缓冲,则默认通过模板测试;很多窗口库...原创 2020-03-10 02:33:36 · 2242 阅读 · 0 评论 -
GLSL之变量类型
前言:GLSL是OpenGL Shading Language的缩写,意为OpenGL着色器语言。在学习着色器语言之前,首先要了解OpenGL的渲染管线(网上很多资料),这里不作赘述,本文将会详细介绍glsl中的各种变量的类型以及变量基本操作。一、使用glsl构建着色器GLSL具备了C++和Java的很多语言特性,这些特性后面会提到。创建一个着色器程序很简单,如下所示:#vers...原创 2019-04-10 23:30:51 · 3960 阅读 · 0 评论 -
GLSL之Uniform限制符
前言:本文的主要内容是对存储限制符Uniform进行详细介绍,包括基本概念以及具体使用。一、uniform限定符特性介绍uniform修饰的变量为用户传递给着色器的数据,它在所有可用的着色阶段都是不变的,它必须定义为全局变量,并且存储在程序对象(Program Object)中。uniform可以修饰任意类型以及任意类型的聚合类型,包括结构体、数组和不透明类型等。在着色器中,无...原创 2019-04-12 15:52:58 · 4939 阅读 · 0 评论 -
OpenGL Context(渲染上下文)及状态值查询
前言:对于刚刚接触OpenGL的同学来说,如果不能够很好的了解OpenGL基本的工作机制,那么即使能够在一个窗口中绘制一个三角形,也无法理清代码的运行原理,当遇到更加复杂的工程时,整个思绪就会更加混乱。本文主要介绍的是OpenGL的Context,也就是上下文,它可以帮助我们更好的理清整个OpenGL图形库到底是如何协调工作的。一、状态机OpenGL是一个状态机,它拥有非常多的状态变量...原创 2019-04-16 16:54:29 · 9551 阅读 · 0 评论 -
计算机图形渲染中的光栅化规则
光栅化规则光栅化规则定义矢量数据如何映射到光栅数据。 光栅数据将贴靠到随后会被剔除和剪裁的整数位置(目的是绘制最低数量的像素),并且每像素属性在传递到像素着色器之前会被内插(从每顶点属性)。存在几种类型的规则,这些规则依赖于正在映射的基元的类型以及数据是否使用多重采样来减少失真。 以下各个图示展示了如何处理极端情况。三角形光栅化规则(未使用多重采样)落到三角形内的任何像素中心都会被...转载 2019-04-24 17:33:45 · 1102 阅读 · 0 评论 -
理解GPU渲染管线
0.本文详细描述GPU是如何实现概念阶段的后两个阶段几何阶段和光栅化阶段可以分成若干个更小的流水线阶段,这些流水线阶段由GPU来实现,每个阶段GPU提供了不同的可配置性或可编程性。下面的知识点会涉及到一些基础的词汇概念,大家不明白的可以参考这篇文章:https://blog.csdn.net/u014800094/article/details/530358891.顶点着色器(可编程)...原创 2018-07-18 11:34:29 · 1288 阅读 · 0 评论 -
Unity Cull 背面剔除
本文主要是自己对面剔除的一些理解和感悟,如有理解不当的地方,欢迎交流指正一、基本概念介绍面剔除就是指检查一个面相对于摄像机也就是观察者的朝向是顺时针还是逆时针,以三角形举例,如果一个三角形我们从正面看它是顺时针,那么背面就是逆时针,以此来区分正面和被面。在unity里默认的就是背面剔除,比如一个平面,添加了标准材质后它只有正面可以看到,背面则观察不到;(以立方体为例,立方体的每个面都是...原创 2019-07-24 23:53:12 · 10098 阅读 · 2 评论 -
关闭深度测试的渲染规则
一、问题提出这是一个立方体在关闭了剔除(Unity背面剔除)和深度写入后的呈现效果,由于关闭了深度测试后不用再比较深度信息,所以就不清楚颜色信息到底是如何进行处理的。二、基元的绘制顺序每一个立方体有多个面,每个面的片元绘制顺序是由该面的顶点数据在几何模型中的顺序决定的,也就是在渲染管线中的几何阶段准备顶点数据传入GPU时,会有一个图元的顺序,比如一个立方体有12个三角形,就要依次准...原创 2019-07-25 12:18:07 · 1553 阅读 · 0 评论 -
OpenGL与显卡驱动
一、OpenGL是什么在开始这段旅程之前我们先了解一下OpenGL到底是什么。一般它被认为是一个API(Application Programming Interface, 应用程序编程接口),包含了一系列可以操作图形、图像的函数。然而,OpenGL本身并不是一个API,它仅仅是一个由Khronos组织制定并维护的规范(Specification)。如果没有图形编程接口,我们要访问GPU,就需...原创 2019-08-11 14:38:34 · 13185 阅读 · 0 评论 -
Unity Shader中的阴影渲染 理论与实践
前言:表面遮挡住光源路径就会产生阴影,由理想点光源产生的阴影边缘是比较锐利的,而现实世界中的阴影边缘确是模糊的,该模糊部分成为半影。半影的出现,是由于现实世界的点光源不是空间意义上的一个点,它会覆盖一定的面积,就会产生以不同角度掠过物体边缘的光线。在阴影的渲染技术中,通常都会把物体分为三个类别:投射阴影的物体,接收阴影的物体以及完全被阴影渲染忽略的物体。同时光源也可以被设置成产生阴影的和不...原创 2019-01-25 15:18:22 · 5156 阅读 · 4 评论 -
渲染管线的三个概念阶段
一.渲染管线,也称为渲染流水线渲染流水线可以分为三个概念性阶段:应用阶段,几何阶段,光栅化阶段。游戏场景中的物体渲染都是基于可编程流水线实现的,其实就是把绘制的3D物体通过可编程流水线绘制在2D的屏幕上的过程。什么是渲染(Rendering)渲染简单的理解可能可以是这样:就是将三维物体或三维场景的描述转化为一幅二维图像,生成的二维图像能很好的反应三维物体或三维场景二.三个阶段1...原创 2018-07-18 11:34:18 · 7230 阅读 · 0 评论 -
OpenGL标准库及安装
一.介绍有一些库已经提供了我们所需的功能,其中一部分是特别针对OpenGL的。这些库节省了我们书写操作系统相关代码的时间,提供给我们一个窗口和上下文用来渲染。最流行的几个库有GLUT,SDL,SFML和GLFW。OpenGL函数库相关的API有核心库(gl)、实用库(glu)、辅助库(aux)、实用工具库(glut)、窗口库(glx、agl、wgl)和扩展函数库等。从图1可以看出,gl是核心...原创 2018-12-19 16:54:13 · 12274 阅读 · 1 评论 -
GLFW入门教程
前言本文章是总结了自己在学习OpenGL的glfw库时的一些理解,主要参考了glfw的官方文档及教程,以及OpenGL教程,作者也是新手,有理解偏差的地方还请大家指正和谅解。一.简单窗口的创建包含头文件#include <GLFW/glfw3.h>这里定义了glfw库所有的常量、类型以及函数原型,包含了glfw后,就不需要再包含opengl头文件,也不需要包含&l...原创 2018-12-20 00:14:18 · 19425 阅读 · 4 评论 -
glClear与glClearColor
1.glClear void glClear(GLbitfield mask);官网解释:clear buffers to preset values,用预制的值来清空缓冲区参数:GL_COLOR_BUFFER_BIT,颜色缓冲GL_DEPTH_BUFFER_BIT,深度缓冲GL_STENCIL_BUFFER_BIT,模板缓冲值的预制主要通过glclearcolor,glc...原创 2018-12-20 11:40:58 · 16199 阅读 · 0 评论 -
glGenBuffers与glBindBuffer理解
1.glGenBuffers 官方解释:generate buffer object names意思是该函数用来生成缓冲区对象的名称。函数原型:void glGenBuffers(GLsizei n,GLuint * buffers);第一个参数是要生成的缓冲对象的数量,第二个是要输入用来存储缓冲对象名称的数组该函数会在buffers里返回n个缓冲对象的名称。个人理解如下,可以...原创 2018-12-20 15:22:10 · 34581 阅读 · 19 评论 -
OpenGL VAO和VBO以及EBO的使用
1.VBO 顶点缓冲对象当我们在顶点着色器中把顶点传送到GPU中的时候,不能每个顶点数据传送一次,因为太耗时而且造成资源浪费,所以就要用到缓冲对象,我们把大量的数据存储在GPU内存上,然后一次传输大量数据到显卡上,顶点缓冲对象就是帮助我们来管理GPU内存的。关于顶点的数据是如何传入顶点缓冲对象中的,这个可以参考这篇文章:https://mp.csdn.net/postedit/85123077...原创 2018-12-21 10:15:17 · 1474 阅读 · 1 评论 -
OpenGL着色器
本文主要侧重点在于OpenGL如何加载着色器以及数据的传输机制,而不是讲解顶点着色器和片元着色器的编程。一.着色器的加载首先需要写一段着色器源码,编写一个着色器是一件比较简单的事情,这里随便写个例子,//顶点着色器源码串const char* VertexShaderResource = "#version 330 core\n""layout(location=0) in ve...原创 2018-12-20 22:32:54 · 610 阅读 · 0 评论 -
OpenGL glViewport()函数
1.glViewport() 用来设置视口大小void glViewport(GLint x,GLint y,GLsizei width,GLsizei height);对于一个OpenGL坐标(xnd,ynd),它变换后的坐标为(Xw,Yw),那么变换公式为解释一下这个公式的意义:视口变换也就是glViewport()做的工作,它是把OpenGL的标准化设备坐标转换为屏幕空间坐...原创 2018-12-21 09:44:38 · 7369 阅读 · 0 评论 -
OpenGL纹理、多级渐远纹理
一.基础概念讲解纹理坐标每个顶点都需要知道自己对应着纹理的那个部分,从而可以进行纹理采样,这就是通过为顶点设置纹理坐标来实现的。之后对于图形的其它片段来说,根据片段插值来得到自己的采样坐标。纹理坐标起始于(0,0),在纹理图片的左下角,终于(1,1),纹理图片右上角。那么当我们为顶点指定了纹理坐标的时候,如果不在(0,1)这个范围区间会怎样,这里就需要提到纹理环绕方式了,也就是...原创 2018-12-22 11:15:16 · 2853 阅读 · 0 评论 -
CMake编译Assimp库
vs2017+CMake编译Assimp库1.资源的下载与安装CMake直接到官网下载:下载地址Assimp可以到github上clone下来,github地址,选择第三个VS2017:这个就不用说了吧。。。2.CMake编译Assimp打开CMake,分别选择好相应的文件夹之后,就可以进行第一步点击左下角configure后,会看到弹出下面这个框注意:...原创 2018-12-27 23:27:12 · 9930 阅读 · 7 评论 -
OpenGL 矩阵变换顺序与MVP矩阵变换
一、矩阵变换的顺序对于一个坐标点,一般都是先缩放、后旋转、最后平移,但是变换矩阵是和变量进行右乘的,所以要先计算平移矩阵、再旋转、再计算缩放。这里重点讲述矩阵变换为什么一定要按照缩放、旋转、平移的顺序,不然就会出错。矩阵变换的顺序解释参考:https://blog.csdn.net/pizi0475/article/details/9840921,这篇博客做了一些简单讲述,但是还不...原创 2018-12-24 16:03:14 · 6262 阅读 · 1 评论 -
OpenGL介绍
前言:本文章的内容是基于OpenGL教程做的总结。一.首先要明白OpenGL是什么Opengl不是一个语言,它通常被认为是一个图形接口库,(我一直都是这么理解的),但更准确地说OpenGL本身并不是API,它仅仅是一个规范。OpenGL规范严格规定了每个函数该如何执行,以及它们的输出值。至于内部具体每个函数是如何实现(Implement)的,将由OpenGL库的开发者自行决定,也就是那些开...原创 2018-12-19 16:50:35 · 10982 阅读 · 0 评论