自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 OpenGL 阴影贴图技术帖子汇总

阴影贴图原理 渲染点光源阴影深度缓存绘制点光源阴影模板阴影体基于 PCF 的阴影优化点光源的多通道阴影映射方向光阴影绘制方向光阴影优化 CSM

2020-12-19 11:21:14 178 1

原创 OpenGL 延迟渲染 正面、背面剔除

在学习延迟渲染光照处理的过程中,突然发觉对OpenGL的正面、背面剔除的理解是错误的。一张纸(一个平面)有两个面(正面,背面),当开启剔除的时候,把这个面绕某一轴旋转,这个面会呈现一隐一现的间隔,好像是把一个面(一个平面的正面或背面)剔除了没有进行渲染,这种理解是错误的,其实是把这整个平面进行了剔除。以画线的形式渲染一个立方体进行验证:1 禁用剔除: glDisable(GL_CULL_FACE); glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);2 剔除正

2020-12-13 04:37:08 413

原创 OpenGL vao aos soa

教程链接合理的组织数据结构,减少状态切换,可以提高渲染性能。AOS (Array Of Structure): 把多个模型的数据,以结构体数组的形式,存储在一个 Array Buffer中。SOA (Structure Of Arrays) :把多个模型的数据,组合成数组组成的结构体,分别存储在相应的Buffer中。可以用 glDrawElementsBaseVertex、glDrawElementsInstancedBaseVertex等命令进行渲染。...

2020-12-11 07:45:51 370

原创 OpenGL 细分控制着色器执行次数

Tessellation Control Shader细分控制着色器执行模式与大多数其他着色器阶段不同;它与计算着色器最相似。与几何着色器每个调用都可以输出多个图元不同,每个细分控制着色器调用只负责生成输出面片中的单个顶点。对于渲染期间提供的每个面片,将执行n次细分控制着色器调用,其中n是输出面片中的顶点数。因此,如果一个绘制命令绘制了20个面片,并且每个输出有4个顶点,那么总共将有80个单独的细分控制着色器调用。为同一面片提供数据的不同调用是相互连接的。这些调用都共享它们的输出值。它们可以读取同一面

2020-12-10 15:16:54 438

原创 OpenGL 地图 LOD Tessellation

教程链接一个3D模型可能包含成千上万个顶点,当这个模型离摄像机很远时,模型的细节在屏幕上并不能很好的呈现出来,这时再一一计算模型的顶点进行渲染会造成很大的计算资源的浪费。利用细分着色器的特性,可以很好的避免这种情况。只需要提供一个相对粗糙的模型,使用细分着色器根据模型与摄像机的距离,对模型的patch进行一一细分,再提供一个高度图,对细分的坐标进行偏移。 //细分控制着色器 //世界坐标,计算顶点与摄像机的距离 float EyeToVertexDis

2020-12-10 06:15:47 745 1

原创 OpenGL 拾取

教程地址点击屏蔽,获取点击的图元,并用红色进行渲染。具体的方法:分两步绘制创建一个framebuffer,并链接一个颜色缓存和深度缓存,渲染时颜色缓存中保存的是像素所对应的物体的索引、物体部件的索引和渲染的图元的索引。物体索引和物体部件索引由程序传入着色器。使用深度缓存可以保证颜色缓存中保存的是距离近平面最近的图元的信息。//像素信息结构体 struct PixelInfo { GLuint ObjectID; GLuint DrawID; GLuint PrimID; PixelIn

2020-12-09 12:39:41 805

原创 OpenGL Transform Feedback

官网链接使用TransFrom Feedback捕获图元数据,必须注意的几点:必须在链接着色器之前设置要捕获的输出变量:glTransformFeedbackVaryings顶点着色器、细分着色器、几何着色器的输出变量都可以被捕获,但只有最后一个顶点处理着色器的输出能被捕获。开始捕获时捕获类型的设置:glBeginTransformFeedbackIf a Geometry Shader is active, then it is the primitive type output by

2020-12-04 08:18:38 546

原创 opengl dfdx dfdy

本文是关于偏导数函数dfdx、dfdy的个人实验理解,如有错误,请各位留言指正!参考文档:https://segmentfault.com/a/1190000019681666?utm_source=tag-newesthttps://blog.csdn.net/herramadeus/article/details/21037503个人认为偏导数是一个物体空间坐标与物体所渲染的屏幕坐标的一个比值。请看下面具体的验证。顶点着色器: #version 430 core layout(locati

2020-12-03 13:33:18 706

原创 opencv medianBlur均值滤波

关于medianBlur的介绍,网上有很多很好的文章,本文主要是自己的测试。中值滤波(Median filter)是一种典型的非线性滤波技术,基本思想是用像素点邻域灰度值的中值来代替该像素点的灰度值,该方法在去除脉冲噪声、椒盐噪声的同时又能保留图像边缘细节.medianBlur采用的不是默认的边缘填充,而是用BORDER_REPLICATE方式进行的填充。#include <opencv2/opencv.hpp>#include <iostream>using namesp

2020-09-01 12:19:07 847

原创 OpenCV灰度图

什么是灰度图:百度百科什么是灰度图

2020-07-28 14:58:37 1931

原创 OpenCV方差

什么是方差: 方差是各个数据与其算术平均数的离差平方和的平均数 [百度百科](https://baike.baidu.com/item/%E6%96%B9%E5%B7%AE)

2020-04-29 06:05:22 1057

原创 OpenGL计算着色器工作组设置测试

先看看不同的显卡上工作组的数量情况。 glGetIntegeri_v(GL_MAX_COMPUTE_WORK_GROUP_COUNT, 0, data); glGetIntegeri_v(GL_MAX_COMPUTE_WORK_GROUP_COUNT, 1, data + 1); glGetIntegeri_v(GL_MAX_COMPUTE_WORK_GROUP_COUNT, 2, data...

2020-04-18 17:23:08 1100

原创 OpenGL性能优化

记得看过一教程,说CPU的运算能力是由80%的逻辑运算和20%的数学运算组成,而GPU恰恰是相反的,GPU是为了数字运算而设计的,所以在编写运行在GPU上的shader程序时,要尽量少用判断语句。下面附上一篇很好的文章,讲了如何优化判断语句(https://cloud.tencent.com/developer/article/1370101)。使用VAO、VBO。设置顶点属性的时候,一定不要...

2020-04-18 09:56:53 2571

转载 c++多态

编译环境:WIN10 VS2017 这篇博客有点...

2020-04-18 08:32:19 123

原创 OpenGL聚光灯实现注解

#version 430 coreuniform vec4 Ambient; //环境光uniform vec3 LightColor; //聚光灯颜色 uniform vec3 LightPosition; //聚光灯位置uniform vec3 SoptDirection; //聚光灯中心灯光方向uniform float SoptCosCutoff; //聚光灯范围...

2020-04-17 13:16:27 577

原创 OpenGL 点光源与方向光

点光源是光源的位置,方向光是光源的方向。也就是说在处理的时候,点光源需要用光源位置减去顶点或片元的位置,求出一个指向光源的方向;而方向光直接使用就可以了,它就是一个指向光源的方向,对所有的顶点或片元来说都是一样的。...

2020-04-17 10:12:44 770 1

原创 OpenGL视口与帧缓存

绘制的物体最终显示在窗口上,需要创建一个视口,视口规定了窗口的一个显示范围。物体绘制到帧缓存上,也需要设置一个视口。突发奇想,设置视口和帧缓存图片大小的关系,再把帧缓存图片贴到窗口上测试一下。 glGenTextures(1, &depth_tex); glBindTexture(GL_TEXTURE_2D, depth_tex); glTexImage2D(GL_...

2020-04-17 06:37:56 313

原创 Openg图像缓存及显存布局

继续学习OpenGL编程指南中的示例中,关于其中particleBall示例,记录分享下自己的心得,关于图像缓存及显存布局。程序代码:#include "vgl.h"#include "vmath.h"#include "LoadShaders.h"#include "vbm.h"#include <iostream>using namespace std;GLuin...

2020-04-16 08:48:40 234

原创 OpenGL原子锁

先看一代没有用原子锁的代码及输出:#include "vgl.h"#include "vmath.h"#include "LoadShaders.h"#include "vbm.h"#include <iostream>using namespace std;GLuint vbo;GLuint ProgCompure;GLuint tex;void init(...

2020-04-15 13:08:15 247

原创 OpenGL原子操作

关于原子操作,不是先看一下OpenGL编程指南中的描述:关于书中的描述个人的理解是:比如原先的操作是取出内存中的数,对数值进行操作,然后写回内存,在这一系列的操作的过程中,一个的线程可能在另一个线程写回内存之前对内存进行了读取,这样它读取的数值是不正确的。原子操作把这一系列的操作作为一个整体,就相当于瞬时完成了一系列的操作,一个线程操作的同时,别的线程没法在一个整体当中插入进来。但是多个线程可...

2020-04-15 09:34:14 631

原创 OpenGL计算着色器多维工作组获取正确的索引

#include "vgl.h"#include "vmath.h"#include "LoadShaders.h"#include "vbm.h"#include <iostream>using namespace std;GLuint vbo[2];GLuint ProgCompure;void init(){ glGenBuffers(2, ...

2020-04-15 08:40:48 345

原创 OpenGL计算着色器内置变量gl_GlobalInvocationID

OpenGL计算着色器内置变量有以下几个,先上个图看下Opengl编程指南里面的描述。gl_GlobalInvocationID是当前执行单元在全局工作组中的位置的一种有效的三维索引,它的准确值是gl_WorkGroupID*gl_WorkGroupSize+gl_LocalInvocationID。在看一下在OpenGL编程指南里关于这个变量的使用:#version 430 corel...

2020-04-15 05:55:20 4195

原创 OpenGL细分计算着色器内置变量gl_TessCoord

OPenGL编程指南中关于gl_TessCoord的描述:细分计算着色器中,细分顶点坐标的计算都要用到gl_TessCoord,在计算时gl_TessCoord的值到底是什么?会有什么变化?测试输出下。#include "vgl.h"#include "vmath.h"#include "LoadShaders.h"#include <iostream>using na...

2020-04-14 17:52:55 925

转载 OpenGL几何着色器的几种用法

https://blog.csdn.net/wlk1229/article/details/81838570

2020-04-11 14:28:58 393

原创 OpenGL:gl_ClipDistance和gl_CullDiatance

学到了OpenGL中的用户裁剪和前剪切,记录下gl_ClipDistance和gl_CullDiatance的用法。gl_ClipDiatance:输出的裁剪距离将和图元进行线性插值,插值距离小于0,则图元部分将剪切掉。gl_CullDiatance:如果图元的所有顶点对于平面都返回了负数的裁减距离值,那么图元需要被裁减。用OpenGL编程指南中的代码修改测试下:#include <...

2020-04-10 15:51:40 2708

原创 openGL裁减和剪切及片元测试

OpenGL会自动根据视口和近平面与远平面的设置来裁减和剪切几何体,发生在图元装配之后,光栅化之前,剔除的是图元。光栅化生成的片元进入到帧缓存之前需要经过完整的测试过程:剪切测试多重采样的片元操作模板测试深度测试融混逻辑操作...

2020-04-10 13:13:11 295

原创 glActiveTexture、glBindTexture、glUniform1i的绑定关系

下面两段代码的效果是一样的 glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, textureID); glUseProgram(myTexturedIdentityShader); GLint iTextureUniform = glGetUniformLocation(myTexturedIdentityS...

2020-04-10 12:09:00 1036

原创 openGL学习:模板测试里的深度比较

网上搜集了下模板测试的知识,有些都实现了很棒的效果,但大都没有介绍glStencilOp函数里的深度测试情况,这里修改编程宝典里的代码测试下。先看看OpenGL编程指南里glStencilOp/glStencilOpSeparate函数的介绍:下面开始进行测试修改:1 没有模板测试的效果图:2.使用模板测试代码: //绘制正文体 glPolygonMode(GL_FRONT_AN...

2020-04-09 16:00:05 185

原创 openGL阴影绘制坐标转换

在学习阴影绘制的过程中,碰到这么一段代码: CELL::matrix4 matBias = CELL::matrix4(0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 0.5f, 0.0f, 0.5f, 0.5f, 0.5f, 1.0f); CELL::matrix4 matShadow = ...

2020-04-09 07:34:49 177

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除