黑不溜秋的
GPU全栈博主
展开
-
OpenGL进阶系列20 - OpenGL SuperBible - bindlesstex 例子学习
什么是无绑定纹理(bindless texture)?无绑定纹理是OpenGL的一项技术,旨在消除传统的纹理绑定操作。这项技术允许着色器直接访问纹理而不需要显式地将纹理绑定到某个纹理单元,从而减少了渲染管线中的开销。在引入无绑定纹理之前,当我们想在着色器中使用纹理时,我们会将其绑定到一个纹理单元,并通过一个样本类型的统一变量(例如sampler2D)表示该纹理单元。这个样本变量与某个纹理单元相关联,而这种关联形成了对底层纹理的间接引用。原创 2025-04-02 20:35:11 · 236 阅读 · 0 评论 -
OpenGL进阶系列19 - OpenGL SuperBible - basicfbo 例子学习
在超级宝典之前的例子中,程序执行的所有渲染操作都是针对一个窗口,或者可能是计算机的主显示屏。片元着色器(fragment shader)的输出进入后台缓冲区(back buffer),而这个缓冲区通常由操作系统或窗口系统管理,并最终显示给用户。当我们为渲染上下文选择格式时,就决定了这些参数。由于这是一个平台相关(platform-specific)的操作,因此我们对底层缓冲区实际上几乎没有控制权。此外,为了使本书中的示例能够在多个平台上运行,本书的应用框架会负责设置这些操作,并隐藏其中的许多细节。原创 2025-02-25 23:19:26 · 696 阅读 · 0 评论 -
OpenGL 进阶系列18 - OpenGL SuperBible - alienrain 例子学习
本文学习记录下 alienrain 的实现原理。它模拟了“Alien”图案的雨滴下落效果,并使用了着色器,纹理数组和Uniform Buffer 缓冲区等现代OpenGL接口。下面是代码用到的主要OpenGL 接口以及代码实现分析。原创 2025-01-13 23:58:24 · 290 阅读 · 0 评论 -
OpenGL 进阶系列17 - 编译OpenGL SuperBible 7th 超级宝典随书代码
OpenGL 超级宝典》第七版)是一本广受欢迎的 OpenGL 教程书籍,专注于现代 OpenGL 编程。与早期版本相比,第七版完全围绕OpenGL 4.x 核心模式展开,摒弃了过时的固定管线内容,是学习现代 OpenGL 编程的权威资源。本文介绍下随书代码在Windows和Linux上的编译运行方法。原创 2024-12-14 20:45:46 · 216 阅读 · 0 评论 -
OpenGL 进阶系列16 - Multisample Framebuffer Object 介绍
Multisample Framebuffer Object (FBO) 是 OpenGL 提供的一种机制,用于在自定义的帧缓冲中实现多重采样抗锯齿(Multisample Anti-Aliasing, MSAA)。它允许开发者创建一个多重采样的渲染目标,在对场景进行高质量渲染后再解析(resolve)为单一采样的图像。原创 2024-11-25 23:56:21 · 449 阅读 · 0 评论 -
OpenGL 进阶系列15 - 透明物体绘制方法
是一种在渲染透明物体时不依赖于物体深度排序的技术。在传统的透明物体渲染中,物体需要按照距离摄像机的远近进行排序,以确保透明物体正确地被混合显示。然而,这种排序方式会受到遮挡、复杂几何体和大规模场景的影响,导致渲染性能下降。OIT 技术的出现,允许在不显式排序的情况下正确处理透明物体的渲染,进而提高渲染效率,并为实时应用提供可行的解决方案。原创 2024-11-17 23:56:11 · 210 阅读 · 0 评论 -
OpenGL 进阶系列14 - 曲面细分着色器
OpenGL 曲面细分着色器(Tessellation Shader)是一种用于图形渲染的高级着色器,旨在对图形进行细分处理。它使得开发者能够将粗糙的模型细分成更精细的网格,从而实现更加平滑和细致的表面。曲面细分着色器通过引入两个主要阶段来实现细分:控制着色器、细分着色器和片段着色器。原创 2024-11-17 23:38:28 · 416 阅读 · 0 评论 -
OpenGL 进阶系列13 - 使用几何着色器
几何着色器(Geometry Shader,简称 GS) 是 OpenGL 渲染管线中的一个可选阶段,它位于 顶点着色器(Vertex Shader) 和 片段着色器(Fragment Shader) 之间。几何着色器的主要作用是从输入的图元(如点、线、三角形)生成更多的图元,或者对输入的图元进行修改。它能够基于原始顶点数据生成新的顶点,或者将一个图元(比如一个三角形)细分成多个图元(如多个三角形),从而增强图形渲染的灵活性和可扩展性。原创 2024-11-17 23:24:19 · 253 阅读 · 0 评论 -
OpenGL 进阶系列12 - 图像处理技术
OpenGL 图像处理是利用 OpenGL 的图形渲染功能来进行图像的操作、编辑、转换和特效处理。通过 OpenGL 的管线和着色器,可以实现许多高效且复杂的图像处理任务,例如图像模糊、锐化、边缘检测、色彩调整等。原创 2024-11-17 22:52:47 · 208 阅读 · 0 评论 -
OpenGL 进阶系列11 - 粒子特效(使用 Compute Shader)
在 OpenGL 中,使用计算着色器(Compute Shader)实现粒子系统是一种现代且高效的方式。计算着色器是一种不直接与图形渲染管线(如顶点或片段着色器)连接的着色器,它允许我们执行一些通用计算任务,比如物理模拟、粒子系统更新等。粒子系统模拟通常涉及大量粒子的物理计算和状态更新,这使得计算着色器成为一个理想选择。二:粒子系统的基本概念粒子系统通常用于模拟和渲染大量的动态对象(粒子)。这些粒子可以表现为烟雾、火焰、水花、雨滴等效果。原创 2024-11-17 22:27:26 · 315 阅读 · 0 评论 -
OpenGL 进阶系列10 - 实现光线跟踪(Ray Tracing)
OpenGL 实现光线跟踪(Ray Tracing)是一个相对复杂但有趣的挑战,通常用于生成高度逼真的图像效果,如反射、折射、阴影等。OpenGL 本身并不是为光线跟踪设计的,但可以通过结合计算着色器和现代 OpenGL 功能实现光线跟踪。光线跟踪的基本思路是从相机(或视点)出发,发射光线并计算这些光线与场景中物体的交点。光线与场景中物体相交的计算。计算交点的光照(基于表面法线、光源位置、材质等)。反射和折射的处理(如果物体是透明或反射的)。原创 2024-11-17 21:41:38 · 811 阅读 · 0 评论 -
OpenGL 进阶系列09 - 计算着色器
计算着色器(Compute Shader) 是 OpenGL 中的一种专门用于通用计算的着色器,独立于图形渲染管线。它允许在 GPU 上进行高效的并行计算,可用于科学计算、粒子模拟、物理引擎、图像处理等任务。计算着色器在 OpenGL 4.3 版本中引入,提供对 OpenGL Shading Language (GLSL) 的扩展支持。原创 2024-11-17 20:30:10 · 417 阅读 · 0 评论 -
OpenGL 进阶系列08 - 天空盒实现
OpenGL 中的 Cubemap(立方体贴图)是一种将六个不同方向的图像(面)组合成一个立方体的纹理,用于模拟环境映射、天空盒、反射等效果。正面(+X)反面(-X)顶面(+Y)底面(-Y)左面(+Z)右面(-Z)每个面都是一张 2D 图像,通常它们是正方形的,且尺寸相同。原创 2024-11-14 22:45:57 · 319 阅读 · 0 评论 -
OpenGL 进阶系列07 - 阴影贴图(shadowmap )
在 OpenGL 中,Shadow Mapping(阴影贴图)是一种常用的实时阴影技术,用于渲染物体的阴影效果。这种方法通过生成光源视角下的深度贴图,再在场景渲染时使用它来判断物体是否被遮挡,从而实现阴影效果。下面是实现 Shadow Mapping 的基本步骤和相关知识。原创 2024-11-11 23:32:08 · 722 阅读 · 0 评论 -
OpenGL 进阶系列06 - OpenGL变换反馈(TransformFeedback)
变换反馈(Transform Feedback)是 OpenGL 中的一项技术,允许你将顶点着色器的输出(例如变换后的顶点数据)直接传输到缓冲区,而不是将结果渲染到屏幕上。它在图形计算中非常有用,尤其在粒子系统、模拟、几何处理等场景中,可以用来获取顶点处理的中间结果,并将其用于后续的计算或渲染。原创 2024-11-07 23:44:50 · 691 阅读 · 1 评论 -
OpenGL 进阶系列05 - OpenGL 图元重启(primitiverestart)
OpenGL 图元重启(Primitive Restart)是一种机制,允许你在绘制一个图元的过程中“重启”图元的序列,从而在一个绘制调用中使用多个不连续的顶点。这样,你可以将多个图形(如三角形、线段等)组合成一个单独的绘制调用,而不需要分别调用多次。1. glPrimitiveRestartIndex 介绍:它是 OpenGL 的一个函数,用于设置图元重启的索引值。这个索引值是在绘制图元时用于指示重启的特殊值。原创 2024-10-24 22:12:44 · 136 阅读 · 0 评论 -
OpenGL进阶系列04 - OpenGL 点精灵
OpenGL 点精灵是一种渲染小型对象的技术(通常渲染粒子或光源),用于在3D场景中渲染小的、可缩放的点。它们通常用于表示粒子效果、光源或其他小物体。点精灵会根据视图和投影矩阵自动调整大小,使其始终在屏幕上保持一致的视觉效果。实现时,点精灵通常通过使用纹理和适当的着色器来增加视觉效果。原创 2024-10-22 21:22:31 · 240 阅读 · 0 评论 -
OpenGL 进阶系列03 - OpenGL实例化渲染来提高性能
OpenGL 实例化渲染(Instanced Rendering)是一种渲染技术,可以有效地绘制多个相同对象,而不需要为每个对象单独提交绘制调用。通过这种方式,可以显著提高渲染性能,尤其是在需要绘制大量相似对象的场景中。下面放张图,使读者对实例化渲染有个直观的印象。 实例化渲染(Instanced Rendering)用于在场景中高效地绘制多个相同或相似的对象。它通过减少重复的绘制调用和数据传输,显著提高了渲染性能。下面列举一下实例化渲染的优点:减少绘制调用:传统的渲染方法通常需要为每个对象发原创 2024-10-11 22:24:17 · 317 阅读 · 0 评论 -
OpenGL 进阶系列02 - OpenGL绘制三角形的必要步骤
要使用 OpenGL 绘制一个三角形,通常需要几步,需要使用哪些必要的OpenGL API,这些API都是什么含义。本文以现代 OpenGL(使用着色器)为例,介绍下三角形绘制步骤。glViewport是 OpenGL 中的一个函数,用于设置视口的大小和位置。视口定义了 OpenGL 渲染的区域,即将标准设备坐标(Normalized Device Coordinates, NDC)映射到窗口坐标的区域。它的主要作用是在窗口中指定绘制图形的区域,确保图形正确显示。如果应用程序未调用glViewport。原创 2024-10-10 21:55:47 · 363 阅读 · 0 评论 -
OpenGL 进阶系列01 - 编译 OpenGL Programming Guide 9th 随书代码
OpenGL Programming Guide》第九版是一本权威的参考书,专门用于教授OpenGL编程的基础知识和高级技术。书中详细介绍了OpenGL的核心概念,包括渲染管线、着色器、纹理、缓冲区对象和更多。书中包含许多示例代码和实际应用,帮助读者理解如何将理论应用于实际项目。第九版涵盖了OpenGL 4.5及更新版本的特性,确保读者掌握最新的图形编程技术。无论是初学者还是有经验的开发者,这本书都提供了丰富的知识,适合不同水平的读者。原创 2024-10-07 15:48:12 · 728 阅读 · 0 评论 -
OpenGL入门系列 - DrawElements
绘制图元,使用给定的顶点索引数组。参数mode 指定图元类型参数count 指定顶点个数参数type 指定顶点索引数组元素的数据类型参数indices 指定顶点索引数组。原创 2024-07-17 19:37:20 · 394 阅读 · 0 评论 -
OpenGL入门系列- OpenGL1.x和2.x功能演进(上古历史)
OpenGL 1.x, 2.x 功能列表原创 2024-06-24 11:18:46 · 615 阅读 · 0 评论 -
OpenGL入门系列- 编程指南例子解析 opengl_wrap
#include using namespace std;#include #include #include #define checkImageWidth 64 //图片宽度#define checkImageHeight 64 //图片高度static GLubyte checkImage[checkImageWidth][checkImageH原创 2014-06-26 13:49:02 · 1085 阅读 · 0 评论 -
OpenGL入门系列- 颜色立方体
// ccube.c// OpenGL SuperBible// Demonstrates primative RGB Color Cube// Program by Richard S. Wright Jr.#include "../../Common/OpenGLSB.h"// System and OpenGL Stuff/* 颜色立方体 *///旋转角度st原创 2013-09-05 19:47:15 · 2508 阅读 · 0 评论 -
OpenGL入门系列- OpenGL的扩展
一: 概述:OpenGL和Direct3D比较起来,最大的一个长处就是其扩展机制。硬件厂商开发出一个新功能,可以针对新功能开发OpenGL扩展,软件开发人员通过这个扩展就可以使用新的硬件功能。所以虽然显卡的发展速度比OpenGL版本更新速度快得多,但程序员仍然可以通过OpenGL使用最新的硬件功能。而Direct3D则没有扩展机制,硬件的新功能要等到微软发布新版DirectX后才可能支持。原创 2014-06-15 01:25:41 · 1758 阅读 · 0 评论 -
OpenGL入门系列- Opengl ES 网站社区
官方:http://www.khronos.org/原创 2014-04-29 11:27:59 · 951 阅读 · 0 评论 -
OpenGL入门系列- 太阳地球和月亮
// Solar.c// OpenGL SuperBible// Demonstrates OpenGL nested coordinate transformations// and perspective// Program by Richard S. Wright Jr./*原作者: Richard S. Wright Jr, 我在这里学习翻译一下 */#inclu原创 2013-08-30 21:44:02 · 6064 阅读 · 1 评论 -
OpenGL入门系列- 飞机
// Ambient.c// OpenGL SuperBible// Beginning of OpenGL lighting sample// Demonstrates Ambient Lighting// Program by Richard S. Wright Jr./* OpenGL 超级宝典例子, 翻译*/#include "../../Common/OpenGL原创 2013-09-05 13:46:27 · 3686 阅读 · 1 评论 -
OpenGL入门系列- 纹理环绕
//在Ubuntu12.04 QT 上编译通过;先上代码:原创 2014-09-11 10:23:52 · 1171 阅读 · 0 评论 -
OpenGL入门系列- 视景体定义
#include #include #include #include "jitter.h"#define PI_ 3.14159265358979323846/* accFrustum()* The first 6 arguments are identical to the glFrustum() call.** pixdx and pixdy a原创 2014-09-19 13:35:28 · 2444 阅读 · 0 评论 -
OpenGL入门系列- 累积缓冲区用法例子
#include #include //#include "jitter.h"void init(void){ GLfloat mat_ambient[] = {1.0, 1.0, 1.0, 1.0}; GLfloat mat_specular[] = {1.0, 1.0, 1.0, 1.0}; GLfloat light_position[] =原创 2014-09-20 20:29:13 · 1100 阅读 · 0 评论 -
OpenGL入门系列- 模型视图矩阵变换
一:基础知识: openGL原创 2014-09-12 17:06:27 · 1983 阅读 · 1 评论 -
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 · 1083 阅读 · 0 评论 -
OpenGL入门系列- 裁剪平面
#include #include void init(void){ glClearColor(0.0, 0.0, 0.0, 0.0); glShadeModel(GL_FLAT);}void display(void){ GLdouble eqn[4] = {0.0, 1.0, 0.0, 0.0}; GLdouble e原创 2014-09-16 09:22:30 · 1370 阅读 · 0 评论 -
OpenGL入门系列- OpenGL_ES 在 本地操作系统窗口上绘制的过程过程
EGL 是 Opengl_ES 和 本地操作系统窗口的粘合剂,原创 2014-09-27 20:26:05 · 1680 阅读 · 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 · 2291 阅读 · 2 评论 -
OpenGL入门系列- glVertexAttribPointer的解释
glVertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *ptr);原创 2014-09-28 22:49:56 · 7410 阅读 · 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 · 676 阅读 · 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 · 1331 阅读 · 0 评论 -
OpenGL入门系列- 颜色分布住状图
#include#define HISTOGRAM_SIZE 256extern GLubyte* readImage(const char*, GLsizei*, GLsizei*);GLubyte *pixels;GLsizei width, height;void init(void){ glPixelStorei(GL_UNPACK_AL原创 2014-10-09 19:06:38 · 832 阅读 · 0 评论