![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
opengl
hankern
Code World,Cool Life
展开
-
opengl的学习网站
1、opengl wiki收集了大量opengl相关的信息、问题等。它是一个开放的平台,任何人都可以在上面提交信息,但应当是opengl相关的。网址:https://www.khronos.org/opengl/wiki/2、shadertoy有很多不错的着色器使用案例网址https://www.shadertoy.com/3、LearnOpenGL-CN也是很不错的学...原创 2018-11-13 22:01:47 · 1617 阅读 · 0 评论 -
osgcuda
osgcuda 【转】原文 : http://blog.sina.com.cn/s/blog_df1b276a0101inbi.html osgCompute是对代码的并行流处理器执行的抽象基库。库连接到OSG的(OSG),因此它可以被包括在场景图。它为用户提供了可能性跳转到图形处理单元(GPU)的任何类型的计算。操纵数据,然后事后提供给场景图作进一步处理(例如渲染)。 ...转载 2018-11-14 06:32:44 · 436 阅读 · 0 评论 -
OpenGL中的功能与OSG对应功能
OpenGL中的功能与OSG对应功能 (摘)将OpenGL中的功能与OSG对应功能进行列举: OpenGL function OpenSceneGraph implementation glClear( GLbitfield mask ) osg::Camera::setClearMask(GLbitfield mask) osg::GraphicsContext...转载 2018-11-14 06:33:53 · 535 阅读 · 0 评论 -
图形化OpenGL调试器 BuGLe
图形化OpenGL调试器 BuGLe [转]BuGLe 结合图形化的OpenGL调试与选择的过滤器上的OpenGL命令流。调试器可以查看状态、纹理、framebuffers ,着色器,而过滤器允许日志,错误检查,自由相机控制,视频捕捉等。 主页:http://www.opengl.org/sdk/tools/BuGLe/文档:http://www.opengl.org/sdk/doc...转载 2018-11-14 06:43:39 · 387 阅读 · 0 评论 -
OpenGL 各个shader的作用和区别
OpenGL 各个shader的作用和区别penGL4.0发布了Tessellation shader(Control + Evaluation shader)。到OpenGL4.* 为止,现在OpenGL已经支持了5种不同类型的shader。1.Vertex Shader,简称VS2.TESS Control Shader (D3D11 叫Hull shader),简称TCS...转载 2018-12-03 06:28:17 · 1268 阅读 · 0 评论 -
opengl中wrap的翻译
翻译为“饱和”在饱和情况下,如果值超出最大值则取最大值,如果小于最小值则取最小值在不饱和情况下,如果值超出最大值则取最小值,如果值小于最小值则取最大值。...原创 2018-12-01 13:46:55 · 323 阅读 · 0 评论 -
osgEarth中opengl版本的确定
osgEarth/VirtualProgram#if defined(OSG_GLES2_AVAILABLE)# define GLSL_VERSION 100# define GLSL_VERSION_STR "100"# define GLSL_DEFAULT_PRECISION_FLOAT "precisio...原创 2018-12-28 06:34:38 · 1943 阅读 · 1 评论 -
GLSL 数据精度
1. 默认精度顶点着色器中默认精度precision highp float;precision highp int;precision lowp sampler2D;precision lowp samplerCube;像素着色器中默认精度precision mediump int;precision lowp sampler2D;precision lowp...转载 2018-12-28 06:38:02 · 712 阅读 · 0 评论 -
opengl着色器shader介绍
1. ShaderShader其实就是一段执行在GPU上的程序,此程序使用OpenGL ES SL语言来编写。它是一个描述顶点或像素特性的简单程序。在opengles中常用的shader有两种:vertex shader和fragment shader。Geometry Shader(几何着色器)是继Vertex Shader和Fragment Shader之后,由Shader Model 4...转载 2018-12-28 06:43:03 · 9603 阅读 · 0 评论 -
函数指针的两种定义方法
1、int (*f) (int x); //有些编译器可能不通过2、typedef int (*fun_ptr)(int,int);osg对opengl函数的封装采用void (GL_APIENTRY * glDeleteProgram)(GLuint program);...原创 2019-02-22 06:51:53 · 715 阅读 · 0 评论 -
osg与opengl中向量、矩阵的区别
osg中的向量是行向量,矩阵相应也是与行向量对应v*Mopengl中的向量是列向量M*v原创 2019-03-02 18:04:00 · 644 阅读 · 0 评论 -
openGL之API学习(一)gl_Position
默认是归一化的裁剪空间坐标(xyz各个维度的范围为-1到1)仅能在顶点着色器中使用,既是输入也是输出gl_Position赋值范围就是float的取值范围(32位),只不过只有[-1,1]区间的片元被绘制它是vec4类型的,不能重声明为dvec4等类型...原创 2019-03-02 18:17:29 · 11949 阅读 · 0 评论 -
openGL之API学习(二)glEnableVertexAttribArray
默认情况下,出于性能考虑,所有顶点着色器的属性(Attribute)变量都是关闭的,意味着数据在着色器端是不可见的,哪怕数据已经上传到GPU,由glEnableVertexAttribArray启用指定属性,才可在顶点着色器中访问逐顶点的属性数据。一般的使用流程:Vector3f Vertices[3];Vertices[0] = Vector3f(-1.0f, -1.0f, 0...原创 2019-03-02 19:10:25 · 1399 阅读 · 0 评论 -
openGL之API学习(三)gl_FragColor
vec4 输出的颜色用于随后的像素操作控制输出的颜色,也可以这样设置(在片段着色器中通过out的方式):#version 330// 接受vs传来的插值后的颜色值in vec4 Color;out vec4 FragColor;void main(){ // 颜色值作为片段着色器fs的输出 FragColor = Color;}...原创 2019-03-02 20:59:18 · 8976 阅读 · 0 评论 -
Qt高亮显示glsl代码
1、点击下载定义,下载glsl高亮显示方案2、在下载目录下,找到高亮方案。修改方案文件的扩展名3、重启Qt,即可。未高亮显示前:高亮后...原创 2019-03-02 21:15:04 · 509 阅读 · 0 评论 -
openGL之API学习(五)光照
基本的光照模型主要包括‘环境光/漫反射/镜面反射’。环境光是在晴天室外到处看到的光的类型环境光也就被建模为一个没有光源、没有方向并且对场景中的所有物体产生相同的点亮效果的一种光。环境光在很多情况下会被尽量的避免去考虑,因为它看上去有点太人工化,简单的实现并不会使场景更真实。使用一些更高级的技术比如全局光照会减少对环境光的需求,因为其实还要考虑光从物体表面反射后又照到其他物体上的事实。...原创 2019-03-06 06:23:47 · 377 阅读 · 0 评论 -
opengl的纹理过滤
和纹理映射相关的另一个重要概念是‘过滤’。我们已经讨论了怎样将纹理坐标(这是个0到1之间的分数!)映射到纹素上,纹理贴图中纹素的坐标总是以整数定义的,但是如果纹理坐标映射到纹素上的坐标为(152.34,745.14)怎么办?不明智的方案是将这个坐标舍去小数变为(152,745)。这种方法虽然可以有效果但是在某些情形下效果会很差。一个更好的办法是选取该坐标周围纹素2x2的4个坐标 ( (152,74...原创 2019-03-03 07:39:17 · 384 阅读 · 0 评论 -
纹理单元、纹理对象、纹理类型、取样器对象
纹理对象包含着纹理贴图自身的数据,比如:纹素。纹理对象并不是直接绑定到shader上的(事实上是采样阶段发生的地方),而是绑定到‘纹理单元’上,‘纹理单元’的索引会被传到shader中,因此shader是通过纹理单元得到纹理对象的。一般可以同时有多个可用的纹理单元,数量上限取决于显卡的容量。为了将一个纹理对象A绑定到纹理单元0上,首先你需要激活纹理单元0然后绑定纹理对象A。应该是纹理对象直...原创 2019-03-03 08:06:51 · 3042 阅读 · 0 评论 -
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 · 929 阅读 · 0 评论 -
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 · 715 阅读 · 0 评论 -
opengl纹理坐标和计算机图像坐标关系
上图左边是opengl纹理坐标,右边是计算机图像坐标原创 2019-03-03 11:53:12 · 695 阅读 · 0 评论 -
openGL之API学习(六)如何绑定深度缓冲区到片元着色器
本质是使用帧缓冲区glBindFramebuffer(GL_FRAMEBUFFER, m_fbo),深度缓存是帧缓冲区的一个挂载点在OpenGL中3d管线输出的结果称为‘帧缓冲对象‘(简称FBO)。FBO可以挂载颜色缓冲(在屏幕上显示)、深度缓冲区和一些有其他用处的缓冲区。当glutInitDisplayMode()被调用的时候,它使用一些特定的参数来创建默认的帧缓存,这个帧缓存被窗口系统所管...原创 2019-03-10 09:21:21 · 753 阅读 · 0 评论 -
openGL之API学习(十)glReadBuffer
该函数主要是确定颜色缓冲区的来源(不会影响到深度、模板等缓冲区的读取),这里的设置将会影响到glReadPixels, glCopyTexImage1D, glCopyTexImage2D, glCopyTexSubImage1D, glCopyTexSubImage2D, glCopyTexSubImage3D的读取结果。函数名字Name为像素选择颜色缓冲区源glReadBuff...原创 2019-03-15 06:16:44 · 5200 阅读 · 0 评论 -
openGL之API学习(七)Unable to get the location of uniform
在使用下面代码时遇到该错误m_textureLocation = GetUniformLocation("gShadowMap");着色器的代码为#version 330 ...原创 2019-03-12 06:28:06 · 347 阅读 · 0 评论 -
openGL之API学习(八)glutSwapBuffers
glutSwapBuffers函数是OpenGL中GLUT工具包中用于实现双缓冲技术的一个重要函数。该函数的功能是交换两个缓冲区指针。通常, 我们所看到的窗体、文字、图像,从根本上来说都是“画”出来的。比如,制作一个简单的五子棋, 我们可能先要绘制棋盘,然后绘制棋子,我们可能还要绘制一些提示信息。虽然这些绘制操作有一定的先后顺序,通常情况下,操作系统的这些绘制速度非常的快,使人眼误认为这些绘制...原创 2019-03-12 06:40:01 · 1212 阅读 · 0 评论 -
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 · 482 阅读 · 0 评论 -
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 · 2146 阅读 · 0 评论 -
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 · 544 阅读 · 0 评论 -
openGL之API学习(十六)glViewport
确定要绘制的区域。如果你打算把整个屏幕渲染到一个或大或小的纹理上,你需要用新的纹理的尺寸作为参数再次调用glViewport(要在渲染到你的帧缓冲之前做好),否则只有一小部分纹理或屏幕能够绘制到纹理上。void glViewport( GLint x, GLint y, GLsizei width, GLsizei height);x, y...原创 2019-03-24 19:44:32 · 468 阅读 · 0 评论 -
openGL之API学习(十八)glGenRenderbuffers
生成渲染缓冲区对象,可以和帧缓冲区进行绑定。和纹理对象关系?渲染缓冲区对象以OpenGL原生渲染格式储存它的数据,因此在离屏渲染到帧缓冲的时候,这些数据就相当于被优化过的了。void glGenRenderbuffers( GLsizei n, GLuint *renderbuffers)n Specifies the number of renderbuff...原创 2019-03-25 06:15:50 · 2125 阅读 · 0 评论 -
openGL之API学习(十七)glCheckFramebufferStatus
检查帧缓冲区的使用操作类型是否已准备好。FBO完整性的判别法则如下:与FBO挂接的二维数组对象的长度和宽度必须不能为0。 如果一个二维数组对象被挂接到FBO的颜色缓冲区挂接点时,二维数组必须具有内部颜色格式(GL_RGBA, GL_DEPTH_COMPONENT, GL_LUMINANCE等)。 如果一个二维数组对象被挂接到FBO的深度缓冲区挂接点时,二维数组必须具有内部深度格式(GL...原创 2019-03-25 06:41:02 · 3309 阅读 · 0 评论 -
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 · 390 阅读 · 0 评论 -
openGL之API学习(二十)opengl上下文与windows窗口
什么是绘制上下文(Rendering Context) 初学OpenGL,打开红宝书,会告诉你OpenGL是个状态机,OpenGL采用了客户端-服务器模式,那时觉得好抽象,直到后来了解了绘制上下文才把这些联系起来。我们可以认为每一个硬件GPU是个服务器,每一个绘制上下文对应于申请的一个客户端,一个客户端维护着一套状态机,如果两个窗口分别对应两个不同的绘制上下文,则两个窗口彼此状态独...原创 2019-03-25 13:51:56 · 1922 阅读 · 0 评论 -
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 · 4840 阅读 · 0 评论 -
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 · 5135 阅读 · 0 评论 -
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 · 4176 阅读 · 0 评论 -
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 · 735 阅读 · 0 评论 -
openGL之API学习(二十四)glGetError
返回opengl操作的错误标志,调用后会将错误标志设置为GL_NO_ERRORGLenum glGetError( void);原创 2019-03-26 06:34:50 · 559 阅读 · 0 评论 -
openGL之API学习(三十一)glVertexAttribPointer
指定了渲染时着色器索引值为 index 的顶点属性数组(颜色、纹理、法线坐标)的数据格式和位置,用于从内存向显存上传数据(数据是由glBufferData之类的方式从内存上传到显存的)。属性数组中的值在VBO中存放。顶点属性glVertexAttribPointer默认是关闭的,使用时要以顶点属性位置值为参数调用glEnableVertexAttribArray开启,如glEnableVertex...原创 2019-03-30 08:19:40 · 3263 阅读 · 0 评论 -
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 · 1395 阅读 · 0 评论