![](https://img-blog.csdnimg.cn/20190223201804751.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
openGL之API学习
别人的东西不算,化成自己的知识才是真。结合osg和osgEarth学习openGL,记录学习过程
hankern
Code World,Cool Life
展开
-
openGL之API学习(二一二)固定管线的纹理
会将固定管线各个纹理单元(openGL之API学习(二零五)GL_MAX_TEXTURE_UNITS GL_MAX_TEXTURE_IMAGE_UNITS_ARB GL_MAX_COMBINED_TEXTURE_IM纹理单元数_hankern的专栏-CSDN博客int _maxFFPTextureUnits;int _maxGPUTextureUnits;glGetIntegerv( GL_MAX_TEXTURE_UNITS, &_maxFFPTextureUnits ); //4glGetInte原创 2022-02-28 05:57:08 · 581 阅读 · 0 评论 -
openGL之API学习(二一一)glColor遇上纹理
每一个像素点的颜色与glColor进行比较,最终取较小值原图glColor4f(1.0,0.0,0.0,1.0)时glColor4f(0.0,0.0,0.0,1.0)时,glColor4f(0.0,0.0,0.0,0.0);renderInfor.getState()->setActiveTextureUnit(1);static GLuint disp_tex_id=0;if(disp_tex_id<=0){ glGenTextu.原创 2022-02-27 06:52:13 · 328 阅读 · 0 评论 -
openGL之API学习(二一零)纹理要素设置过程
包括纹理尺寸、格式、类型、边框边框在构造是置为0,后期不再修改1、在读取图片时确定内部格式和像素格式是一样的osgPlugins/rgb/ReaderWriterRGB.cppReadResult readRGBStream(std::istream& fin) const{ osg::ref_ptr<refImageRec> raw; if( (raw = RawImageOpen(fin)) == NULL ) {原创 2022-02-20 08:02:49 · 258 阅读 · 0 评论 -
openGL之API学习(二零九)glColor
设置图形默认的绘制颜色。void glColor3b( GLbyte red, GLbyte green, GLbyte blue); void glColor3s( GLshort red, GLshort green, GLshort blue); void glColor3i( GLint red, GLint green, GLint blu原创 2022-02-19 08:26:15 · 483 阅读 · 0 评论 -
openGL之API学习(二零八)客户端 服务器端 client server
Client (客户端):存储在CPU存储器中的,并且在应用程序中执行,或者在主系统内存的驱动程序中执行。驱动程序会将渲染命令和数组组合起来,发送给服务器执行!Server(服务器): 在PC或Mac电脑上,服务器指的其实就是图形加速卡上的硬件和内存(显卡,显存)。...原创 2022-02-16 06:27:05 · 683 阅读 · 0 评论 -
openGL之API学习(二零七)glTexCoordPointer
最多支持到gl3,gl4以后无此函数。该函数在客户端调用。纹理坐标数据初始是禁用的,不能被glArrayElement, glDrawElements, glDrawRangeElements, glDrawArrays, glMultiDrawArrays, or glMultiDrawElements调用。void glTexCoordPointer( GLint size, GLenum type, GLsizei stride,...原创 2022-02-16 06:22:44 · 559 阅读 · 0 评论 -
openGL之API学习(二零六)glClientActiveTexture
glClientActiveTexture selects the vertex array client state parameters to be modified by glTexCoordPointer, and enabled or disabled with glEnableClientState or glDisableClientState, respectively, when called with a parameter of GL_TEXTURE_COORD_ARRAY.glC原创 2022-02-16 06:11:01 · 2598 阅读 · 0 评论 -
openGL之API学习(二零五)GL_MAX_TEXTURE_UNITS GL_MAX_TEXTURE_IMAGE_UNITS_ARB GL_MAX_COMBINED_TEXTURE_IM纹理单元数
int _maxFFPTextureUnits;int _maxGPUTextureUnits;glGetIntegerv( GL_MAX_TEXTURE_UNITS, &_maxFFPTextureUnits ); //4glGetIntegerv( GL_MAX_TEXTURE_IMAGE_UNITS_ARB, &_maxGPUTextureUnits ); //32原创 2022-02-13 17:04:54 · 2434 阅读 · 0 评论 -
openGL之API学习(二零四)GL_TEXTURE_MIN_FILTER GL_TEXTURE_MAG_FILTER
设置纹理过滤方式。1、GL_TEXTURE_MIN_FILTERGL_TEXTURE_MIN_FILTER取值GL_NEAREST GL_LINEAR GL_NEAREST_MIPMAP_NEAREST GL_LINEAR_MIPMAP_NEAREST GL_NEAREST_MIPMAP_LINEAR GL_LINEAR_MIPMAP_LINEAR,默认GL_NEAREST_MIPMAP_LINEA2、GL_TEXTURE_MAG_FILTERGL_TEXTURE_MAG_FILTE原创 2022-02-13 15:52:42 · 4158 阅读 · 0 评论 -
openGL之API学习(二零三)GL_TEXTURE_WRAP_S GL_TEXTURE_WRAP_T
设置纹理坐标超出0-1范围时的处理方式。使用函数glTexParameteri() 设置纹理参数。//设置纹理参数 GL_TEXTURE_WRAP_S 为 GL_REPEAT 表示纹理X方向循环使用纹理 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);//设置纹理参数 GL_TEXTURE_WRAP_T 为 GL_MIRRORED_REPEAT 表示纹理Y方向镜像循环使用纹理glTexParameteri(GL_原创 2022-02-13 09:17:50 · 2900 阅读 · 0 评论 -
openGL之API学习(二零二)glsl的smooth flat
采用flat着色时,OpenGL将使用图元中某个顶点的颜色来渲染整个图元,通常情况下会选择图元的第一个或最后一个顶点的颜色作为该图元的颜色。在使用smooth着色时,OpenGL会独立的处理图元中各个顶点的颜色。对于线段图元,线段上各点的颜色将根据两个顶点的颜色通过插值得到。对于多边形图元,多边形内部区域的颜色将根据所有顶点的颜色插值得到。1、smooth的glsl顶点smooth out vec3 FrontColor;smooth out vec3 BackColor;片段s原创 2022-02-13 07:50:17 · 3313 阅读 · 0 评论 -
openGL之API学习(二零一)glTexGen
用来计算纹理坐标。opengl es 3.2和opengl 4.5都不再支持此函数,不知道具体从哪个版本开始不支持的。(This article describes legacy OpenGL APIs that have been removed from core OpenGL 3.1 and above (they are only deprecated in OpenGL 3.0). It is recommended that you not use this functionality in原创 2022-02-13 07:42:20 · 281 阅读 · 0 评论 -
openGL之API学习(二零零)GL_TEXTURE_GEN_S GL_TEXTURE_GEN_T GL_TEXTURE_GEN_R GL_TEXTURE_GEN_Q纹理坐标
通过glEnable来开启S,T,R和Q的纹理坐标自动生成。当自动生成纹理坐标的功能被开启,那么glTexCoord的函数调用将被忽略。glEnable(GL_TEXTURE_GEN_S);glEnable(GL_TEXTURE_GEN_T);glEnable(GL_TEXTURE_GEN_R);glEnable(GL_TEXTURE_GEN_Q);OpenGL为自动为每一个顶点计算纹理坐标。我们可以通过相应的glDisable来关闭纹理坐标的自动生成。我们可以通过下面的两个函数来原创 2022-02-12 08:09:20 · 585 阅读 · 0 评论 -
openGL之API学习(一九九)纹理单元和纹理对象的关系
glGenTextures产生的是纹理对象(简称纹理),纹理单元数量在GPU上确定的,不需要创建,glBindTexture将纹理对象绑定到当前纹理单元的的目标类型上(一个纹理单元可以有多个类型1D、2D等,一个纹理对象能够绑定到多个目标类型上),一个纹理对象可以绑定到多个纹理单元上,一个纹理单元上只能有一个同种纹理类型(如果有多个采样会无所适从)...原创 2022-02-06 17:34:37 · 1564 阅读 · 0 评论 -
openGL之API学习(一九八)默认着色器
在执行glDraw绘制语句时,如果没有显示的设置各阶段着色器时,opengl会自动生成默认着色器程序。如果将纹理绑定到了纹理名称0,则在绘制时会自动从这个纹理采样数据。原创 2022-02-05 09:10:42 · 400 阅读 · 0 评论 -
openGL之API学习(一九七)glGetError无限循环返回1282
If you don't have a valid GL context (GL window for example), the GL might simply return GL_INVALID_OPERATION (0x502 = 1282).void check_error(const char* st){ GLenum err(glGetError()); while (err != GL_NO_ERROR) { cerr << "Op原创 2022-01-22 07:58:02 · 2970 阅读 · 0 评论 -
openGL之API学习(一九六)纹理单元名(纹理对象)和纹理单元的关系
glGenTextures产生的是一个比较小的整数id(纹理单元名),glActiveTexture激活的是纹理单元号(GL_TEXTUREi),它们二者的关系为GL_TEXTUREi=GL_TEXTURE0+id。glBindTexture使用的是纹理单元名。原创 2022-01-21 05:36:19 · 3095 阅读 · 0 评论 -
openGL之API学习(一九五)OpenGL error ‘invalid enumerant‘
Warning: detected OpenGL error 'invalid enumerant' at after stateset.compileGLObjects in GLObjectsVisitor::apply(osg::StateSet& stateset)glTexImage2D的相关错误原因(很有可能是第一种)GL_INVALID_ENUM is generated if target is not GL_TEXTURE_2D, GL_TEXTURE_1D_ARRAY原创 2022-01-20 06:21:29 · 2981 阅读 · 0 评论 -
openGL之API学习(一九四)glGenTextures glActiveTexture
是否产生即激活了,如果不是osg有问题。应该不会自动激活产生的纹理单元。以下是osg使用纹理的过程,中间缺少glActiveTexture使用纹理单元的过程。1、创建纹理osg::ref_ptr<osg::Texture> tex = new osg::Texture2D(ImageUtils::createEmptyImage(1, 1));2、创建纹理单元GLuint id;glGenTextures( 1L, &id );3、上传纹原创 2022-01-19 21:25:58 · 673 阅读 · 0 评论 -
openGL之API学习(一九三)glGenTextures
生成纹理单元,单元号不一定是连续的,但是没有使用的。单元号是相对GL_TEXTURE0的,对于单元号1,其实是GL_TEXTURE0+1。void glGenTextures( GLsizei n, GLuint * textures);nSpecifies the number of texture names to be generated. 指定生成纹理单元的数量texturesSpecifies an array in which the gen...原创 2022-01-19 06:48:21 · 3231 阅读 · 0 评论 -
openGL之API学习(一九二)PACK与UNPACK
其中带GL_PACK前缀的是压包(将数据从OpenGL中读入内存)参数,带GL_UNPACK前缀的是解包(从内存读入OpenGL)参数。原创 2022-01-17 21:13:21 · 530 阅读 · 0 评论 -
C++学习(四七八)GL_MAX_TEXTURE_SIZE
GLint maxTextureSize;glGetIntegerv(GL_MAX_TEXTURE_SIZE,&maxTextureSize);获取最大纹理大小。原创 2022-01-17 06:47:32 · 1038 阅读 · 0 评论 -
openGL之API学习(一九一)webgl到webgpu
WebGPU是未来用于加速图形和计算的web标准和JavaScript API的工作名称,旨在提供“现代3D图形和计算能力”。它是由W3C的GPU为来自苹果、Mozilla、微软、谷歌和其他公司的工程师开发的与WebGL不同,WebGPU不是任何现有的本地API的直接端口。它基于Vulkan、Metal和Direct3D 12中的概念,旨在为这些跨移动和桌面平台的现代图形api提供高性能2016年6月8日,谷歌向WebGL工作组展示了“显式web图形API”(在两年一次的面对面会议期间)。探讨了构建原创 2021-12-22 05:52:24 · 448 阅读 · 0 评论 -
openGL之API学习(一九零)version directive must be first statement and may not be repeated
错误原因#version 100 #version 130#ifdef GL_ES #version 100 #else #version 130 #endif 正确用法#version 100 或#version 130原创 2021-09-07 06:03:37 · 363 阅读 · 0 评论 -
openGL之API学习(一八九)gl_Position gl_Vertex
gl_Position是顶点着色器(所有版本的顶点着色器)必须计算的值,是每个顶点的最终的位置信息。#version 430 uniform mat4 projMat; uniform mat4 viewMat; uniform mat4 modelMat; layout(location = 0)in vec3 in_position; // matches gl :: EnableVertexAttribArray(0); layout(location = 1)in原创 2021-09-05 06:29:04 · 1999 阅读 · 0 评论 -
openGL之API学习(一八八)glVertexAttribPointer和glVertexPointer
openGL之API学习(三十一)glVertexAttribPointeropenGL之API学习(一六九)glVertexPointer原创 2021-09-01 06:40:27 · 740 阅读 · 0 评论 -
openGL之API学习(一八七)gl_Vertex
gl_Vertex表示传入进来的顶点 比如:三角形 正方体的顶点。从glsl 140开始就没有这个内置变量了。 #version 430 uniform mat4 projMat; uniform mat4 viewMat; uniform mat4 modelMat; layout(location = 0)in vec3 in_position; // matches gl :: EnableVertexAttribArray(0); layout(locati原创 2021-09-01 06:22:45 · 1454 阅读 · 1 评论 -
openGL之API学习(一八六)OpenGL/ES requires precision specifier on this float type
precision mediump float;原创 2021-08-30 06:33:32 · 488 阅读 · 0 评论 -
openGL之API学习(一八五)GLSL ESSL如何监测运行平台
比如是Windows Unix Android等或者是NVIDIA、AMD等原创 2021-08-30 05:56:03 · 201 阅读 · 0 评论 -
openGL之API学习(一八四)如何实现GLSL ESSL的跨平台编译运行
目的:写一份sl(shandering language)代码可以在桌面、手机等终端平台运行,不需要为不同平台写不同的代码无法跨平台的原因:桌面和手机对sl的版本支持是不同的。如果要跨平台需要找到他们共同支持的版本,或者自动监测平台选择不同的版本。比如:桌面可以支持120,手机就没有该版本,有的手机可以支持320 es桌面不支持300,支持300 es...原创 2021-08-30 05:53:01 · 472 阅读 · 0 评论 -
openGL之API学习(一八二)Link failed because of invalid vertex shader
essl版本使用不匹配P0007: Language version '120' unknown, this compiler only supports up to version '320 es'原创 2021-08-29 17:00:28 · 547 阅读 · 0 评论 -
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 评论 -
openGL之API学习(一八一)glTexGen
产生纹理坐标,opengl es无此函数。void glTexGeni( GLenum coord, GLenum pname, GLint param); void glTexGenf( GLenum coord, GLenum pname, GLfloat param); void glTexGend( GLenum coord, GLenum pname, GLdouble param);coord Specifies a texture coord...原创 2021-08-22 12:11:02 · 489 阅读 · 0 评论 -
openGL之API学习(一八零)POINTS LINES TRIANGLES QUADS 绘图顺序规则
默认每一个图形的绘图方向是相同的,要么逆时针(默认方向)要么顺时针。1、GL_TRIANGLES是以每三个顶点绘制一个三角形。第一个三角形使用顶点v0,v1,v2,第二个使用v3,v4,v5,以此类推。如果顶点的个数n不是3的倍数,那么最后的1个或者2个顶点会被忽略。2、GL_TRIANGLE_STRIP如果当前顶点是奇数:组成三角形的顶点排列顺序:T = [n-1 n-2 n].如果当前顶点是偶数:组成三角形的顶点排列顺序:T = [n-2 n-1 n].这样做的原因是保持原创 2021-08-21 06:45:34 · 493 阅读 · 0 评论 -
openGL之API学习(一七九)材质Material原理
在光线照射到某个物体表面的时候,总体上会出现三种反应:吸收,反射以及折射。其中反射又分为漫反射和镜面反射。而所谓的能量守恒法则说的则是,能量不可能凭空产生也不可能凭空消失,只可能发生转换。用在光线传播过程中则可以得到这样一个公式:入射能量=吸收能量+反射能量+折射能量。其中,吸收的能量一般转换为热能,是我们不需要考虑的部分,将这一部分掠去,得到公式:入射能量>=反射能量+折射能量。其中,反射能量可以分为漫反射和镜面反射,而漫反射在我们cg制作过程中,一般为diffuse,而...原创 2021-08-16 06:18:37 · 236 阅读 · 0 评论 -
openGL之API学习(一七八)glsl版本功能演变
GLSL 120 增加1,你可以在着色器中初始化数组,如下所示: 1 2 float a[5] = float[5](3.4, 4.2, 5.0, 5.2, 1.1); float b[5] = float[](3.4, 4.2, 5.0, 5.2, 1.1); 然而,即使使用GLSL 120,Mac OSX Snow Leopard也不支持上述功能。2,你可以在着色器中初始化全局变量,并且值将在链接时设置: 1原创 2021-08-15 07:41:52 · 343 阅读 · 0 评论 -
openGL之API学习(一七七)opengl gles glsl glsl es版本对应关系
OpenGL 版本 GLSL 版本 2.0 110 2.1 120 3.0 130 3.1 140 3.2 150 3.3 330 4.0 400 4.1 410 4.2 420 4.3 430 OpenGL ES 版本 GLSL ES 版本 2.0 100 3.0 300原创 2021-08-15 07:28:40 · 1274 阅读 · 0 评论 -
openGL之API学习(一七六)GLSL变量类型uniform attribute varying in out
OpenGL ES2.0 的三种变量类型(uniform,attribute和varying)原创 2021-08-15 07:24:06 · 612 阅读 · 0 评论 -
openGL之API学习(一七五)如何查看显卡支持了多少OpenGL扩展
在编程中你可以使用特定的库比如GLEW检测相应的扩展是否被支持;你也可以下载OpenGL Extensions Viewer直观的查看支持的OpenGL的特性和扩展,这个软件也有多个平台的版本。原创 2021-08-15 07:06:24 · 599 阅读 · 0 评论 -
openGL之API学习(一七四)如何兼容opengl和d3d
跨越OpenGL和D3D的鸿沟(一):开篇原创 2021-08-15 06:39:29 · 767 阅读 · 0 评论