
OpenGL技术点
文章平均质量分 61
OpenGL技术汇集
荆楚闲人
老骥伏枥,志在千里;烈士中年,壮心不已。
展开
-
openGL中 GL_LINES 与GL_LINE_STRIP 的区别
上述程序的绘制结果是:V1与V2之间, V3与V4之间, V5与V6之间是直线连接的, V2与V3, V4与V5之间没有直线连接;上述程序的绘制结果是:V1与V2, V2与V3, V3与V4, V4与V5,V5与V6之间都是直线连接的。如下为在棋盘格上以GL_LINE_STRIP绘制的直线, 没有断开。当绘制的是一系列点的时候,比如点集为:V1, V2, V3, V4, V5, V6;,GL_LINE与GL_LINE_STRIP绘线方式没有差异,绘制结果都是一条连接点V1与点V2的一条直线。转载 2023-10-19 09:53:34 · 1374 阅读 · 0 评论 -
glBindFragDataLocation函数的作用
如下博文有对该函数的分析,请参考:OpenGL超级宝典(第五版)第8章fbo_drawbuffers例子分析原创 2023-09-24 17:56:47 · 243 阅读 · 0 评论 -
OpenGL超级宝典(第五版)第8章fbo_drawbuffers例子分析
超级宝典(第五版)》如下:说明:请先把OpenGL超级宝典(第五版)第8章中有关上述的知识点,自己研究一遍,扫清基本的概念后再读本博文。原创 2023-09-24 11:10:14 · 426 阅读 · 0 评论 -
OpenGL超级宝典(第五版)疑难点汇总解析
超级宝典(第五版)》如下:1. 在该书的第1章的Block例子中用到了平面阴影投射矩阵,关于该矩阵的推导,参见:原创 2023-09-17 11:47:01 · 146 阅读 · 0 评论 -
正交投影矩阵的推导
但关于投影应用,还有一类经常使用的投影方式需要我们深入理解——正交投影,我们在本篇文章里面研究它(这里假设读者已经看过前两篇文章,并理解了绝大多数的理论,因为正交投影比透视投影的推导关系简单得多,因此我们的推导会非常得快,如果读者有任何的不解,请参考前两篇文章或者通过email联系我)。q的投影方向向量为Q = 单位化(q’-q),而p的投影方向向量为P = 单位化(p’-p),其中Q不平行于n而P平行于n,则q的投影叫做侧投影,而p的投影叫做正交投影。p是观察体中的一个点,p’是它投影之后的点。转载 2023-09-17 11:17:57 · 712 阅读 · 0 评论 -
浅谈OPenGL中的纹理过滤
纹理图像中的纹理单元和屏幕上的像素几乎从来不会形成一对一的对应关系。线性过滤并不是把最邻近的纹理单元应用到纹理坐标中,而是把这个纹理坐标作为的纹理单元的加权平均值应用到这个纹理坐标上(线性插值)。线性过滤最显著的特征就是当纹理本拉伸时出现的失真图像,但是和最邻近过滤模式下所呈现的斑驳状像素块相比,这种失真更接近真实,没有那种人工操作的 痕迹。GL_LINEAR(也叫线性过滤,(Bi)linear Filtering)它会基于纹理坐标附近的纹理像素,计算出一个插值,近似出这些纹理像素之间的颜色。原创 2023-09-10 11:59:16 · 966 阅读 · 0 评论 -
浅谈纹理GL_TEXTURE_2D和GL_TEXTURE_RECTANGLE的不同点
对于一维、二维纹理来说,在典型情况下将纹理映射到几何图形上,其纹理坐标经过标准化,取值范围为0.0到1.0。我们可以超出这个范围,并使用各种纹理坐标环绕模式确定这个纹理是否以不同方式进行重复,或者被截取到纹理图像的边缘。对于二维纹理图像来说,另一个有用的选项是纹理目标GL_TEXTURE_RECTANGLE。原创 2023-09-07 07:13:38 · 423 阅读 · 0 评论 -
OpenGL: 平面阴影投射矩阵的推导
OpenGL: 平面阴影投射矩阵的推导转载 2023-06-22 15:07:19 · 272 阅读 · 0 评论 -
glBeginQuery/glEndQuery/glQueryCounter获取GPU执行指令耗时
glBeginQuery/glEndQuery/glQueryCounter获取GPU执行指令耗时转载 2023-05-02 09:50:45 · 909 阅读 · 0 评论 -
OPenGL 颜色混合(Blending)
写在前面上一节学习了使用模板缓冲来制作特殊效果,本节将继续学习一个高级主题-混色(Blending)。通过使用混色,我们可以制作透明、半透明效果。本节示例代码均可以在我的github下载。本节内容整理自www.learnopengl.com blending.混色的概念所谓混色,就是将当前要绘制的物体的颜色和颜色缓冲区中已经绘制了的物体的颜色进行混合,最终决定了当前物体的颜色。例如下面的图中,狙击枪的瞄准器本身是带有蓝色的,将它和后面的任务混合在一起,形成了我们看到的最终效果,这个效果里既有瞄准转载 2021-07-11 11:57:04 · 2231 阅读 · 0 评论 -
OpenGL学习脚印:模板测试(stencil testing)
《OpenGL学习脚印:模板测试(stencil testing)》转载 2021-07-11 09:03:56 · 120 阅读 · 0 评论 -
反走样和OpenGL多重采样
1. 反走样在计算机图形学中,在屏幕上显示对象时,可能会出现许多的“锯齿”,这些锯齿是由顶点数据像素化之后成为片段的方式所引起的,由于将数学意义上的坐标转换到物理的显示器硬件上进行显示,显示器是有一个个像素点构成的,并不能实现数学意义上的“无限小”的描述。关于产生锯齿的更详细的介绍可以参考OpenGL学习脚印: 反走样初步(Anti-aliasing basic)为了消除“锯齿”,图形工作者提出了许多抗锯齿的算法(也称为反走样[Anti-aliasing]算法),本文主要介绍OpenGL中提到的一种反转载 2021-07-10 10:18:00 · 2186 阅读 · 0 评论 -
深入理解多重采样(Multisampling)
转载请标明出处:http://blog.youkuaiyun.com/yunchao_he/article/details/78354528Multi-sampling或者说Multi-sample Anti-Alias (简称MSAA)是一种抗锯齿的技术,它通过在一个像素上进行多次采样多次计算并最终汇总(Resolve to single-sample),可使绘制的图像边缘更加平滑。通过这种方式绘制出来的图片质量更高,显得更真实。但同时,它对绘制的性能也会产生负面影响。所以,是否使用这项技术,需要开发者在图片质量转载 2021-06-27 10:28:31 · 5225 阅读 · 0 评论 -
OpenGL 网络教程 LearnOpenGL
《LearnOPenGL》原创 2021-06-14 11:38:55 · 211 阅读 · 0 评论 -
免费的3D素材网站,对三维开发很有用
《Free3D》原创 2021-06-14 11:35:24 · 325 阅读 · 0 评论 -
glDrawElements参数在新旧版本传最后一个参数的不同
glDrawElements函数如下:void glDrawElements( GLenum mode, GLsizei count, GLenum type, const GLvoid * indices);原创 2021-06-13 10:54:05 · 646 阅读 · 0 评论 -
OPenGL实例化绘制、普通绘制说明
OpenGL 实例化(Instancing)是一种只调用一次渲染函数就能绘制出不少物体的技术,能够实现将数据一次性而不是多次发送给 GPU ,告诉 OpenGL使用一个绘制函数,将这些数据绘制成多个物体。数组实例化(Instancing)避免了 CPU 屡次向 GPU 下达渲染命令(避免屡次调用 glDrawArrays 或 glDrawElements 等绘制函数),节省了绘制多个物体时 CPU 与 GPU 之间的通讯时间,提高了渲染性能。//普通渲染glDrawArrays (GLenum m.原创 2021-05-23 10:34:47 · 2023 阅读 · 1 评论 -
OpenGL中的Uniform block size 的大小限制
我们绘制了1000个陨石,如果我们将数量提升到 2000 个,会怎么样?在编译 shader 的时候就会报错:那要怎么样才能知道 UBO 最大的大小限制呢?获取 单个UBO大小 的最大限制使用 glGetIntegerv 接口即可,传入:GL_MAX_UNIFORM_BLOCK_SIZE // GL_MAX_UNIFORM_BLOCK_SIZE GLint maxUniformBlockSize; glGetIntegerv(GL_MAX_UNIFORM_BLOCK_SIZE,原创 2021-05-23 09:47:25 · 2750 阅读 · 0 评论 -
OpenGL API在线帮助手册
docs.gl原创 2021-05-04 15:19:32 · 1700 阅读 · 1 评论 -
glVertexAttribPointer第1个参数及着色器中的location的作用
glVertexAttribPointer第一个参数理解原创 2021-04-18 11:28:17 · 1484 阅读 · 4 评论 -
gluPerspective的具体含义
OpenGL有两种投影:正射投影(垂直投影)和透视投影。透视投影通过指定一个平截头体来定义视见体的范围,平截头体如下图所示:void gluPerspective (GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar)fovy是眼睛上下睁开的幅度,角度值,值越小,视野范围越狭小(眯眼),值越大,视野范围越宽阔(睁开铜铃般的大眼);zNear表示近裁剪面到眼睛的距离,zFar表示远裁剪面到眼睛的距离,注意zNear和zF原创 2021-03-07 14:41:30 · 571 阅读 · 0 评论 -
ModelView矩阵各列含义及说明
在opengl中,视图和模型变换是在一个矩阵中进行控制的,这个矩阵就是GL_MODELVIEW_MATRIX,可以使用glGetFloatv函数来获取这个矩阵,而我们所要使用glTranslate*, glRotate*,glScale* 等操作均最后反映到这个矩阵的变化中,所以了解这个矩阵的构造对于灵活运用OpenGL比较重要。变换矩阵在内存中的存放方式如下:m[0] m[4] m[ 8] m[12]m[1] m[5] m[ 9] m[13]m[2] m[6] m[10] m[14]m原创 2021-03-07 10:25:34 · 807 阅读 · 0 评论 -
osg-3D世界到屏幕
标题前面记录了3D世界如何绘制,今天讨论一下3D世界怎么呈现到屏幕?1.(模型视图矩阵)model-view matirx 模型矩阵: 用于描述物体在3D世界中的位置,原理是:把模型上所有的顶点从模型本地坐标系变换(乘以模型矩阵)到世界坐标系.视图矩阵: 作用是变换整个3D世界到摄像机空间.(PS:opengl是右手左边系,所以OSG也是右手坐标系,Opengl默认摄像机位置在世界中心(0,0,0)的位置,摄像机默认朝向z轴的负方向.)但是Opengl中没有把模型矩阵和视图矩阵分离开来,转载 2021-02-13 16:24:40 · 1173 阅读 · 0 评论 -
OPengGL透视投影矩阵的推导(OpenGLD3D)
《OPengGL投影矩阵的推导(OpenGLD3D)》原创 2021-02-13 16:01:41 · 288 阅读 · 0 评论 -
OpenGL列向量和OSG行向量的理解
《OpenGL列向量和OSG行向量》转载 2020-11-29 20:57:52 · 295 阅读 · 0 评论 -
像素纵横比基础知识(正方形像素,非正方形像素)
像素纵横比是指像素的宽 (x) 与高 (y) 之比。正方形像素的比例为 1:1,但非正方形(矩形)像素的高和宽不相同。这一概念类似于帧纵横比,后者是图像的整个宽度与高度之比。通常,电视像素是矩形,计算机像素是正方形。因此,在计算机显示器上看起来合适的图像在电视屏幕上会变形,显示球形图像时尤其明显。在 Microsoft Expression Encoder 中,可以设置一些选项,以便正确显示非正方原创 2017-02-14 10:24:17 · 21442 阅读 · 0 评论 -
理解glVertexAttribPointer、glEnableVertexAttribArray、VAO、VBO的关系
OpenGL抛弃glEnable(),glColor(),glVertex(),glEnable()这一套流程的函数和管线以后,就需要一种新的方法来传递数据到Graphics Card来渲染几何体,我们可以用VBO, 在3+版本我们可以使用Vertex Array Object-VAO,VAO是一个对象,其中包含一个或者更多的Vertex Buffer Objects。而VBO是Graphics...原创 2017-02-21 16:12:59 · 10572 阅读 · 1 评论 -
OpenGL的glScissor示例程序
剪裁测试用于限制绘制区域。我们可以指定一个矩形的剪裁窗口,当启用剪裁测试后,只有在这个窗口之内的像素才能被绘制,其它像素则会被丢弃。换句话说,无论怎么绘制,剪裁窗口以外的像素将不会被修改。有的朋友可能玩过《魔兽争霸3》这款游戏。游戏时如果选中一个士兵,则画面下方的一个方框内就会出现该士兵的头像。为了保证该头像无论如何绘制都不会越界而覆盖到外面的像素,就可以使用剪裁测试。可以通过下面的代码来启用或禁转载 2017-01-09 17:59:13 · 12570 阅读 · 0 评论 -
OPenGL模板缓冲区示例程序
模板测试是把像素存储在模板缓冲区的值与一个参考值进行比较。根据测试的结果,对模板缓冲区中得这个值进行相应的修改。Note:模板测试只有在存在模板缓冲区的情况下才会执行,如果不存在模板缓冲区,模板测试能够通过。模板测试最常用的用途就是屏蔽掉屏幕中的一些不规则区域,避免在这些区域中进行绘图。模板测试过程:(1)如果使用glut工具包(或者freeglut),要这样进行指定:转载 2017-01-09 17:11:09 · 1098 阅读 · 0 评论 -
OPenGL程序导致WM_TIMER消息不能激发
问题描述: 近期用OPenGL编写了一个程序,程序中需要快速、高效率更新三维控件中的物体,同时程序还启动了WM_TIMER消息,但发现程序有时不能响应WM_TIMER消息。当窗口没有被其它窗体遮挡再露出或者从最大化变为最小化或者从最小化变为最大化,也即窗体没刷新时,WM_TIMER不响应也即OnTimer函数不响应。而在另外两台机器上则没有发现该现象。通过排查,发现出问题的机器原创 2016-12-23 17:56:47 · 511 阅读 · 0 评论