当前位置 :首页 >> 时尚

OpenGL:绘制网格

2023-04-19   来源 : 时尚

0.5, 1.0, 0.0, // 第二加 0.0, 1.0, 1.0); // 第三加 mat4 tmp2 = mat4(1.0) // 非零常量,本体一个4x4的单位向量 // formula_常量,本体一个3x3的向量vec3 col1 = vec3(1.0, 0.0, 0.5); // 第一加vec3 col2 = vec3(0.0, 1.0, 0.0); // 第二加vec3 col3 = vec3(1.0, 1.0, 1.5); // 第三加mat3 tmp3 = mat3(col1, col2, col3);// 4. 色块谐波并不一定// (1) sampler(谐波支架)是GLSL缺少的可供色块取向常用的内嵌所示表,其中所,// sampler1D,sampler2D,sampler3D 说明不尽相同维度的色块并不一定;// (2) sampler一般来说在片元位图支架中所内判别,被uniform省略符省略,说明这个数据类改型是不常会被修订的;// (3) sampler不能被外部赋绝对值,只能通过GLSL缺少的移动设备数据类改型赋绝对值// 比如TEXTURE2D数据类改型来谐波色块的黄色绝对值(经度素纹)。#version 330 coreout vec4 fragColor; // 所示表位图支架转到换支架in vec2 textureCoord; // 色块经度uniform sampler2D ourTexture; // 色块谐波支架void main(){ fragColor = texture(ourTexture, textureCoord); // 搜集色块的黄色}1.1.2 构件质

 GLSL构件质判别:

struct 构件质名 { 核心成员数据类改型; 核心成员数据类改型; ...} 构件质并不一定数据类改型;

GLSL中所的构件质判别和常用同C自然语言,比如说SQL如下:

struct Light { float intensity; vec3 position;} lightVar;// formula_于// struct Light {// float intensity;// vec3 position;// };// Light lightVar; // Light为新创立的构件质并不一定// 采访构件质核心成员数据类改型float intensity = lightVar.lightVar;vec3 pos = lightVar.position1.1.3 数据构件

 GLSL中所创立数据构件与C自然语言完全相同,但必须要请注意都有两点:

除了 uniform 数据类改型基本上,数据构件的检索只允许常用方程整改型常量;GLSL只支持线性数据构件,当数据构件作为数据类改型的六角形参时能够称之为明其大小;// 创立一个数据构件// 注:Light为1.1.2判别的构件质并不一定float frequencies[3];uniform vec4 lightPosition[4];const int numLights = 2;Light lights[numLights];float a[5];float b[] = a; float b[5] = a; // formula_float a[5] = float[5](3.4, 4.2, 5.0, 5.2, 1.1);float a[5] = float[](3.4, 4.2, 5.0, 5.2, 1.1); // formula_// 数据构件赋绝对值float a[5];a[0] = 1.0;a[1] = 0.5;...a[4] = 0.5;1.2 操作符1.2.1 操作符

 绝大多数的操作符与 C 自然语言中所相符。与 C 自然语言不尽相同的是:GLSL 中所对于参与GPU的所示表并不一定拒绝比较恰当,即操作符两侧的数据类改型能够有不尽相同的所示表并不一定。对于二目操作符(*,/,+,-),操纵数能够为流水线改型或整改型,除此基本上,幂操纵可以放进不尽相同的所示表并不一定相互间,如流水线改型、formula_和向量等。

1.2.2 流程控制操作符

 GLSL缺少了if-else、switch-case-default(选人择),for、while或do..while(循环系统),discard、return、break和countiune(函数调用)控制操作符,除了discard,其他功能与C一样。

判别操作符// if;还有else判别if(boolean_expression) { /* 如果格拉常量为容将执行者的操作符 */} else { /* 如果格拉常量为骗将执行者的操作符 */}// switch;还有-case判别switch(expression){ case constant-expression : statement(s); break; /* 选人项的 */ case constant-expression : statement(s); break; /* 选人项的 */ /* 您可以有随意常用量的 case 操作符 */ default : /* 选人项的 */ statement(s);}

循环系统操作符

// while循环系统while(condition) { statement(s);}// do..while循环系统do { statement(s);} while(condition);

discard、break、return和continue

// break运用于延后循环系统;// continue运用于结束本次循环系统;// return运用于延后循环系统,并延后当年前数据类改型执行者,同时送回一个绝对值给数据类改型呼叫者;// discard只能抑制作用所示表位图支架中所,运用于丢弃所示表位图支架的当年前所有操纵#version 330 coreout vec4 fragColor; // 所示表位图支架转到换支架in vec2 textureCoord; // 色块经度uniform sampler2D ourTexture; // 色块谐波支架void main(){ // 搜集色块的黄色绝对值textureColor // 当色块的黄色绝对值等同于vec3(1.0,0.0,0.0)时 // 丢弃当年前所示表位图支架的所有操纵 vec4 textureColor = texture(ourTexture, textureCoord); if (textureColor.rgb == vec3(1.0,0.0,0.0)) discard; fragColor = textureColor}1.3 数据类改型

 GLSL中所数据类改型判别:

// 数据类改型回应returnType functionName (type0 arg0, type1 arg1, ..., typen argn);// 数据类改型判别returnType functionName (type0 arg0, type1 arg1, ..., typen argn){ // do some computation return returnValue;}

 由上述判别可知,GLSL中所的数据类改型回应、判别和常用都是与C相符的,即先回应再继续常用,并且如果数据类改型没有人送回绝对值,必须将送回绝对值并不一定主角为void,并且数据类改型的常量必须要称之为明完全相符并不一定,并称之为明限定符(in/out/inouts)、const省略常量(选人项)。GLSL中所数据类改型名可以被再继续加枯,只要不尽相同数据类改型名的常量加表(主要是称之为常量的并不一定和个数)不尽相同就可以了。mian数据类改型是位图支架程序在的入口。

【更是多新形式自学资讯,游标右侧镜像免费补发,先码隔壁不旅人~】

新形式开发计划(资讯PDF+视频教程+面试题)(FFmpeg+WebRTC+RTMP+RTSP+HLS+RTP)

1.4 限定符(Qualifiers)1.4.1 存储限定符 通过uniform分设三角六角形的黄色,比如说SQL:// 所示表位图支架#version 330 coreout vec4 FragColor;uniform vec4 ourColor; // 所示表位图支架转到换支架,在OpenGL程序在SQL中所主角这个数据类改型void main(){ FragColor = ourColor;}// 呼叫glGetUniformLocation数据类改型换取位图支架中所uniform一般来说的检索/右方绝对值// 再继续呼叫glUniform4f数据类改型为uniform一般来说设绝对值float timeValue = glfwGetTime();float greenValue = (sin(timeValue) / 2.0f) + 0.5f;int vertexColorLocation = glGetUniformLocation(shaderProgram, "ourColor");glUseProgram(shaderProgram);glUniform4f(vertexColorLocation, 0.0f, greenValue, 0.0f, 1.0f);

注:Uniform是一种从CPU中所的应用向GPU中所的位图支架发送所示表的模式,但uniform和线段一般来说有些不尽相同。首先,uniform是具体来说的(Global)。具体来说意味着uniform数据类改型能够在每个位图支架程序在取向中所都是独一无二的,而且它可以被位图支架程序在的随意位图支架在随意年前期采访。第二,无论你把uniform绝对值分设成什么,uniform常会依然存留它们的所示表,直到它们被再继续加置或新增。

 注:varying、attribute已不久以后用。

1.4.2 常量限定符

 GLSL 缺少了一种一般来说的限定符用来判别某个数据类改型的绝对值年前提可以被数据类改型修订。

比如说SQL:

vec4 myFunc(inout float myFloat, // inout parameter out vec4 myVec4, // out parameter mat4 myMat4); // in parameter (default)

1.4.3 灵敏度限定符

 OpenGL ES 与 OpenGL 相互间的一个一区别就是在 GLSL 中所过渡到了灵敏度限定符。灵敏度限定符可使位图支架的发起者恰当判别位图支架数据类改型计数时常用的灵敏度,数据类改型可以选人择被回应为较差、中所或高灵敏度。灵敏度限定符可告知SQL使其在计数时较小数据类改型潜在的灵敏度不定化范围内,当常用较差灵敏度时,OpenGL ES 的实现可以更是快速和较差功耗地试运行位图支架,生产成本的增加来自于灵敏度的舍弃,如果灵敏度选人择不合理,位图支架试运行的结果常会很失容。

 比如说SQL:

lowp float color;out mediump vec2 P;lowp ivec2 foo(lowp mat3);highp mat4 m;

 除了灵敏度限定符,还可以称之为明选人项常用的灵敏度。如果某个数据类改型没有人常用灵敏度限定符称之为明常用何种灵敏度,则常会常用该数据类改型并不一定的选人项灵敏度。选人项灵敏度限定符放进位图支架SQL起始右方,都有是一些用例:

precision highp float;precision mediump int;

 当为 float 称之为明选人项灵敏度时,所有基于流水线改型的数据类改型都常会意在作为选人项灵敏度,与此完全相同,为 int 称之为明选人项灵敏度时,所有的基于整改型的数据类改型都常会意在作为选人项灵敏度。在线段位图支架中所,如果没有人称之为明选人项灵敏度,则 int 和 float 都常用 highp,即线段位图支架中所,从未常用灵敏度限定符称之为明灵敏度的数据类改型都选人项常用最高灵敏度。在所示表位图支架中所,float 并没有人选人项的灵敏度分设,即所示表位图支架中所能够为 float 选人项灵敏度或者为每一个 float 数据类改型称之为明灵敏度。

1.4.4 不宜不定限定符

 当位图支架被编译时,SQL常会对其开展冗余,这种冗余操纵确实引起称之为令再继续加选取(instruction reordering),称之为令再继续加选取确实引起的结果是当两个位图支架开展不尽相同的计数时无法保证受益不尽相同的结果。一般来说但会,不尽相同位图支架相互间的这种绝对值的歧异是允许普遍存在的。如果要可避免这种歧异,则可以将数据类改型回应为invariant,可以基本上称之为明某个数据类改型或开展具体来说分设。

比如说SQL:

// 使并从未普遍存在的数据类改型绝对值不宜不定invariant gl_Position; // make existing gl_Position be invariantout vec3 Color;invariant Color; // make existing Color be invariant// 回应一个数据类改型时,使其不宜不定invariant centroid out vec3 Color;1.5 移动设备数据类改型与移动设备数据类改型1.5.1 移动设备数据类改型

 GLSL中所还移动设备了其他的一些数据类改型,我们在早先的自学中所完全相符详说。

1.5.2 移动设备数据类改型

 GLSL中所移动设备了很多数据类改型实现对非零和formula_的操纵。

 GLSL中所还移动设备了很多其他数据类改型,我们在早先的自学中所完全相符详说。

2. 色块

 色块(TEXTURE),即物质凹凸不平的样子。在微处理支架的当今世界中所,我们必必须绘成的只能只能是一些更为基本的六角椭圆形,比如点、线、三角六角形,这些基本显然是无法将一个现实当今世界中所的物质很好的简要描述在鼠标上的。一般来说我们通过色块给定将物质凹凸不平所示表刷到物质的几何所示六角形下面,从未完成三维的操作过程,将物质从现实当今世界中所三维到虚拟当今世界中所。单纯来说,色块就是一副只读点阵所示,而把一副点阵所示给定到所示六角形上的操作过程叫做色块给定。从另一个并不一定来说它是一个只读所示表装入,而一般来说它运用于存储点阵所示讯息。

2.1 纹素

 纹素,即色块元素(Texel),是色块所示六角形的整体静态,运用于判别点阵所示取向的紧致。3D 取向紧致的整体单位是色块,而 2D 取向由所示像(Pixel)都是由。在微处理支架所示六角形学当中所,纹素代表者了给定到点阵所示凹凸不平的二维色块的最小静态,纹素和所示像很相同因为都代表者了点阵所示的基本静态,但是在三维中所的纹素和所示表中所的所示像在看出的时候是有一区别的,在一般来说的3D给定但会,纹素和所示像可以一一相异,但大多数但会,他们并不能直接给定。 还包括3D色块的取向靠近电视直播时纹素有点相对不大,每个纹素确实普遍存在好几个所示像,并且容易看借助于色块外观设计。当不尽相同的色块取向被移到更是远的西南方时,色块给定所示案有点更小。最后,每个纹素可以更为相等所示像。然后平均采用常会被用来第一组几个纹素成为一个所示像。如果取向充足远,或者其中所一个小面与电视直播视线夹角六角演化成圆锥,那么纹素确实更为如此之小,使得所示案的所谓在观察点阵所示中所被盗。

 色块点阵所示所示表普遍存在多种彩色格式(PixelFormat)和多种存储格式(PixelType),比如GL_RGB、GL_RGBA、GL_LUMINANCE和GL_UNSIGNED_SHORT_4_4_4_4、GL_UNSIGNED_SHORT_5_6_5等,这两个一般来说协力要求了每一个色块所示表静态(纹素)的密切涉及。

2.2 色块经度

 而借助于名,鼠标的经度以鼠标左边为的点,从的点常会合沿右一段西南方为x传动装置,沿下一段西南方为y传动装置,经度系中所的每一个经度线段就是一个所示像。同理,色块也有自己的经度,它是以色块(点阵所示)的左方为的点,从的点常会合沿右一段西南方为s传动装置,沿上一段西南方为t传动装置,经度系中所的每一个经度线段就是一个纹素,每个纹素的经度范围内座落在(0,0)~(1,1)相互间。鼠标经度系和色块经度系示意所示如下:

 在上文中所我们了解到,OpenGL的线段经度系是在当今世界经度系上,当线段经度经过线段位图支架所在右方理后,将常会被转到换(归一化)为一个通用设备经度。骗如我们必须要将色块所示表给定到OpenGL绘成的正方六角形上,就必须要称之为明四边六角形的每个线段各自相异色块的哪个均,这样每个线段就常会区别着一个色块经度(Texture Coordinate),用来标明该从哪个均谐波(Sampling)受益相异色块黄色绝对值,而这个给定的操作过程被说是之为色块给定或三维,比如将色块的ABCD经度给定到正方六角形线段abcd的结果如下所示(三)右所示:

 或许你常会疑惑,为什么所示(三)给定的结果所示表是倒置的?这是因为色块的分解是由所示表所示像来分解的,而所示表的存储在在左边开始的,则有,所示表左边所示像分解的色块均就在色块左方所在右方,即所示表的左边相异到了色块的左方,倒置了。因此,如果要使所示表必必须按正常一段西南方刷到正方六角形上,就必须要对色块经度开展上下对换,即A与D对换,B与C对换。在OpenGLSQL中所,线段经度和色块经度相异关系:

// 三维倒置float mVertices[] = { // 线段经度 // 黄色 // 色块经度 0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, // B 0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, // C -0.5f, -0.5f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, // D -0.5f, 0.5f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f // A};// 三维正常float mVertices2[] = { // 线段经度 // 黄色 // 色块经度 0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, // B 0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.1f, // C -0.5f, -0.5f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, // D -0.5f, 0.5f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f // A};

【更是多新形式自学资讯,游标右侧镜像免费补发,先码隔壁不旅人~】

新形式开发计划(资讯PDF+视频教程+面试题)(FFmpeg+WebRTC+RTMP+RTSP+HLS+RTP)

2.3 色块环抱

 色块经度的范围内一般来说在在[0, 0]到[1, 1],多达[0.0, 1.0]的范围内是允许的,而对与超借助于范围内的内容要如何看出,这就取决于色块的环抱模式(Wrapping mode)。OpenGL缺少了多种色块环抱模式:

各种环抱模式缺点如下所示右所示:

2.4 色块漂白

 色块经度不依赖于灵敏度(Resolution),它可以是随意流水线绝对值,所以OpenGL必须要告诉怎样将 色块所示像(Texture Pixel)给定到色块经度。当你有一个很大的物质但是色块的灵敏度很较差的时候这就更为很再继续加要了,OpenGL对于而所常会开展色块漂白(Texture Filtering),主要缺少了GL_NEAREST和GL_LINEAR两种漂白模式,这两种插值模式依据不尽相同的算法常会证明了不尽相同的所示像结果。

GL_NEAREST

 Nearest Neighbor Filtering,即附近插值,是OpenGL选人项的色块漂白模式。当分设为GL_NEAREST的时候,OpenGL常会选人择中所心点最接近色块经度的那个所示像。下所示中所你可以看得见四个所示像,加号代表者色块经度。左边那个色块所示像的中所心西南方色块经度最近,所以它常会被选人择为取样黄色:

GL_LINEAR

 (Bi)linear Filtering,即线性插值,它常会基于色块经度周边地区的色块所示像,计数借助于一个插绝对值,近似借助于这些色块所示像相互间的黄色。一个色块所示像的中所心西南方色块经度越近,那么这个色块所示像的黄色对最后的取样黄色的建树越高。下所示中所你可以看得见送回的黄色是附近所示像的混合色。

两种插值缺点如下所示:

 由上所示可知,GL_NEAREST导致了黏稠的所示案,我们必必须清晰看得见都是由色块的所示像,而GL_LINEAR必必须导致更是平滑的所示案,根本无法看借助于单个的色块所示像。相比于GL_NEAREST,GL_LINEAR可以导致更是容实的转到换支架。

2.5 多级渐远色块(Mipmap)

 想象一下,骗设我们有一个还包括着上千物质的大客厅,每个物质上都有色块。有些物质常会很远,但其色块常会拥有与近所在右方物质同样高的灵敏度。由于远所在右方的物质确实只导致很少的所示表,OpenGL从高质量色块中所为这些所示表换取合理的黄色绝对值就很麻烦,因为它必须要对一个跨过色块很只能有的所示表只拆开一个色块黄色。在小物质上这常会导致不容实的感觉,更是不用说对它们常用高质量色块不必要寄存器的问题了。OpenGL常用一种叫做多级渐远色块(Mipmap)的观念来应付这个问题,它单纯来说就是一系加的色块点阵所示,后一个色块点阵所示是年前一个的二分之一。多级渐远色块暗藏的理念很单纯:距方向上的西南方多达一定的阈绝对值,OpenGL常会常用不尽相同的多级渐远色块,即最适合于物质的西南方的那个。由于西南方远,像素不高也不常会被用户请注意到。同时,多级渐远色块另一加分之所在右方是它的安全性更为好。让我们看一下多级渐远色块是什么样子的:

 OpenGL缺少了glGenerateMipmaps数据类改型为每个色块点阵所示创立一系加多级渐远色块。特别的,在位图中所切换多级渐远色块档次(Level)时,OpenGL在两个不尽相同档次的多级渐远色块层相互间常会导致不容实的生硬边界。就像都是的色块漂白一样,切换多级渐远色块档次时你也可以在两个不尽相同多级渐远色块档次相互间常用NEAREST和LINEAR漂白。为了称之为明不尽相同多级渐远色块档次相互间的漂白模式,OpenGL缺少了都有漂白模式来代替原有的GL_NEAREST和GL_LINEAR模式。

3. OpenGL实战:绘成色块

 色块点阵所示确实被可用为各种各样的格式,每种都有自己的所示表构件和选取。OpenGL官方推荐常用stb_image.h来存储这些点阵所示,stb_image.h是SeanBarrett的一个更为风行的单codice_点阵所示存储坎,它必必须存储只能有风行的软件包,并且必必须很单纯得定位到我们的二期工程之中所。 将一张点阵所示(色块)给定到一个正方六角形上的步骤如下:

(1)创立色块取向,并将其初始化到年前提并不一定GL_TEXTURE_2D;

// 数据类改型的设计:void glGenTextures(GLsizei n, GLuint * textures);// // 数据类改型抑制作用:创立一个色块取向,并送回唯一的ID// 常量说明:// n 说明要创立的色块取向常用量;// textures 说明要创立的所有色块取向相异的IDGLuint mTextureId = NULL;glGenTextures(1, AndrewmTextureId);// 数据类改型的设计:void glBindTexture(GLenum target,GLuint texture);// // 数据类改型抑制作用:初始化色块取向到色块年前提GL_TEXTURE_2D// 常量说明:// target 称之为明色块要初始化到的年前提并不一定;// texture 说明色块取向相异的ID;glBindTexture(GL_TEXTURE_2D, mTextureId);

注:呼叫glDeleteTextures()数据类改型释放这些色块取向人力资源。

(2)分设色块环抱和插值模式;

// 数据类改型的设计:void glTexParameteri(GLenum target,GLenum pname,GLint param);// // 数据类改型抑制作用:分设色块常量,比如环抱模式、插值模式等// 常量说明:// target 说明色块取向ID;// pname 说明完全相符的色块常量,比如GL_TEXTURE_WRAP_S为S传动装置的环抱模式;// param 称之为明色块常量的绝对值,简要参考色块主要的环抱模式和插值模式;glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); // 分设s传动装置环抱模式为GL_REPEATglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); // 分设t传动装置环抱模式为GL_REPEATglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); // 分设较小漂白模式为线性漂白glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); // 分设放大漂白模式为线性漂白

(3)驱动支架本地所示表,分解色块;

#define STB_IMAGE_IMPLEMENTATION#include "stb_image.h"// 驱动支架本地所示表到寄存器int imageWidth, imageHeight, imageChannelCount;unsigned char* data = stbi_load("D:/LearnOpenGL/src/lesson03/zhanlang.jpg", AndrewimageWidth, AndrewimageHeight, AndrewimageChannelCount, 0);if (!data) { std::cout << "load image failed" << std::endl; return;}// 数据类改型的设计:void glTexImage2D(GLenum target,GLint level,// GLint internalformat,GLsizei width,// GLsizei height,GLint border,GLenum format,// GLenum type,const void * data)// // 数据类改型抑制作用:称之为明一个二维的色块点阵所示(Texture Image)// 常量说明:// target 称之为明色块年前提;// level 称之为明所示表档次,0为整体点阵所示档次;// internalformat 称之为明色块中所黄色绝对值的常用量,比如GL_R说明所示表所示像还包括R、G、B绝对值;// width 说明所示表的宽度;// height 说明所示表的高度;// border 完全相符含义不清楚,固定为0;// format 称之为明所示表的黄色格式,比如GL_RGB;// type 称之为明所示像所示表的所示表并不一定,比如GL_UNSIGNED_BYTE;// data 称之为明所示表所示表;glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, imageWidth, imageHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, data);// 数据类改型的设计:void glGenerateMipmap(GLenum target);// // 数据类改型抑制作用:为称之为明的色块取向分解Mipmap(多级渐远色块)// 常量说明:// target 说明色块取向ID;glGenerateMipmap(GL_TEXTURE_2D); // 换取色块后,释放所示表人力资源stbi_image_free(data);

注:通过判别STB_IMAGE_IMPLEMENTATION,未及所在右方理支架常会修订codice_,让其只还包括涉及的数据类改型判别OpenBSD,等同于是将这个codice_不定为一个 .cpp 文件了。

(4)应用色块。

 当存储完色块后,接下来就是如何将色块给定到OpenGL绘成的正方六角形上,这个操作过程也说是“三维”。我将这均分为三个步骤:首先,修订我们年前的线段所示表,即得知OpenGL如何谐波色块。每个线段还包括右方、黄色、色块经度一般来说,且线段右方一般来说经度要与色块经度给定一一相异。然后,再继续镜像各个线段一般来说。OpenGL属于自己线段格式如下:

涉及SQL如下:

float vertices[] = { // 线段经度 // 黄色 // 色块经度 0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, // top right 0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.1f, // bottom right -0.5f, -0.5f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, // bottom left -0.5f, 0.5f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f // top left };// 镜像右方一般来说,layout=0glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)0);glEnableVertexAttribArray(0);// 镜像黄色一般来说,layout=1glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)(3 * sizeof(float)));glEnableVertexAttribArray(1);// 镜像色块经度一般来说,layout=2glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)(6 * sizeof(float)));glEnableVertexAttribArray(2);

 接着我们必须要调整线段位图支架使其必必须接受线段经度为一个线段一般来说,即线段位图支架的回传的线段所示表由右方、黄色绝对值、色块经度一般来说密切涉及,并将线段的黄色绝对值和色块经度作为线段位图支架的转到换支架,也就是所示表位图支架的回传,所示表位图支架根据色块经度对色块开展谐波,受益相异的色块黄色绝对值。涉及SQL如下:

// 线段位图支架OpenBSD#version 330 corelayout (location = 0) in vec3 aPos; // 位图支架回传layout (location = 1) in vec3 aColor;layout (location = 2) in vec2 aTextureCoord;out vec3 ourColor; // 位图支架转到换支架out vec2 ourTextureCoord;void main(){ gl_Position = vec4(aPos, 1.0); ourColor = aColor; ourTextureCoord = aTextureCoord;};// 所示表位图支架OpenBSD#version 330 coreout vec4 rgbColor; // 所示表位图支架转到换支架in vec3 ourColor; // 所示表位图支架回传in vec2 ourTextureCoord;uniform sampler2D ourTexture; // 谐波支架void main(){ // 根据色块经度对色块开展谐波 // 将谐波受益的色块黄色黄色绝对值赋绝对值给rgbColor rgbColor = texture(ourTexture, ourTextureCoord);};

 之年前,将色块取向初始化到色块年前提上,之后呼叫glDrawElements数据类改型实现色块黄色位图,即该数据类改型被呼叫后常会自动把色块赋绝对值给所示表位图支架的谐波支架。SQL如下:

glUseProgram(mShaderProgramId);glBindVertexArray(mVAOId);// 数据类改型的设计:void glBindTexture(GLenum target,GLuint texture)// // 数据类改型抑制作用:将色块取向初始化到色块年前提上// 常量说明:// target 运用于称之为明要初始化到的色块年前提;// texture 运用于称之为明被初始化的色块取向ID;glBindTexture(GL_TEXTURE_2D, mTextureId);glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);

如果你对新形式开发计划有兴趣,实在文章对您有鼓励,别忘了点赞、展品哦!或者对本文的一些阐述有自己的看法,有任何问题,追捧在右侧评论一区讨论!

小孩子厌食不吃饭怎么办
武汉中医去哪看
南京妇科医院哪家最好
北京甲状腺治疗方法有什么
天津男科
少点套路,旅游区才有出路

转自:之中工网原标题:多于点之中国武术,国家森林公园才有出路暑假将至,夏天同游最高峰也将即将来临。近来,随着五一小长假和刚过去的端午星期四牵起的旅游观光热,颇受欢迎国家森林公园参观观赛...

友情链接