自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

两水先木示的博客

记载的不仅仅是知识,还有当年的回忆

  • 博客(36)
  • 资源 (1)
  • 收藏
  • 关注

原创 【OpenGL】蓝宝书第十一章——高级着色器应用

高级顶点着色器使用GPU通过变换反馈进行数据再循环,从而实现物理模拟。顶点着色器除了对顶点进行空间转换之外,还能够在一个循环中将结果进行循环传递,并在每一次循环过程中进行迭代和更新。这些数据不必是位置,顶点着色器的结果也不必进行直接渲染。下面将讲解几个示例来说明。在顶点着色器中进行物理模拟建立一个弹簧和物块组成的网状物的物理模拟,每个顶点代表一个重物,与其他4个相邻的重物通过弹性绳进行连接。示例会对顶点进行反复迭代,用一个顶点着色器对每一个顶点进行处理。我们会使用大量高级特性,示例中使用了一个T

2021-04-30 22:40:13 857

原创 【OpenGL】高级片段着色器——discard舍弃片段

在这篇文章基础上进行改进片段着色器代码,效果一样。https://blog.csdn.net/qq_39574690/article/details/116278915// Julia set renderer// Fragment Shader// Graham Sellers// OpenGL SuperBible#version 150precision highp float;out vec4 color;in vec2 initial_z;uniform sampl

2021-04-29 23:47:55 1358

原创 【OpenGL】高级片段着色器——在片段着色器中生成图像数据茹利亚集Julia set

茹利亚集:z(n) = z(n-1)^2 + c , z是顶点纹理坐标,c是统一值,片段着色器会迭代最大max_iterations次,其中若z值大于阈值threshold_squared则跳出,其迭代次数作为一维纹理坐标。// Perspective correction demonstration// Vertex Shader// Graham Sellers// OpenGL SuperBible#version 150precision highp float;// In..

2021-04-29 23:24:49 661

原创 【OpenGL】高级片段着色器——高斯模糊和索贝尔边缘检测

顶点着色器convolve.vs#version 150precision highp float;in vec2 position;out Fragment{ vec2 tex_coord;} fragment;void main(void){ gl_Position = vec4(position, 0.5, 1.0); // This produces a texture coordinate that ranges from (0.0, 0....

2021-04-29 00:42:19 763

原创 【OpenGL】几何着色器——改变图元类型Normals案例

原理:为输入的三角形沿着顶点法线方向形成新的顶点,与原顶点形成线并输出,并且三角形中心点会沿着三角形法线形成线并输出,总共一个三角面会输出8个顶点,即4条线。FlatShader.fs// Normal visualizer// Fragment Shader// Graham Sellers// OpenGL SuperBible#version 150precision highp float;in Fragment{ vec4 color;} fragment..

2021-04-28 00:00:38 482

原创 【OpenGL】几何着色器——生成几何图形Tessellate案例

原理:从正方体的表面对角线生成一个新顶点,表面的2个三角形顶点(a,b,c)与d构成新的三角形带,并且它们顶点与原点的距离是相等的。使用归一化来达到相同距离。FlatShader.fs// Normal visualizer// Fragment Shader// Graham Sellers// OpenGL SuperBible#version 150precision highp float;in Fragment{ vec4 color;} fragment..

2021-04-27 23:43:58 349

原创 【OpenGL】几何着色器——Explode爆炸案例

原理:计算出法线,将顶点沿着法线方向移动自定义距离,其他不变。// Normal visualizer// Fragment Shader// Graham Sellers// OpenGL SuperBible#version 150precision highp float;in Fragment{ vec4 color;} fragment;out vec4 output_color;void main(void){ output_color =..

2021-04-27 23:18:20 581

原创 【OpenGL】几何着色器——Culling裁剪背面片元案例

原理:在几何着色器区分出当前输入三角面是否朝向正面,只有朝向正面的才进行EmitVertex和EndPrimitive,判断方法是求出法线和视角的点积大于0则正面否则反面。// Normal visualizer// Fragment Shader// Graham Sellers// OpenGL SuperBible#version 150precision highp float;in Fragment{ vec4 color;} fragment;out v..

2021-04-27 23:07:45 413

原创 【OpenGL】蓝宝书第十章——片段操作:管线的终点

片段着色器之后的逐片段操作流程对一个虚拟片段进行多重采样操作、模板测试、深度缓冲区测试、混合、抖动和逻辑操作等操作。逐像素操作:输入片段->裁剪测试->多重采样操作->模板测试->深度缓冲测试->混合->逻辑操作->抖动->到帧缓冲区。裁剪——将几何图形剪切到希望的大小决定是否将片段放在一个可渲染区域中裁剪出来的区域中。裁剪操作是在窗口坐标中执行的,即片段有一个(0,0)到(width,height)范围的窗口坐标,其中width和height

2021-04-24 22:52:26 365

原创 【OpenGL】混合操作示例

示例完整:https://blog.csdn.net/qq_39574690/article/details/116070326演示效果:1~7的效果图如下:

2021-04-24 21:47:44 108

原创 【OpenGL】样本遮罩OIT示例——解决透明物体之间的渲染顺序问题

不开启OIT 仅做多重采样混合处理可见,蓝色本应在紫色后面的,但却显示在了紫色前面。(产生半透明物体顺序错乱问题,OpenGL没有Unity一样对半透明物体进行远到近渲染的,但OIT就是从GPU上对物体进行远到近渲染)开启OITOIT个人看法:将场景整个渲染到一个自定义FBO缓冲区对应的2个绑定点贴图 即 多重采样颜色图 和 多重采样深度图 (多重采样是指创建贴图时 采用了GL_TEXTURE_2D_MULTISAMPLE 参数),接着在同一个片段着色器里进行对这2个图采样多次,拿到..

2021-04-23 22:38:27 2247

原创 【OpenGL】多重采样案例MSAA

示例图暂缺(目前运行exe失败,后期补充)本文比较难,个人来说还不是完全弄懂。#version 150 // hdr_bloom.vs// outputs MVP transformed position // passes texture coordinates through// color is * by normal and passed on.in vec3 vVertex;in vec3 vNormal;in vec2 vTexCoord0;uniform mat.

2021-04-19 22:54:21 689

原创 【OpenGL】蓝宝书第九章——高级缓冲区:超越基础水平

获得数据介绍所有新的数据格式和使用方法,并介绍一些用来访问那些将要进行性能优化的缓冲区的重要方法。映射缓冲区在C++中,用glBufferData来进行开辟缓冲区空间和填充内容,如果想修改缓冲区内容,可用glMapBuffer和glMapBufferRange。glMapBufferRange是提供一个指向内存的指针,可用这个指针直接读取或更新某个缓冲区的数据,尽量避免读取和写入同时进行的情况。(注意:修改的是已经在GPU内存中的数据,但不会阻止GPU工作)void *glMapBuffe

2021-04-18 23:12:13 792

原创 【OpenGL】hdr_bloom 泛光示例程序

①HDRFBO分别有2个浮点纹理,其中一个纹理捆绑到第一个颜色缓冲区绑定点,第二个纹理绑定到第二个颜色缓冲区绑定点,它们的内容都交给texReplaceProg着色器(basic.vs、tex_replace.fs)渲染,着色器主要内容就是照常渲染场景输出给第一个颜色缓冲区,而第二个颜色缓冲区内容是视野中明亮区域。具体代码如下:#version 150 // tex_replace.fs// outputs 1 color using texture replace// in vec...

2021-04-18 23:11:32 350

原创 【OpenGL】HDR相关——hdr_imaging示例程序

第一张图是hdr_simple.fs、第二张图是hdr_exposure.fs、第三章图是hdr_adaptive.fs渲染的示例程序从一个浮点纹理读取并写入到一个帧缓冲区对象,在这个缓冲区对象中一个8位纹理被绑定到了第一个渲染目标。这样就允许从HDR到LDR的变换在逐个像素的基础上进行,减少了当一个纹理单元在明亮部分和阴暗部分之间进行插值时出现的修饰痕迹。一旦LDR图像生成,它就会作为一个纹理直接绘制到屏幕上。#version 150 // hdr.fs// Simple tex...

2021-04-18 22:05:26 549

原创 【OpenGL】第九章案例——控制像素着色器表现,映射片段输出

基础案例:https://blog.csdn.net/qq_39574690/article/details/115605165#version 150 // multibuffer_frag_location.fs// outputs to 3 buffers: normal color, greyscale, // and luminance adjusted colorin vec4 vFragColor; in vec2 vTexCoord; uniform int bUs..

2021-04-17 19:37:31 302

原创 【OpenGL】蓝宝书第八章——缓冲区对象:存储尽在掌握

前言缓冲区对象概念允许应用程序方便地将数据从一个渲染管线移动到另一个渲染管线,以及从一个对象绑定到另一个对象,它可以在无需CPU介入情况下完成。帧缓冲区对象能真正让我们控制像素,而不受操作系统环境影响,例如离屏渲染等技巧。可以说片段着色器对哪些像素去哪里有了最终的控制权。缓冲区缓冲区能够保存顶点数据、像素数据、纹理数据、着色器处理的输入或不同着色器阶段的输出等。缓冲区保存在GPU内存中,它们提供高速和高效的访问。在OpenGL有缓冲区对象之前,应用程序只有有限的选择可以在GPU中存储数据。在

2021-04-11 21:44:09 1021

原创 【OpenGL】FBO渲染到纹理案例

1、使用用户FBO通过一系列操作从相对于镜面的反向照相机开始渲染场景地形和旋转中的甜甜圈以及代表反向照相机的蓝色圆筒,将其渲染结果存储到mirrorTexture(FBO映射目标就是GL_COLOR_ATTACHMENT0 这个纹理捆绑点)2、重置FBO后,再次从真正的照相机视角来绘制场景地形和旋转的甜甜圈以及绘制镜面,并镜面会判断照相机是否能看到镜面来决定是否渲染出镜面画面(即mirrorTexture),若无法看到则渲染黑色镜面。需要注意的是,虽然在第一步也渲染了场景,但此时的场景是输出..

2021-04-11 21:43:47 625

原创 【OpenGL】FBO案例

// Multibuffer vs// Vertex Shader// Richard S. Wright Jr.// OpenGL SuperBible#version 330in vec4 vVertex;in vec3 vNormal;in vec4 texCoord0;uniform mat4 mvpMatrix;uniform mat4 mvMatrix;uniform mat4 pMatrix;uniform vec3 vLightPos;uniform vec...

2021-04-11 20:05:03 376

原创 【OpenGL】PBO像素缓冲区对象案例——运动模糊

原理:用PBO进行缓存最后5帧图像并与当前图像混合。关于这篇顶点着色器代码是我自己写的,因为案例不全,bmp图片也没有 故直接用之前的stone.tga加载了。试验结果发现PBO和传统方式的fps差不多一样。。// MoonShader// Vertex Shader// Richard S. Wright Jr.// OpenGL SuperBible#version 150in vec4 vVertex;in vec4 texCoord0;uniform mat4 mvp

2021-04-11 14:00:37 467

原创 【OpenGL】纹理数组案例

在第三章节Smoother示例程序基础上,加多了一个月亮的渲染,它会用29个纹理图经过一定时间切换图片,进行循环播放动画一样。属于第七章内容——高级纹理// TextureArrays.cpp// OpenGL SuperBible// Demonstrates Passing a TextureArray to a shader// Program by Richard S. Wright Jr.#pragma comment(lib, "gltools.lib")#include ...

2021-04-10 22:05:30 375

原创 【Unity3D】Animator组件相关问题

一、无法修改携带Animator组件的物体属性问题1、播放动画状态结束后,如果没有进行任何连线切换到下一个状态了,此时Animator默认会保持这个动画控制过的属性不变的,即不允许修改了。解决方案:将Culling Mode设置为Cull Update Transforms 即剔除更新Transforms属性,即Transforms属性不会被保持不变了。Cull Completely是全部动画控制过的属性都不会去维持不变了。默认是Always Animate 即总是维持在最后一帧的属性。注.

2021-04-10 11:42:06 1643 3

原创 【OpenGL】点精灵案例——模拟宇宙星光(外加点旋转)

在上一个版本基础上,进行了点的旋转,与书籍说的不同我传入的是一个uniform 统一值作为angle。并且去掉了const,因为我在GLSL代码做了一个对angle实时更新操作,故不再是常量,我想矩阵可能会插值 但影响好像没有,除此之外其他地方没啥变化。// SpaceFlight Shader// Vertex Shader// Richard S. Wright Jr.// OpenGL SuperBible#version 330// Incoming per vertex.....

2021-04-09 23:34:02 379 3

原创 【OpenGL】点精灵案例——模拟宇宙星光

glEnable(GL_POINT_SPRITE); //开启点精灵 在书籍上没有提及但代码里写有,可能旧版需要这样做,新版不需要。// SpaceFlight Shader// Vertex Shader// Richard S. Wright Jr.// OpenGL SuperBible#version 130// Incoming per vertex... position and normalin vec4 vVertex;in vec4 vColor;unifo...

2021-04-09 22:06:39 692

原创 【OpenGL】多重纹理案例

代码在立方体案例基础上,使用了第二个纹理进行混合反射球体颜色。主要代码: // Set textures to their texture units glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, tarnishTexture); glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_CUBE_MAP, cubeTexture);当前纹理单元切到第二个纹理单..

2021-04-08 23:48:25 363

原创 【OpenGL】立方体贴图——Cubemap天空盒案例

核心内容:gltMakeCube(cubeBatch, 20.0); //创建一个半径为20个单位长度的立方体批次数据填充到cubeBatch (GLBatch对象)该函数会将2D纹理坐标分配到GLT_ATTRIBUTE_TEXTURE0属性槽,但我们需要的并不是2D纹理坐标,而是3D纹理坐标。3D纹理坐标获取方法是在顶点着色器里直接将归一化的顶点坐标作为输出到片段着色器,此时片段着色器插值得到的顶点坐标就是三维纹理坐标了,接着在片段着色器使用texture(samplerCube纹理对象, 三..

2021-04-08 00:04:54 1049 1

原创 【OpenGL】蓝宝书第七章——纹理高级知识

矩形纹理GL_TEXTURE_1D、GL_TEXTURE_2D、GL_TEXTURE_3D是我们所了解到的纹理目标,而矩形纹理是GL_TEXTURE_RECTANGLE,它与GL_TEXTURE_2D类似,区别在于不能进行Mip贴图,glTexImage2D只能加载第0层,而且纹理坐标并不是在[0,1]范围内的,而是对像素寻址,如(5,19)则代表从左边数起第六列,从上面数起第20行的像素,纹理坐标不能重复且不支持纹理压缩。此种纹理效率更高、支持更好。加载矩形纹理bool LoadTGATex

2021-04-06 23:41:52 606

原创 【OpenGL】7-1矩形纹理案例

// Rectangle Texture (replace) Shader// Vertex Shader// Richard S. Wright Jr.// OpenGL SuperBible#version 140// Incoming per vertex... position and texture coordinatein vec4 vVertex;in vec2 vTexCoord;uniform mat4 mvpMatrix;// Texture Coor...

2021-04-06 23:38:59 281

原创 【OpenGL】卡通着色(Cell Shading)——将纹理单元作为光线

原理就是一维渐变纹理,将漫反射系数作为纹理坐标(x,y)从一维纹理采样得到拥有漫反射因子的光线强度颜色(即颜色带上了漫反射的影响)// Cell lighting Shader// Vertex Shader// Richard S. Wright Jr.// OpenGL SuperBible#version 130// Incoming per vertex... position and normalin vec4 vVertex;in vec3 vNormal;smo...

2021-04-05 14:51:21 461

原创 【OpenGL】丢弃片段——消融案例

// ADS Point lighting Shader// Vertex Shader// Richard S. Wright Jr.// OpenGL SuperBible#version 130// Incoming per vertex... position and normalin vec4 vVertex;in vec3 vNormal;in vec2 vTexCoords0;uniform mat4 mvpMatrix;uniform mat4 mv...

2021-04-05 14:40:50 164

原创 【OpenGL】照亮纹理单元

在ADSPhong着色器基础上进行增加纹理采样,用纹理颜色值乘以光线强度// ADS Point lighting Shader// Vertex Shader// Richard S. Wright Jr.// OpenGL SuperBible#version 130// Incoming per vertex... position and normalin vec4 vVertex;in vec3 vNormal;in vec4 vTexture0;uniform ...

2021-04-05 13:57:26 110

原创 【OpenGL】只有纹理单元TexturedTriangle测试案例

需准备一张.tga纹理// The TexturedIdentity Shader// Vertex Shader// Richard S. Wright Jr.// OpenGL SuperBible#version 130in vec4 vVertex;in vec2 vTexCoords;smooth out vec2 vVaryingTexCoords;void main(void) { vVaryingTexCoords = vTexCoords..

2021-04-05 13:45:45 138

原创 【OpenGL】Phone着色案例

案例在前一个基础上将计算过程放到了片段着色器,来增强细节处理。// ADS Point lighting Shader// Vertex Shader// Richard S. Wright Jr.// OpenGL SuperBible#version 130// Incoming per vertex... position and normalin vec4 vVertex;in vec3 vNormal;uniform mat4 mvpMatrix;unifor..

2021-04-05 13:31:53 317

原创 【OpenGL】ADS光照模型

ADS是Ambient、Diffuse、Specular意思,用环境光、漫反射、高光反射进行渲染物体。uniform vec3 vAmbientMaterial;uniform vec3 vAmbientLight;vec3 vAmbientColor = vAmbientMaterial * vAmbientLight; //即环境光颜色 * 环境光亮度 得到环境光颜色uniform vec3 vDiffuseMaterial;uniform vec3 vDiffuseLight;f...

2021-04-05 13:25:09 465

原创 【OpenGL】点光源漫反射着色器

顶点着色器代码:// Simple Diffuse lighting Shader// Vertex Shader// Richard S. Wright Jr.// OpenGL SuperBible#version 130// Incoming per vertex... position and normalin vec4 vVertex;in vec3 vNormal;// Set per batchuniform vec4 diffuseColor; unifo...

2021-04-05 11:42:51 278

原创 【OpenGL】平面着色器实例代码

// FlatShader.cpp// OpenGL SuperBible// Demonstrates a simple flat shader with transformations// Program by Richard S. Wright Jr.#pragma comment(lib, "gltools.lib")#include <GLTools.h> // OpenGL toolkit#include <GLMatrixStack.h>#incl...

2021-04-02 00:11:31 232

Unity/C#的Excel转二进制和XML工具

工具是在UNITY编程环境下使用的,若个人需要可视情况改写,与EXCEL的交互是使用EPPlus插件,插件附带在资源里面,可满足大部分的转换需求

2019-01-29

空空如也

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

TA关注的人

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