首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

OpenGL glDrawElements 绘制方法

,那么六个面,每个面由两个三角形组成,就得向渲染管线传入 36 个顶点,36 个顶点按照顺序进行绘制,而实际,一个矩形也就才 8 个顶点而已。...glDrawElements 绘制方法 glDrawElements 方法还是需要传递顶点数据,但只需要传递物体实际顶点数据,也就是最少,不重复顶点数据。...由三个三角形组成倒置梯形,实际只有五个顶点 ? ,因此也只传递了五个顶点,接下来就是确定这个五个顶点索引顺序。 索引顺序和我们要绘制方式有很大关系,不同绘制方式索引顺序不同。...glDrawElements 和 glDrawArrays 对比 glDrawElements 方法 count 参数定义了要取多少个索引出来绘制,而且这个绘制是连续,必须要把 count 数量顶点绘制完...所以说,能用 glDrawElements 方式还是要采用

2.2K21

NDK OpenGLES3.0 开发(四):VBO、EBO 和 VAO

VBO 和 EBO VBO(Vertex Buffer Object)是指顶点缓冲区对象,而 EBO(Element Buffer Object)是指图元索引缓冲区对象,VAO 和 EBO 实际是对同一类...OpenGLES2.0 编程中,用于绘制顶点数组数据首先保存在 CPU 内存,在调用 glDrawArrays 或者 glDrawElements 等进行绘制时,需要将顶点数组数据从 CPU 内存拷贝到显存...VBO(EBO)创建和更新: // 创建 2 个 VBO(EBO 实际跟 VBO 一样,只是按照用途另一种称呼) glGenBuffers(2, m_VboIds); // 绑定第一个 VBO,...VAO 与 VBO 之间关系 基于小节例子创建 VAO : // 创建并绑定 VAO glGenVertexArrays(1, &m_VaoId); glBindVertexArray(m_VaoId...glUseProgram(m_ProgramObj); glBindVertexArray(m_VaoId); glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT

1.1K40
您找到你想要的搜索结果了吗?
是的
没有找到

OpenGLES绘制立体多边形加纹理

前面写了OpenGLES入门篇,一些朋友觉得还不错,找到我问了一些知识,这次我有针对性写下这篇文章,也为我OpenGLES进阶篇做个开始。...最终结果.png 由于是进阶篇,对基础介绍就不会那么多了: 绘制立体多边形 绘制多边形我们是需要多边形顶点数据,这些数据我从网上下载了一个obj文件,从中取出了3个多边形顶点数据,并给它加上了颜色数据...但这些多边形索引数据,obj里并不是很清楚(可能是我不会用),我使用了自己开发项目的代码来构造。关于构造代码,由于公司利益,这里不会给出,直接会使用构造后结果。...[self render]; } return self; } +(Class)layerClass{ //OpenGL内容只会在此类layer描绘...这个时候,glsl语言写法就有区别了,可以把它们写在同一个文件里,也可以分别写出来,这里我是分别写出了图形所对应VertexShader.glsl、FragmentShader.glsl和纹理所对应

1.8K120

OpenGLES-03 使用索引绘制矩形

还好我们这会儿只要画一个矩形,当我们要画成千上万个矩形或者别的多边形时候,这样绘制方法产生额外消耗会更多从而产生一大堆浪费。 更好解决方案是只储存不同顶点,并设定绘制这些顶点顺序。...还好OpenGL有这样方式: glDrawElements(); glDrawElements 函数原型为:glDrawElements(GLenum mode, GLsizei count, GLenum...第三个参数 indices 是存放顶点索引数组。(indices 是 index 复数形式,3D 里面很多单词复数都挺特别的。) 索引缓冲对象(简称EBO)工作方式正是这样。...positionSlot, 3, GL_FLOAT, GL_FALSE, 0, vertices); glEnableVertexAttribArray(_positionSlot); glDrawElements...,我们可以发现,运行图中矩形是个长方形,而我们给坐标,照理来讲应该是正方形,这是因为屏幕宽高比不同,对应openGL坐标x、y坐标也不一样,后面我们会讲到投影矩阵,投影矩阵能修复这个问题。

1.2K100

OpenGL学习笔记 (二)- 顶点与绘制指令

顶点 顶点(vertex)实际就是坐标,是几何图元组成部分。在OpenGL中,使用四个分量(齐次坐标)来描述一个位置。...创建缓冲对象时,并不需要给出缓冲对象大小。实际,glGenBuffers作用是返回缓冲对象名称。 绑定对象时,我们把一个缓冲对象绑定到一个确定目标上。...VBO之内顶点数据实际没有语义,只是以二进制形式缓存,故VBO不可以直接进行绘制。...绘制指令 OpenGL中以glDraw开头就是绘制指令。虽然glDraw开头函数众多,不过它们大致可以分为以glDrawArrays和glDrawElements为首两族。...因此我们还需要传入索引数据类型(如无符号整数GL_UNSIGNED_INT)。另外,在使用glDrawElements之前,还需要给VAO绑定一个索引,在下一节中将会进行详细说明。

1.4K10

OpenGLES(六)-综合案例:索引绘图OpenGLES(六)-综合案例:索引绘图

索引绘图: 我们除了一个顶点缓存区外,还有一个索引缓存区用来存放顶点索引值。通过索引顺序加之图元连接方式就可以构成一个基本图元(多数情况为三角形)。共享机制在提高内存使用效率非常重要。...1, 2, 4, //上前 2, 3, 4, //右 0, 4, 3, //后 }; //顶点缓存区初始化...glUniform1i(glGetUniformLocation(self.myProgram, "colorMap"), 0); glDrawElements(GL_TRIANGLES...iOS-使用coreGraphics进行图片解压缩 相比顶点绘制方式而言,索引绘图只有在最后绘制API选择不同:glDrawElements 放出以上代码部分详细注释:传送门 GLKit实现...1, 2, 4, //上下 2, 3, 4, //左 0, 4, 3, //后 }; glDrawElements

49630

OpenGL ES 对象

OpenGL ES 2.0 编程中,用于绘制顶点数组数据首先保存在 CPU 内存,在调用 glDrawArrays 或者 glDrawElements 等进行绘制时,需要将顶点数组数据从 CPU 内存拷贝到显存...VBO(EBO)创建和更新: // 创建 2 个 VBO(EBO 实际跟 VBO 一样,只是按照用途另一种称呼) glGenBuffers(2, m_VboIds); // 绑定第一个 VBO,拷贝顶点数组到显存...VAO 与 VBO 之间关系 基于小节例子创建 VAO : // 创建并绑定 VAO glGenVertexArrays(1, &m_VaoId); glBindVertexArray(m_VaoId...,创建方式也大致一致,都是显存一块用于储存特定数据区域。...当数据加载到 UBO ,那么这些数据将存储在 UBO ,而不再交给着色器程序,所以它们不会占用着色器程序自身 uniform 存储空间,UBO 是一种新从内存到显存数据传递方式,另外 UBO 一般需要与

1.7K54

熟悉 OpenGL VAO、VBO、FBO、PBO 等对象,看这一篇就够了

OpenGL ES 2.0 编程中,用于绘制顶点数组数据首先保存在 CPU 内存,在调用 glDrawArrays 或者 glDrawElements 等进行绘制时,需要将顶点数组数据从 CPU 内存拷贝到显存...VBO(EBO)创建和更新: // 创建 2 个 VBO(EBO 实际跟 VBO 一样,只是按照用途另一种称呼) glGenBuffers(2, m_VboIds); // 绑定第一个 VBO,...VAO 与 VBO 之间关系 基于小节例子创建 VAO : // 创建并绑定 VAO glGenVertexArrays(1, &m_VaoId); glBindVertexArray(m_VaoId...,创建方式也大致一致,都是显存一块用于储存特定数据区域。...当数据加载到 UBO ,那么这些数据将存储在 UBO ,而不再交给着色器程序,所以它们不会占用着色器程序自身 uniform 存储空间,UBO 是一种新从内存到显存数据传递方式,另外 UBO 一般需要与

8.5K82

图元装配和光栅化

性能提示 应用程序应该用 尽可能大图元尺寸 调用 glDrawElements 和 glDrawElementsInstanced。...对于上图 相反顶点顺序,如果我们调用glDrawElements*** 绘制两个条带, 组合元素索引列表为(0,1,2,3,3,8,8,9,10,10),粗体表示组合元素索引添加新索引。...对于 相同顶点顺序,如果我们调用glDrawElements*** 绘制两个条带, 组合元素索引列表为(0,1,2,3,4,4,8,8,9,10,10),粗体表示组合元素索引添加新索引。...glDrawArrays(GL_TRIANGLE_FAN, 0, 4); 为了避免伪像,我们需要执行 深度测试 和 深度值写入深度缓冲区 之前,在计算出来深度值添加一个偏移量。...小结 学习了OpenGL ES支持图元类型 了解了如何用常规非实例化和实例化绘图调用高效绘制它们 在顶点执行坐标转换方法 光栅化相关知识

3K20

面试中经常被问到 OpenGL ES 对象,你知道有哪些?

OpenGL ES 2.0 编程中,用于绘制顶点数组数据首先保存在 CPU 内存,在调用 glDrawArrays 或者 glDrawElements 等进行绘制时,需要将顶点数组数据从 CPU 内存拷贝到显存...VBO(EBO)创建和更新: // 创建 2 个 VBO(EBO 实际跟 VBO 一样,只是按照用途另一种称呼) glGenBuffers(2, m_VboIds); // 绑定第一个 VBO,...VAO 与 VBO 之间关系 基于小节例子创建 VAO : // 创建并绑定 VAO glGenVertexArrays(1, &m_VaoId); glBindVertexArray(m_VaoId...,创建方式也大致一致,都是显存一块用于储存特定数据区域。...当数据加载到 UBO ,那么这些数据将存储在 UBO ,而不再交给着色器程序,所以它们不会占用着色器程序自身 uniform 存储空间,UBO 是一种新从内存到显存数据传递方式,另外 UBO 一般需要与

2.1K40

NDK OpenGLES3.0 开发(五):FBO 离屏渲染

什么是 FBO FBO(Frame Buffer Object)即帧缓冲区对象,实际是一个可添加缓冲区容器,可以为其添加纹理或渲染缓冲区对象(RBO)。...NDK OpenGLES 开发中,一般使用 GLSurfaceView 将绘制结果显示到屏幕,然而在实际应用中,也有许多场景不需要渲染到屏幕,如利用 GPU 在后台完成一些图像转换、缩放等耗时操作,...使用 FBO 可以让渲染操作不用再渲染到屏幕,而是渲染到离屏 Buffer 中,然后可以使用 glReadPixels 或者 HardwareBuffer 将渲染后图像数据读出来,从而实现在后台利用...// 我们再拿 FBO 纹理 m_FboTextureId 做一次普通渲染便可将之前离屏渲染结果绘制到屏幕。...GL_TEXTURE0); //绑定 FBO 纹理 glBindTexture(GL_TEXTURE_2D, m_FboTextureId); glUniform1i(m_SamplerLoc, 0); glDrawElements

1.8K71

反卷积,采样,池化理解

向AI转型程序员都关注了这个号 机器学习AI算法工程   公众号:datayx 采样与池化 图示理解,使用三张图进行说明:  图(a)表示UnPooling过程,特点是在Maxpooling...从图中即可看到两者结果不同。 简单来说:采样指的是任何可以让你图像变成更高分辨率技术。...最简单方式是重采样和插值:将输入图片进行rescale到一个想要尺寸,而且计算每个点像素点,使用如***双线性插值***等插值方法对其余点进行插值来完成采样过程。...在FCN、U-net等网络结构中,我们见识到了采样这个东西。 图(c)为反卷积过程,反卷积是卷积逆过程,又称作转置卷积。...附录 反卷积(Deconvolution)、采样(UNSampling)与池化(UnPooling)、可视化代码: https://github.com/heuritech/convnets-keras

1K30

shell进阶

注意事项: 指令执行是从上而下、从左而右分析与执行; 指令下达就如同第四章内提到: 指令、选项与参数间多个空白都会被忽略掉; 空白行也将被忽略掉,并且 [tab] 按键所推开空白同样视为空格键...练习简单shell 利用 date 进行文件建立 假设我服务器内有数据库,数据库每天数据都不太一样,因此当我备份时,希望将每天资料都备份成不同档名, 这样才能够让旧数据也能够保存下来不被覆盖...xiaoqi <--在 script 运作中,这两个变量有生效 [root@study xiaoqi]# echo ${firstname} ${secname} <--事实,...file1 是否比 file2 旧 -ef 判断 file1 与 file2 是否为同一文件,可用在判断 hard link 判定。...那个 $@ 与 $* 基本还是有所不同啦!不过,一般使用情况下可以直接记忆 $@ 即可!

64430

差点破产是什么体验?

前言 2020年,很多小初创公司因为疫情原因,纷纷倒闭关门,哪怕是勉强支撑也大多是一蹶不振濒临破产。...但是没想到是因为内部测试期间一些小疏忽,他们收到是一纸 72000 美元(约 47 万人民币)天价账单!...(因为站点规模很小,完全用不 SQL Server 或者任何其他成熟商业数据库) Sudeep Chauhan还非常小心对这个GCP项目设置了 7 美元云资源使用预算,很多小伙伴看到这里肯定会想...不难想象,如果我在起床刷牙时候看到我500额度信用卡刷了一个几万账单出来,我也会当场晕倒。...所以按照Firebase 读取操作成本: (0.06 美元 / 100,000) * 116,000,000,000 = 69,600 美元!

2.3K10

opengl-球体绘制

球体绘制第一次接触理解花了点时间 一、球体坐标分解 球体坐标分解 按照经纬度来理解,经度是y轴切面,维度是x-z 平面的弧度 经纬度 将y轴切分成64等分,x-z平面切分成64等分扇形 y轴从上到下取值为...(glm::vec3(xPos, yPos, zPos)); } } 二、绘制三角形 这里有个坑,一开始没理解GL_TRIANGLE_STRIP,走了弯路,实际理解了...GL_TRIANGLE_STRIP,就明白代码中绘制逻辑 glDrawElements(GL_TRIANGLE_STRIP, indexCount, GL_UNSIGNED_INT, 0); 三角形绘制有三种方式...GL_TRIANGLE_STRIP,起始三个点,后面没增加一个点就增加一个三角形 三角形绘制模式 为保证所有三角形绘制都遵循顺时针原则(剔除中用到),要求当前增加点角标为奇数:绘制顺序T=[n-1,...GL_FLOAT, GL_FALSE, stride, (void*)(5 * sizeof(float))); } glBindVertexArray(sphereVAO); glDrawElements

3.8K10
领券