OpenGL OpenCV学习记录
学习记录
奋起无痕
这个作者很懒,什么都没留下…
展开
-
OpenGL 阴影贴图技术帖子汇总
阴影贴图原理 渲染点光源阴影深度缓存绘制点光源阴影模板阴影体基于 PCF 的阴影优化点光源的多通道阴影映射方向光阴影绘制方向光阴影优化 CSM原创 2020-12-19 11:21:14 · 238 阅读 · 1 评论 -
OpenGL 延迟渲染 正面、背面剔除
在学习延迟渲染光照处理的过程中,突然发觉对OpenGL的正面、背面剔除的理解是错误的。一张纸(一个平面)有两个面(正面,背面),当开启剔除的时候,把这个面绕某一轴旋转,这个面会呈现一隐一现的间隔,好像是把一个面(一个平面的正面或背面)剔除了没有进行渲染,这种理解是错误的,其实是把这整个平面进行了剔除。以画线的形式渲染一个立方体进行验证:1 禁用剔除: glDisable(GL_CULL_FACE); glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);2 剔除正原创 2020-12-13 04:37:08 · 436 阅读 · 0 评论 -
OpenGL vao aos soa
教程链接合理的组织数据结构,减少状态切换,可以提高渲染性能。AOS (Array Of Structure): 把多个模型的数据,以结构体数组的形式,存储在一个 Array Buffer中。SOA (Structure Of Arrays) :把多个模型的数据,组合成数组组成的结构体,分别存储在相应的Buffer中。可以用 glDrawElementsBaseVertex、glDrawElementsInstancedBaseVertex等命令进行渲染。...原创 2020-12-11 07:45:51 · 427 阅读 · 0 评论 -
OpenGL 细分控制着色器执行次数
Tessellation Control Shader细分控制着色器执行模式与大多数其他着色器阶段不同;它与计算着色器最相似。与几何着色器每个调用都可以输出多个图元不同,每个细分控制着色器调用只负责生成输出面片中的单个顶点。对于渲染期间提供的每个面片,将执行n次细分控制着色器调用,其中n是输出面片中的顶点数。因此,如果一个绘制命令绘制了20个面片,并且每个输出有4个顶点,那么总共将有80个单独的细分控制着色器调用。为同一面片提供数据的不同调用是相互连接的。这些调用都共享它们的输出值。它们可以读取同一面原创 2020-12-10 15:16:54 · 516 阅读 · 0 评论 -
OpenGL 拾取
教程地址点击屏蔽,获取点击的图元,并用红色进行渲染。具体的方法:分两步绘制创建一个framebuffer,并链接一个颜色缓存和深度缓存,渲染时颜色缓存中保存的是像素所对应的物体的索引、物体部件的索引和渲染的图元的索引。物体索引和物体部件索引由程序传入着色器。使用深度缓存可以保证颜色缓存中保存的是距离近平面最近的图元的信息。//像素信息结构体 struct PixelInfo { GLuint ObjectID; GLuint DrawID; GLuint PrimID; PixelIn原创 2020-12-09 12:39:41 · 872 阅读 · 0 评论 -
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 · 603 阅读 · 0 评论 -
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 · 896 阅读 · 0 评论 -
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 · 1229 阅读 · 0 评论 -
OpenGL性能优化
记得看过一教程,说CPU的运算能力是由80%的逻辑运算和20%的数学运算组成,而GPU恰恰是相反的,GPU是为了数字运算而设计的,所以在编写运行在GPU上的shader程序时,要尽量少用判断语句。下面附上一篇很好的文章,讲了如何优化判断语句(https://cloud.tencent.com/developer/article/1370101)。使用VAO、VBO。设置顶点属性的时候,一定不要...原创 2020-04-18 09:56:53 · 2899 阅读 · 0 评论 -
OpenGL聚光灯实现注解
#version 430 coreuniform vec4 Ambient; //环境光uniform vec3 LightColor; //聚光灯颜色 uniform vec3 LightPosition; //聚光灯位置uniform vec3 SoptDirection; //聚光灯中心灯光方向uniform float SoptCosCutoff; //聚光灯范围...原创 2020-04-17 13:16:27 · 611 阅读 · 0 评论 -
OpenGL 点光源与方向光
点光源是光源的位置,方向光是光源的方向。也就是说在处理的时候,点光源需要用光源位置减去顶点或片元的位置,求出一个指向光源的方向;而方向光直接使用就可以了,它就是一个指向光源的方向,对所有的顶点或片元来说都是一样的。...原创 2020-04-17 10:12:44 · 830 阅读 · 1 评论 -
OpenGL视口与帧缓存
绘制的物体最终显示在窗口上,需要创建一个视口,视口规定了窗口的一个显示范围。物体绘制到帧缓存上,也需要设置一个视口。突发奇想,设置视口和帧缓存图片大小的关系,再把帧缓存图片贴到窗口上测试一下。 glGenTextures(1, &depth_tex); glBindTexture(GL_TEXTURE_2D, depth_tex); glTexImage2D(GL_...原创 2020-04-17 06:37:56 · 354 阅读 · 0 评论 -
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 · 309 阅读 · 0 评论 -
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 · 280 阅读 · 0 评论 -
OpenGL原子操作
关于原子操作,不是先看一下OpenGL编程指南中的描述:关于书中的描述个人的理解是:比如原先的操作是取出内存中的数,对数值进行操作,然后写回内存,在这一系列的操作的过程中,一个的线程可能在另一个线程写回内存之前对内存进行了读取,这样它读取的数值是不正确的。原子操作把这一系列的操作作为一个整体,就相当于瞬时完成了一系列的操作,一个线程操作的同时,别的线程没法在一个整体当中插入进来。但是多个线程可...原创 2020-04-15 09:34:14 · 727 阅读 · 0 评论 -
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 · 381 阅读 · 0 评论 -
OpenGL计算着色器内置变量gl_GlobalInvocationID
OpenGL计算着色器内置变量有以下几个,先上个图看下Opengl编程指南里面的描述。gl_GlobalInvocationID是当前执行单元在全局工作组中的位置的一种有效的三维索引,它的准确值是gl_WorkGroupID*gl_WorkGroupSize+gl_LocalInvocationID。在看一下在OpenGL编程指南里关于这个变量的使用:#version 430 corel...原创 2020-04-15 05:55:20 · 4697 阅读 · 0 评论 -
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 · 1023 阅读 · 0 评论 -
OpenGL几何着色器的几种用法
https://blog.csdn.net/wlk1229/article/details/81838570转载 2020-04-11 14:28:58 · 443 阅读 · 0 评论 -
openGL裁减和剪切及片元测试
OpenGL会自动根据视口和近平面与远平面的设置来裁减和剪切几何体,发生在图元装配之后,光栅化之前,剔除的是图元。光栅化生成的片元进入到帧缓存之前需要经过完整的测试过程:剪切测试多重采样的片元操作模板测试深度测试融混逻辑操作...原创 2020-04-10 13:13:11 · 350 阅读 · 0 评论 -
glActiveTexture、glBindTexture、glUniform1i的绑定关系
下面两段代码的效果是一样的 glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, textureID); glUseProgram(myTexturedIdentityShader); GLint iTextureUniform = glGetUniformLocation(myTexturedIdentityS...原创 2020-04-10 12:09:00 · 1103 阅读 · 0 评论 -
openGL学习:模板测试里的深度比较
网上搜集了下模板测试的知识,有些都实现了很棒的效果,但大都没有介绍glStencilOp函数里的深度测试情况,这里修改编程宝典里的代码测试下。先看看OpenGL编程指南里glStencilOp/glStencilOpSeparate函数的介绍:下面开始进行测试修改:1 没有模板测试的效果图:2.使用模板测试代码: //绘制正文体 glPolygonMode(GL_FRONT_AN...原创 2020-04-09 16:00:05 · 230 阅读 · 0 评论 -
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 · 202 阅读 · 0 评论 -
OpenGL 地图 LOD Tessellation
教程链接一个3D模型可能包含成千上万个顶点,当这个模型离摄像机很远时,模型的细节在屏幕上并不能很好的呈现出来,这时再一一计算模型的顶点进行渲染会造成很大的计算资源的浪费。利用细分着色器的特性,可以很好的避免这种情况。只需要提供一个相对粗糙的模型,使用细分着色器根据模型与摄像机的距离,对模型的patch进行一一细分,再提供一个高度图,对细分的坐标进行偏移。 //细分控制着色器 //世界坐标,计算顶点与摄像机的距离 float EyeToVertexDis原创 2020-12-10 06:15:47 · 843 阅读 · 1 评论 -
opencv medianBlur均值滤波
关于medianBlur的介绍,网上有很多很好的文章,本文主要是自己的测试。中值滤波(Median filter)是一种典型的非线性滤波技术,基本思想是用像素点邻域灰度值的中值来代替该像素点的灰度值,该方法在去除脉冲噪声、椒盐噪声的同时又能保留图像边缘细节.medianBlur采用的不是默认的边缘填充,而是用BORDER_REPLICATE方式进行的填充。#include <opencv2/opencv.hpp>#include <iostream>using namesp原创 2020-09-01 12:19:07 · 879 阅读 · 0 评论 -
OpenCV灰度图
什么是灰度图:百度百科什么是灰度图原创 2020-07-28 14:58:37 · 1961 阅读 · 0 评论 -
OpenCV方差
什么是方差: 方差是各个数据与其算术平均数的离差平方和的平均数 [百度百科](https://baike.baidu.com/item/%E6%96%B9%E5%B7%AE)原创 2020-04-29 06:05:22 · 1134 阅读 · 0 评论