- 博客(46)
- 资源 (8)
- 收藏
- 关注
原创 openGL之API学习(三十六)如何在着色器中自动识别版本号
#if __VERSION__ < 130#define TEXTURE2D texture2D#else#define TEXTURE2D texture#endif#if __VERSION__ > 120 color = texture(sampler, texCoord);#else color = texture2D(sampler, ...
2019-03-31 22:55:13 325
原创 openGL之API学习(三十五)texture和texture2D
纹理采样函数texture2D() is deprecated as of (at least) OpenGL 3.3; see page 99 of the 3.30 GLSL specification. It will continue to be supported in OpenGL compatibility profiles to avoid breaking existing ...
2019-03-31 22:35:50 5733
原创 openGL之API学习(三十四)highp mediump lowp
如果用GLSL ES编写的着色器,浮点精确度规定如下:highp – 32位浮点格式,适合用于顶点变换,但性能最慢。 mediump – 16位浮点格式,适用于纹理UV坐标和比highp大约快两倍 lowp – 10位的顶点格式,适合对颜色,照明计算和其它高性能操作,速度大约是highp 的4倍如果是用CG编写的着色器或是一个表面着色器,指定精度如下:float – 类似于在...
2019-03-31 13:17:05 10348
原创 openGL之API学习(三十三)查看opengl、显卡的信息
const GLubyte* name = glGetString(GL_VENDOR); //返回负责当前OpenGL实现厂商的名字 const GLubyte* biaoshifu = glGetString(GL_RENDERER); //返回一个渲染器标识符,通常是个硬件平台 const GLubyte* OpenGLVersion = glGetStrin...
2019-03-30 22:00:15 1412
原创 openGL之API学习(三十二)FBO帧缓冲区架构
创建FBO创建FBO和产生VBO类似。glGenFramebuffersEXT()Void gelGenFramebuffersEXT(GLsizei n,GLuint* ids);void glDeleteFramebuffersEXT(GLsizei n, const GLuint* ids);glGenFramebuffersEXT()需要两个参数:第一个是要创建的帧缓存的数目,第二个是指向存储一个或者多个ID的变量或数组的指针。它返回未使用的FBO的ID。ID为0...
2019-03-30 14:05:09 528
原创 openGL之API学习(三十一)glVertexAttribPointer
指定了渲染时着色器索引值为 index 的顶点属性数组(颜色、纹理、法线坐标)的数据格式和位置,用于从内存向显存上传数据(数据是由glBufferData之类的方式从内存上传到显存的)。属性数组中的值在VBO中存放。顶点属性glVertexAttribPointer默认是关闭的,使用时要以顶点属性位置值为参数调用glEnableVertexAttribArray开启,如glEnableVertex...
2019-03-30 08:19:40 3274
原创 Vulkan学习(一)介绍
1、Vulkan是什么Vulkan是一个跨平台的2D和3D绘图应用程序接口(API),最早由科纳斯组织在2015年游戏开发者大会(GDC)上发表。它是 AMD Mantle 的后续版本,继承了前者强大的低开销架构,使软件开发人员能够全面获取 Radeon™ GPU 与多核 CPU 的性能、效率和功能。Vulkan的官方网站是:https://www.khronos.org/vulkan...
2019-03-29 22:29:50 13907
原创 openGL之API学习(三十)深度缓冲区深度值为负值
通过glReadPixels(0, 0, WINDOW_WIDTH, WINDOW_HEIGHT,GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, tmpPixelsBuffer);从帧缓冲区中读取深度信息,深度值竟然是负值。设置glDepthRange(0,1);也不起作用。原因分析:(1)不使用glDepthRange(0,1);...
2019-03-28 06:31:54 874
原创 openGL之API学习(二十九)glDepthRange
将规范化的深度范围(-1~+1)通过线性变换映射到(nearVal~farVal),这个范围不能超出(0~1)这个函数的作用一般是分层渲染,比如要渲染一副从窗户看外面世界的场景,可以将外面场景的深度值映射为0.5~1,将室内场景深度值映射为0~0.5。再比如在场景上添加按钮,可以将场景深度值映射为0.1~1,按钮的深度值映射为0~0.1void glDepthRange( GLdo...
2019-03-27 23:03:10 785 3
原创 openGL之API学习(二十八)glClearDepth
设置清空深度缓冲区时的值,范围会自动截取到[0,1]大于1的取1,小于0的取0.默认值为1void glClearDepth( GLdouble depth);depth Specifies the depth value used when the depth buffer is cleared. The initial value is 1.指定深度缓冲区清除时设...
2019-03-27 22:51:16 324
原创 openGL之API学习(二十七)glEnable
开启服务器端的opengl功能void glEnable( GLenum cap);GL_BLEND If enabled, blend the computed fragment color values with the values in the color buffers. See glBlendFunc.GL_CLIP_DISTANCE i If e...
2019-03-27 21:27:58 729
原创 openGL之API学习(二十六)glTexImage2D
给2维纹理分配显存空间,也可以从内存向显存拷贝数据。void glTexImage2D( GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, ...
2019-03-27 06:40:37 1827
原创 openGL之API学习(二十五)窗体默认FBO与手工创建的FBO的区别
第一,通过手工创建的FBO不能用于将渲染结果直接显示到窗口输出区,通过手工创建的FBO只能用于屏外渲染(Off-screen Rendering);第二,窗体系统生成的FBO在创建的时候就拥有颜色缓冲区,深度缓冲区,模版缓冲区,且创建后就为这些缓冲区分配了空间。而手工创建的FBO需要手动为其添加各个缓冲区,并为其申请空间。窗体系统创建的FBO中的各个缓冲区对象不能与手动创建的FBO的挂接点挂接,反...
2019-03-27 06:01:11 381
原创 openGL之API学习(二十四)glGetError
返回opengl操作的错误标志,调用后会将错误标志设置为GL_NO_ERRORGLenum glGetError( void);
2019-03-26 06:34:50 559
原创 openGL之API学习(二十三)glBindBuffer
使用生成过的缓冲区void glBindBuffer( GLenum target, GLuint buffer);target Specifies the target to which the buffer object is bound, which must be one of the buffer binding targets in the fol...
2019-03-26 06:29:37 739
原创 openGL之API学习(二十二)glBlitFramebuffer
void glBlitFramebuffer( GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask,...
2019-03-25 17:47:54 4192
原创 openGL之API学习(二十一)glFramebufferRenderbuffer
将渲染缓冲区挂载到当前帧缓冲区上void glFramebufferRenderbuffer( GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);target Specifies the target to which th...
2019-03-25 14:20:41 4855
原创 openGL之API学习(二十)opengl上下文与windows窗口
什么是绘制上下文(Rendering Context) 初学OpenGL,打开红宝书,会告诉你OpenGL是个状态机,OpenGL采用了客户端-服务器模式,那时觉得好抽象,直到后来了解了绘制上下文才把这些联系起来。我们可以认为每一个硬件GPU是个服务器,每一个绘制上下文对应于申请的一个客户端,一个客户端维护着一套状态机,如果两个窗口分别对应两个不同的绘制上下文,则两个窗口彼此状态独...
2019-03-25 13:51:56 1942
原创 openGL之API学习(十九)glRenderbufferStorage
为渲染缓冲区对象的图像分配显存空间,包括格式和维度大小。void glRenderbufferStorage( GLenum target, GLenum internalformat, GLsizei width, GLsizei height);target Specifies a binding target of the all...
2019-03-25 06:50:07 393
原创 openGL之API学习(十七)glCheckFramebufferStatus
检查帧缓冲区的使用操作类型是否已准备好。FBO完整性的判别法则如下:与FBO挂接的二维数组对象的长度和宽度必须不能为0。 如果一个二维数组对象被挂接到FBO的颜色缓冲区挂接点时,二维数组必须具有内部颜色格式(GL_RGBA, GL_DEPTH_COMPONENT, GL_LUMINANCE等)。 如果一个二维数组对象被挂接到FBO的深度缓冲区挂接点时,二维数组必须具有内部深度格式(GL...
2019-03-25 06:41:02 3318
原创 openGL之API学习(十八)glGenRenderbuffers
生成渲染缓冲区对象,可以和帧缓冲区进行绑定。和纹理对象关系?渲染缓冲区对象以OpenGL原生渲染格式储存它的数据,因此在离屏渲染到帧缓冲的时候,这些数据就相当于被优化过的了。void glGenRenderbuffers( GLsizei n, GLuint *renderbuffers)n Specifies the number of renderbuff...
2019-03-25 06:15:50 2128
原创 openGL之API学习(十六)glViewport
确定要绘制的区域。如果你打算把整个屏幕渲染到一个或大或小的纹理上,你需要用新的纹理的尺寸作为参数再次调用glViewport(要在渲染到你的帧缓冲之前做好),否则只有一小部分纹理或屏幕能够绘制到纹理上。void glViewport( GLint x, GLint y, GLsizei width, GLsizei height);x, y...
2019-03-24 19:44:32 471
原创 openGL之API学习(十五)glFramebufferTexture2D
将2维纹理对象绑定到帧缓冲区,帧缓冲区本身是不存放颜色、深度等信息的,这些信息需要通过纹理、深度缓存来存放,这些缓存可以绑定到帧缓冲区上。这种绑定关系会被opengl记录,不会随着当前帧缓冲区改变而改变。因而这个帧缓冲区和纹理单元有点类似,绑定到纹理单元的纹理对象,也会被opengl记录,不会随着当前纹理单元的改变而改变。不同的是纹理单元与纹理对象的绑定关系是隐式进行的(不需要手工绑定),而帧...
2019-03-23 23:32:13 3313
原创 openGL之API学习(十四)glBindFramebuffer
使用帧缓冲区void glBindFramebuffer( GLenum target, GLuint framebuffer);Parameterstarget Specifies the framebuffer target of the binding operation.指定帧缓冲区的使用操作类型,可以取GL_DRAW_FRAMEBUFFER,...
2019-03-23 23:04:43 2777
原创 openGL之API学习(十三)glDrawBuffer
指定在当前帧缓冲区的哪个颜色缓冲区进行绘制,并不影响深度、模板缓冲区。void glDrawBuffer (GLenum mode);GL_FRONT: 单缓存的默认值GL_FRONT_RIGHT:GL_NONE:不写入颜色缓冲区,如果存在片段着色器则不启用该着色器GL_FRONT_LEFT:GL_FRONT_AND_BACK:GL_RIGHT:GL_AUXi: i表...
2019-03-22 06:12:08 5149
原创 openGL之API学习(十二)glReadPixels
从缓冲区中读取数据(可以是颜色、深度等数据),缓冲区可以是当前窗口缓冲区,也可以是自定义的帧缓冲区FBO。使用窗口缓冲区需要用glReadBuffer来指定使用FBO需要用glBindFramebuffer来指定,当然如果绑定为0,则认为时窗口缓冲区void glReadPixels( GLint x, GLint y, GLsizei width,GLsizei height, GL...
2019-03-16 16:51:29 2173
原创 openGL之API学习(十一)glPixelStoref
设置像素的存储模式,对后续的glDrawPixels,glReadPixels,glPolygonStipple,glBitmap,glTexImage{1,2,3}D,glTexSubImage{1,2,3}D产生影响,如果OpenGL支持ARB_imaging扩展,那么还会影响glConvolutionFilter{1,2,3}D,glColorTable,glColorSubTable,gl...
2019-03-16 16:36:02 487
原创 openGL之API学习(十)glReadBuffer
该函数主要是确定颜色缓冲区的来源(不会影响到深度、模板等缓冲区的读取),这里的设置将会影响到glReadPixels, glCopyTexImage1D, glCopyTexImage2D, glCopyTexSubImage1D, glCopyTexSubImage2D, glCopyTexSubImage3D的读取结果。函数名字Name为像素选择颜色缓冲区源glReadBuff...
2019-03-15 06:16:44 5238
原创 openGL之API学习(九)glClear
函数原型: void glClear(GLbitfield mask);参数说明: GLbitfield:可以使用 | 运算符组合不同的缓冲标志位,表明需要清除的缓冲,例如glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)表示要清除颜色缓冲以及深度缓冲,可以使用以下标志位 GL_COLOR_BU...
2019-03-12 18:37:38 550
原创 openGL之API学习(八)glutSwapBuffers
glutSwapBuffers函数是OpenGL中GLUT工具包中用于实现双缓冲技术的一个重要函数。该函数的功能是交换两个缓冲区指针。通常, 我们所看到的窗体、文字、图像,从根本上来说都是“画”出来的。比如,制作一个简单的五子棋, 我们可能先要绘制棋盘,然后绘制棋子,我们可能还要绘制一些提示信息。虽然这些绘制操作有一定的先后顺序,通常情况下,操作系统的这些绘制速度非常的快,使人眼误认为这些绘制...
2019-03-12 06:40:01 1225
原创 openGL之API学习(七)Unable to get the location of uniform
在使用下面代码时遇到该错误m_textureLocation = GetUniformLocation("gShadowMap");着色器的代码为#version 330 ...
2019-03-12 06:28:06 351
原创 openGL之API学习(六)如何绑定深度缓冲区到片元着色器
本质是使用帧缓冲区glBindFramebuffer(GL_FRAMEBUFFER, m_fbo),深度缓存是帧缓冲区的一个挂载点在OpenGL中3d管线输出的结果称为‘帧缓冲对象‘(简称FBO)。FBO可以挂载颜色缓冲(在屏幕上显示)、深度缓冲区和一些有其他用处的缓冲区。当glutInitDisplayMode()被调用的时候,它使用一些特定的参数来创建默认的帧缓存,这个帧缓存被窗口系统所管...
2019-03-10 09:21:21 758
原创 openGL之API学习(五)光照
基本的光照模型主要包括‘环境光/漫反射/镜面反射’。环境光是在晴天室外到处看到的光的类型环境光也就被建模为一个没有光源、没有方向并且对场景中的所有物体产生相同的点亮效果的一种光。环境光在很多情况下会被尽量的避免去考虑,因为它看上去有点太人工化,简单的实现并不会使场景更真实。使用一些更高级的技术比如全局光照会减少对环境光的需求,因为其实还要考虑光从物体表面反射后又照到其他物体上的事实。...
2019-03-06 06:23:47 386
原创 openGL之API学习(四)纹理操作
纹理操作代码流程://向着色器传递纹理单元glUniform1i(gSampler, 0);//向GPU上传纹理数据GLuint m_textureObj;glGenTextures(1, &m_textureObj);//生成一个纹理对象,(一个纹理对象有多个纹理目标GL_TEXTURE_1D, 2D, 3D or CUBE_MAP等)glBindTexture...
2019-03-03 11:24:29 718
原创 out can't be used with non-varying FragColor
因为片段着色器缺少glsl的版本号,加上版本号就可以了#version 330 //不能缺少in vec2 TexCoord0;out vec4 FragColor;uniform sampler2D gSampler;void main(){ FragColor = texture2D(gSampler, TexCoord0.st);};...
2019-03-03 10:53:09 941
原创 QImage No such file or directory
在Qtpro文件中添加Qt+=guiQImage的帮助中写的很清楚 Header: #include <QImage> qmake: QT += gui
2019-03-03 10:42:01 1992
原创 纹理单元、纹理对象、纹理类型、取样器对象
纹理对象包含着纹理贴图自身的数据,比如:纹素。纹理对象并不是直接绑定到shader上的(事实上是采样阶段发生的地方),而是绑定到‘纹理单元’上,‘纹理单元’的索引会被传到shader中,因此shader是通过纹理单元得到纹理对象的。一般可以同时有多个可用的纹理单元,数量上限取决于显卡的容量。为了将一个纹理对象A绑定到纹理单元0上,首先你需要激活纹理单元0然后绑定纹理对象A。应该是纹理对象直...
2019-03-03 08:06:51 3065
原创 opengl的纹理过滤
和纹理映射相关的另一个重要概念是‘过滤’。我们已经讨论了怎样将纹理坐标(这是个0到1之间的分数!)映射到纹素上,纹理贴图中纹素的坐标总是以整数定义的,但是如果纹理坐标映射到纹素上的坐标为(152.34,745.14)怎么办?不明智的方案是将这个坐标舍去小数变为(152,745)。这种方法虽然可以有效果但是在某些情形下效果会很差。一个更好的办法是选取该坐标周围纹素2x2的4个坐标 ( (152,74...
2019-03-03 07:39:17 389
osgAndroidExampleGLES2重新组织TestNativeCPlusPlus
2021-06-19
NVIDIA_Nsight_Tegra_Release_3.6.19217.7511.exe
2021-02-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人