黑不溜秋的
GPU全栈博主-程序哥。
展开
-
OpenGL 进阶系列18 - OpenGL SuperBible - alienrain 例子学习
本文学习记录下 alienrain 的实现原理。它模拟了“Alien”图案的雨滴下落效果,并使用了着色器,纹理数组和Uniform Buffer 缓冲区等现代OpenGL接口。下面是代码用到的主要OpenGL 接口以及代码实现分析。原创 2025-01-13 23:58:24 · 236 阅读 · 0 评论 -
OpenGL 进阶系列17 - 编译OpenGL SuperBible 7th 超级宝典随书代码
OpenGL 超级宝典》第七版)是一本广受欢迎的 OpenGL 教程书籍,专注于现代 OpenGL 编程。与早期版本相比,第七版完全围绕OpenGL 4.x 核心模式展开,摒弃了过时的固定管线内容,是学习现代 OpenGL 编程的权威资源。本文介绍下随书代码在Windows和Linux上的编译运行方法。原创 2024-12-14 20:45:46 · 149 阅读 · 0 评论 -
OpenGL 进阶系列16 - Multisample Framebuffer Object 介绍
Multisample Framebuffer Object (FBO) 是 OpenGL 提供的一种机制,用于在自定义的帧缓冲中实现多重采样抗锯齿(Multisample Anti-Aliasing, MSAA)。它允许开发者创建一个多重采样的渲染目标,在对场景进行高质量渲染后再解析(resolve)为单一采样的图像。原创 2024-11-25 23:56:21 · 379 阅读 · 0 评论 -
OpenGL 进阶系列15 - 透明物体绘制方法
是一种在渲染透明物体时不依赖于物体深度排序的技术。在传统的透明物体渲染中,物体需要按照距离摄像机的远近进行排序,以确保透明物体正确地被混合显示。然而,这种排序方式会受到遮挡、复杂几何体和大规模场景的影响,导致渲染性能下降。OIT 技术的出现,允许在不显式排序的情况下正确处理透明物体的渲染,进而提高渲染效率,并为实时应用提供可行的解决方案。原创 2024-11-17 23:56:11 · 144 阅读 · 0 评论 -
OpenGL 进阶系列14 - 曲面细分着色器
OpenGL 曲面细分着色器(Tessellation Shader)是一种用于图形渲染的高级着色器,旨在对图形进行细分处理。它使得开发者能够将粗糙的模型细分成更精细的网格,从而实现更加平滑和细致的表面。曲面细分着色器通过引入两个主要阶段来实现细分:控制着色器、细分着色器和片段着色器。原创 2024-11-17 23:38:28 · 324 阅读 · 0 评论 -
OpenGL 进阶系列13 - 使用几何着色器
几何着色器(Geometry Shader,简称 GS) 是 OpenGL 渲染管线中的一个可选阶段,它位于 顶点着色器(Vertex Shader) 和 片段着色器(Fragment Shader) 之间。几何着色器的主要作用是从输入的图元(如点、线、三角形)生成更多的图元,或者对输入的图元进行修改。它能够基于原始顶点数据生成新的顶点,或者将一个图元(比如一个三角形)细分成多个图元(如多个三角形),从而增强图形渲染的灵活性和可扩展性。原创 2024-11-17 23:24:19 · 200 阅读 · 0 评论 -
OpenGL 进阶系列12 - 图像处理技术
OpenGL 图像处理是利用 OpenGL 的图形渲染功能来进行图像的操作、编辑、转换和特效处理。通过 OpenGL 的管线和着色器,可以实现许多高效且复杂的图像处理任务,例如图像模糊、锐化、边缘检测、色彩调整等。原创 2024-11-17 22:52:47 · 127 阅读 · 0 评论 -
OpenGL 进阶系列11 - 粒子特效(使用 Compute Shader)
在 OpenGL 中,使用计算着色器(Compute Shader)实现粒子系统是一种现代且高效的方式。计算着色器是一种不直接与图形渲染管线(如顶点或片段着色器)连接的着色器,它允许我们执行一些通用计算任务,比如物理模拟、粒子系统更新等。粒子系统模拟通常涉及大量粒子的物理计算和状态更新,这使得计算着色器成为一个理想选择。二:粒子系统的基本概念粒子系统通常用于模拟和渲染大量的动态对象(粒子)。这些粒子可以表现为烟雾、火焰、水花、雨滴等效果。原创 2024-11-17 22:27:26 · 238 阅读 · 0 评论 -
OpenGL 进阶系列10 - 实现光线跟踪(Ray Tracing)
OpenGL 实现光线跟踪(Ray Tracing)是一个相对复杂但有趣的挑战,通常用于生成高度逼真的图像效果,如反射、折射、阴影等。OpenGL 本身并不是为光线跟踪设计的,但可以通过结合计算着色器和现代 OpenGL 功能实现光线跟踪。光线跟踪的基本思路是从相机(或视点)出发,发射光线并计算这些光线与场景中物体的交点。光线与场景中物体相交的计算。计算交点的光照(基于表面法线、光源位置、材质等)。反射和折射的处理(如果物体是透明或反射的)。原创 2024-11-17 21:41:38 · 633 阅读 · 0 评论 -
OpenGL 进阶系列09 - 计算着色器
计算着色器(Compute Shader) 是 OpenGL 中的一种专门用于通用计算的着色器,独立于图形渲染管线。它允许在 GPU 上进行高效的并行计算,可用于科学计算、粒子模拟、物理引擎、图像处理等任务。计算着色器在 OpenGL 4.3 版本中引入,提供对 OpenGL Shading Language (GLSL) 的扩展支持。原创 2024-11-17 20:30:10 · 336 阅读 · 0 评论 -
OpenGL 进阶系列08 - 天空盒实现
OpenGL 中的 Cubemap(立方体贴图)是一种将六个不同方向的图像(面)组合成一个立方体的纹理,用于模拟环境映射、天空盒、反射等效果。正面(+X)反面(-X)顶面(+Y)底面(-Y)左面(+Z)右面(-Z)每个面都是一张 2D 图像,通常它们是正方形的,且尺寸相同。原创 2024-11-14 22:45:57 · 248 阅读 · 0 评论 -
OpenGL 进阶系列07 - 阴影贴图(shadowmap )
在 OpenGL 中,Shadow Mapping(阴影贴图)是一种常用的实时阴影技术,用于渲染物体的阴影效果。这种方法通过生成光源视角下的深度贴图,再在场景渲染时使用它来判断物体是否被遮挡,从而实现阴影效果。下面是实现 Shadow Mapping 的基本步骤和相关知识。原创 2024-11-11 23:32:08 · 613 阅读 · 0 评论 -
OpenGL 进阶系列06 - OpenGL变换反馈(TransformFeedback)
变换反馈(Transform Feedback)是 OpenGL 中的一项技术,允许你将顶点着色器的输出(例如变换后的顶点数据)直接传输到缓冲区,而不是将结果渲染到屏幕上。它在图形计算中非常有用,尤其在粒子系统、模拟、几何处理等场景中,可以用来获取顶点处理的中间结果,并将其用于后续的计算或渲染。原创 2024-11-07 23:44:50 · 628 阅读 · 1 评论 -
OpenGL 进阶系列05 - OpenGL 图元重启(primitiverestart)
OpenGL 图元重启(Primitive Restart)是一种机制,允许你在绘制一个图元的过程中“重启”图元的序列,从而在一个绘制调用中使用多个不连续的顶点。这样,你可以将多个图形(如三角形、线段等)组合成一个单独的绘制调用,而不需要分别调用多次。1. glPrimitiveRestartIndex 介绍:它是 OpenGL 的一个函数,用于设置图元重启的索引值。这个索引值是在绘制图元时用于指示重启的特殊值。原创 2024-10-24 22:12:44 · 83 阅读 · 0 评论 -
OpenGL进阶系列04 - OpenGL 点精灵
OpenGL 点精灵是一种渲染小型对象的技术(通常渲染粒子或光源),用于在3D场景中渲染小的、可缩放的点。它们通常用于表示粒子效果、光源或其他小物体。点精灵会根据视图和投影矩阵自动调整大小,使其始终在屏幕上保持一致的视觉效果。实现时,点精灵通常通过使用纹理和适当的着色器来增加视觉效果。原创 2024-10-22 21:22:31 · 173 阅读 · 0 评论 -
OpenGL 进阶系列03 - OpenGL实例化渲染来提高性能
OpenGL 实例化渲染(Instanced Rendering)是一种渲染技术,可以有效地绘制多个相同对象,而不需要为每个对象单独提交绘制调用。通过这种方式,可以显著提高渲染性能,尤其是在需要绘制大量相似对象的场景中。下面放张图,使读者对实例化渲染有个直观的印象。 实例化渲染(Instanced Rendering)用于在场景中高效地绘制多个相同或相似的对象。它通过减少重复的绘制调用和数据传输,显著提高了渲染性能。下面列举一下实例化渲染的优点:减少绘制调用:传统的渲染方法通常需要为每个对象发原创 2024-10-11 22:24:17 · 262 阅读 · 0 评论 -
OpenGL 进阶系列02 - OpenGL绘制三角形的必要步骤
要使用 OpenGL 绘制一个三角形,通常需要几步,需要使用哪些必要的OpenGL API,这些API都是什么含义。本文以现代 OpenGL(使用着色器)为例,介绍下三角形绘制步骤。glViewport是 OpenGL 中的一个函数,用于设置视口的大小和位置。视口定义了 OpenGL 渲染的区域,即将标准设备坐标(Normalized Device Coordinates, NDC)映射到窗口坐标的区域。它的主要作用是在窗口中指定绘制图形的区域,确保图形正确显示。如果应用程序未调用glViewport。原创 2024-10-10 21:55:47 · 325 阅读 · 0 评论 -
OpenGL 进阶系列01 - 编译 OpenGL Programming Guide 9th 随书代码
OpenGL Programming Guide》第九版是一本权威的参考书,专门用于教授OpenGL编程的基础知识和高级技术。书中详细介绍了OpenGL的核心概念,包括渲染管线、着色器、纹理、缓冲区对象和更多。书中包含许多示例代码和实际应用,帮助读者理解如何将理论应用于实际项目。第九版涵盖了OpenGL 4.5及更新版本的特性,确保读者掌握最新的图形编程技术。无论是初学者还是有经验的开发者,这本书都提供了丰富的知识,适合不同水平的读者。原创 2024-10-07 15:48:12 · 678 阅读 · 0 评论 -
OpenGL入门系列 - DrawElements
绘制图元,使用给定的顶点索引数组。参数mode 指定图元类型参数count 指定顶点个数参数type 指定顶点索引数组元素的数据类型参数indices 指定顶点索引数组。原创 2024-07-17 19:37:20 · 349 阅读 · 0 评论 -
OpenGL入门系列- OpenGL1.x和2.x功能演进(上古历史)
OpenGL 1.x, 2.x 功能列表原创 2024-06-24 11:18:46 · 593 阅读 · 0 评论 -
OpenGL入门系列- Bezier曲线
#include #include #include GLfloat ctrlpoints[4][3] ={ {-4.0, -4.0, 0.0}, {-2.0, 4.0, 0.0}, {2.0, -4.0, 0.0}, {4.0, 4.0, 0.0}};void init(void){ glClearColor(0.0,原创 2014-09-23 09:33:08 · 1066 阅读 · 0 评论 -
OpenGL入门系列- OpenGL 实用程序框架设计实现-Windows上的小框架:
1: OpenGL窗口管理 2:摄像机3:数学函数4:图片载入5:日志二:OpenGL窗口管理 1:渲染前, 创建 OpenGL 窗口 1):首先创建一个Windows窗口,我叫DC,怎么创建不说,这是Windows窗口程序的事情,此处略。 2):其次OpenGL自身有个渲染上下文,叫RC,实际渲原创 2016-01-25 19:29:49 · 2070 阅读 · 1 评论 -
OpenGL入门系列- OpenGL和Mesa的关系
另外一个问题是,Mesa3D 除了提供 OpenGL 实现外,还提供他们自己版本的 GLU OpenGL 实用程序库。无论你选择运行哪种底层 OpenGL 实现,都可以使用该库。你不必非得使用 Mesa3D 的 OpenGL 实现。你可以通过安装 GPU 供应商的驱动程序(如果他们提供的话)来安装另一种。Mesa3D 提供 OpenGL 实现,就像 NVidia、AMD 或 Intel 的驱动程序提供 OpenGL 实现一样。它们都是 OpenGL 实现。就像福特、别克和丰田都是汽车一样。原创 2015-09-07 14:42:55 · 13104 阅读 · 0 评论 -
OpenGL入门系列- 顶点数组的使用
#include #include #include #ifdef GL_VERSION_1_1#define POINTER 1#define INTERLEAVED 2#define DRAWARRAY 1#define ARRAYELEMENT 2#define DRAWELEMENTS 3int setupMethod = POINTER;原创 2015-08-17 08:29:07 · 1159 阅读 · 0 评论 -
OpenGL入门系列- 获取当前屏幕坐标对应的三维坐标
#include #include #include void display(void){ glClear(GL_COLOR_BUFFER_BIT); glFlush();}/* Change these values for a different transformation */void reshape(int w, int h){原创 2015-08-17 08:46:50 · 7127 阅读 · 1 评论 -
OpenGL入门系列-Per-fragment operations
原创 2015-07-30 15:24:34 · 1077 阅读 · 0 评论 -
OpenGL入门系列- STATIC_DRAW, DYNAMIC_DRAW, STREAM_DRAW的区别
VBO允许usage标示符取以下9种值:GL_STATIC_DRAW_ARBGL_STATIC_READ_ARBGL_STATIC_COPY_ARBGL_DYNAMIC_DRAW_ARBGL_DYNAMIC_READ_ARBGL_DYNAMIC_COPY_ARBGL_STREAM_DRAW_ARBGL_STREAM_READ_ARB原创 2015-07-30 10:09:52 · 12243 阅读 · 0 评论 -
OpenGL入门系列- 纹理
OpenGL_ES2.0 -纹理一:纹理基础: 1: 纹素的概念: 一个二维纹理在OpenGLES2.0中是很常见的,二维纹理就是一个二维数组,每个数据元素称为纹素,具体格式如下:GL_RGB (Red, Green, Blue)GL_RGBA (Red, Green, Blue, Alpha)GL_LUM原创 2015-06-08 22:53:49 · 1912 阅读 · 0 评论 -
OpenGL入门系列- 状态查询
一: 查询关于OpenGL2.0实现信息: 1: 原型: const GLubyte* glGetString(GLenum name) 参数: GL_VENDOR, GL_RENDERER, GL_VERSION;二: 查询关于OpenGL2.0实现依赖限制: 1:原型: void glGetBoolean原创 2015-04-07 17:22:25 · 1428 阅读 · 0 评论 -
OpenGL入门系列-Android上OpenGLES开发环境介绍
我觉得这篇文章思路是对的, 随着项目的积累, 我发现这里面有些细节描述是不对的, 希望不要误导大家!几年前搞过一个Android项目, 对Android开发有个简单了解, OpenGLES 是嵌入式三维图形规范, 如果不在Android上做点东西,感觉有点遗憾。 从现在开始, 尝试写一套OpenGLES 的 Android 开发教程.一: Android 开发环境和流程介原创 2017-07-05 09:13:07 · 3086 阅读 · 0 评论 -
OpenGL入门系列- Summary of OpenGL ES 3.0 Programming Guide
零:OpenGLES简介: OpenGLES 是用于嵌入式系统的一个3D图形编程接口规范,支持IOS,Android,Linux,Windows,WebGL。一:渲染管线: 1: VertexBufferArrayObject 2:VertexShader (坐标变换和光照) 3:Primitive Assembly(Clipping, Per原创 2017-05-25 12:34:01 · 706 阅读 · 0 评论 -
OpenGL入门系列- gles版本对应的时间
1992:OpenGL1.0~OpenGL 1.5是经典的固定管线时代; (1): 顶点数组 (2): 显示列表 (3): 纹理对象 (4): 帧缓冲区 (5): 缓冲对象 2004: OpenGL 2.0~OpenGL2.原创 2017-05-23 17:53:29 · 4683 阅读 · 0 评论 -
OpenGL入门系列- OpenGL版本历史
Links:原创 2016-11-28 10:09:22 · 1125 阅读 · 0 评论 -
OpenGL入门系列- 窗口和GLContext
#pragma once#include #include #include #include #include #include #include #include #include class GLApplication{public: GLApplication(); virtual ~GLApplication原创 2016-12-06 17:28:14 · 1752 阅读 · 0 评论 -
OpenGL入门系列- glfw 如何 在创建 context 指定 opengl 版本
1: if (ctxconfig->major != 1 || ctxconfig->minor != 0) { setGLXattrib(GLX_CONTEXT_MAJOR_VERSION_ARB, ctxconfig->major); setGLXattrib(GLX_CONTEXT_MINOR_VERSIO原创 2016-11-20 11:34:20 · 1895 阅读 · 0 评论 -
OpenGL入门系列- OpenGL_ES 在 本地操作系统窗口上绘制的过程过程
EGL 是 Opengl_ES 和 本地操作系统窗口的粘合剂,原创 2014-09-27 20:26:05 · 1666 阅读 · 0 评论 -
OpenGL入门系列- 颜色索引模式
#include #include #include #define RAMPSIZE 16#define RAMP1START 32#define RAMP2START 48static float rotAngle = 0.;void init(void){ int i; for(i = 0; i {原创 2014-09-18 13:29:08 · 2278 阅读 · 2 评论 -
OpenGL入门系列- glVertexAttribPointer的解释
glVertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *ptr);原创 2014-09-28 22:49:56 · 7309 阅读 · 0 评论 -
OpenGL入门系列- 颜色混合
#include #include void init(void){ glClearColor(1.0, 1.0, 0.0, 0.0); glBlendFunc(GL_ONE, GL_ONE); glEnable(GL_BLEND);}void display(void){ glClear(GL_COLOR_BUFFER_BI原创 2014-10-23 12:46:08 · 664 阅读 · 0 评论 -
OpenGL入门系列- 位图字体
#include #include #include using namespace std;GLubyte rasters[24] = { 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xff, 0x00, 0xff, 0x00, 0xc0, 0x00, 0xc0, 0原创 2014-10-07 23:36:55 · 1314 阅读 · 0 评论
分享