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

opengl - 如何使用GL_POINTS绘制正方形像素

OpenGL是一种跨平台的图形库,用于渲染2D和3D图形。GL_POINTS是OpenGL中的一个绘制模式,用于绘制单个像素点。

要使用GL_POINTS绘制正方形像素,可以按照以下步骤进行:

  1. 初始化OpenGL环境:包括创建窗口、设置视口大小等。
  2. 创建顶点数组对象(Vertex Array Object,VAO)和顶点缓冲对象(Vertex Buffer Object,VBO):VAO用于存储顶点属性,VBO用于存储顶点数据。
  3. 定义顶点数据:正方形由四个顶点组成,每个顶点包含位置信息和颜色信息。
  4. 绑定VAO和VBO,并将顶点数据传输到VBO中。
  5. 创建着色器程序:包括顶点着色器和片段着色器。顶点着色器用于处理顶点数据,片段着色器用于处理像素数据。
  6. 编译和链接着色器程序。
  7. 在渲染循环中,使用GL_POINTS模式绘制正方形像素:
  • 启用顶点属性数组。
  • 绑定VAO和VBO。
  • 设置顶点属性指针。
  • 使用glDrawArrays函数绘制正方形像素。

下面是一个使用OpenGL绘制正方形像素的示例代码(使用C++语言):

代码语言:cpp
复制
#include <GL/glew.h>
#include <GLFW/glfw3.h>

// 顶点数据
GLfloat vertices[] = {
    // 位置信息       // 颜色信息
    -0.5f, 0.5f, 1.0f, 0.0f, 0.0f, // 左上角顶点
    0.5f, 0.5f, 0.0f, 1.0f, 0.0f,  // 右上角顶点
    0.5f, -0.5f, 0.0f, 0.0f, 1.0f, // 右下角顶点
    -0.5f, -0.5f, 1.0f, 1.0f, 1.0f // 左下角顶点
};

// 顶点着色器源码
const char* vertexShaderSource = R"(
    #version 330 core
    layout (location = 0) in vec2 aPos;
    layout (location = 1) in vec3 aColor;
    out vec3 color;
    void main()
    {
        gl_Position = vec4(aPos, 0.0, 1.0);
        color = aColor;
    }
)";

// 片段着色器源码
const char* fragmentShaderSource = R"(
    #version 330 core
    in vec3 color;
    out vec4 FragColor;
    void main()
    {
        FragColor = vec4(color, 1.0);
    }
)";

int main()
{
    // 初始化GLFW
    glfwInit();
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

    // 创建窗口
    GLFWwindow* window = glfwCreateWindow(800, 600, "OpenGL", NULL, NULL);
    if (window == NULL)
    {
        glfwTerminate();
        return -1;
    }
    glfwMakeContextCurrent(window);

    // 初始化GLEW
    glewExperimental = GL_TRUE;
    if (glewInit() != GLEW_OK)
    {
        return -1;
    }

    // 创建顶点数组对象和顶点缓冲对象
    GLuint VAO, VBO;
    glGenVertexArrays(1, &VAO);
    glGenBuffers(1, &VBO);

    // 绑定VAO和VBO
    glBindVertexArray(VAO);
    glBindBuffer(GL_ARRAY_BUFFER, VBO);

    // 将顶点数据传输到VBO中
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);

    // 设置顶点属性指针
    glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(GLfloat), (void*)0);
    glEnableVertexAttribArray(0);
    glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(GLfloat), (void*)(2 * sizeof(GLfloat)));
    glEnableVertexAttribArray(1);

    // 创建顶点着色器
    GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
    glShaderSource(vertexShader, 1, &vertexShaderSource, NULL);
    glCompileShader(vertexShader);

    // 创建片段着色器
    GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
    glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL);
    glCompileShader(fragmentShader);

    // 创建着色器程序
    GLuint shaderProgram = glCreateProgram();
    glAttachShader(shaderProgram, vertexShader);
    glAttachShader(shaderProgram, fragmentShader);
    glLinkProgram(shaderProgram);

    // 渲染循环
    while (!glfwWindowShouldClose(window))
    {
        // 清空颜色缓冲
        glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
        glClear(GL_COLOR_BUFFER_BIT);

        // 使用着色器程序
        glUseProgram(shaderProgram);

        // 绑定VAO和VBO
        glBindVertexArray(VAO);
        glBindBuffer(GL_ARRAY_BUFFER, VBO);

        // 绘制正方形像素
        glDrawArrays(GL_POINTS, 0, 4);

        // 交换缓冲并查询事件
        glfwSwapBuffers(window);
        glfwPollEvents();
    }

    // 清理资源
    glDeleteVertexArrays(1, &VAO);
    glDeleteBuffers(1, &VBO);
    glDeleteShader(vertexShader);
    glDeleteShader(fragmentShader);
    glDeleteProgram(shaderProgram);

    // 终止GLFW
    glfwTerminate();
    return 0;
}

在这个示例代码中,我们使用GL_POINTS模式绘制了一个正方形像素。顶点数据包含位置信息和颜色信息,顶点着色器将位置信息和颜色信息传递给片段着色器,片段着色器将颜色信息作为输出。最后,我们在渲染循环中使用glDrawArrays函数绘制正方形像素。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

OpenGL ES for Android 绘制矩形和正方形

前面的文章介绍了如何 绘制三角形,在OpenGL ES中没有直接绘制矩形的方式,通过绘制2个三角形的方式绘制矩形。...绘制矩形的顶点shader: attribute vec4 vPosition; void main() { gl_Position = vPosition; } 绘制矩形的片段shader:...初始化索引数据,代码如下: var index = shortArrayOf(3,2,0,0, 1, 2) val indexBuffer = GLTools.array2Buffer(index) 绘制...上面设置的顶点虽然都是0.5,但不一定是正方形,0.5表示x轴或者y轴的一半,如果绘制的窗口本身是矩形,那么绘制出来的也是矩形,如何绘制正方形呢?...绘制正方形需要根据绘制窗口的宽高计算顶点数据,计算方式如下: override fun onSurfaceChanged(p0: GL10?

1.1K10

实验2 直线生成算法实现

前面的实验已经知道如何绘“点”,那么OpenGL如何知道拿这些顶点来做什么呢?是一个一个的画出来,还是连成线?或者构成一个多边形?或是做其它事情呢?...为了解决这一问题,OpenGL要求:指定顶点的命令必须包含在glBegin函数之后,glEnd函数之前(否则指定的顶点将被忽略),并由glBegin来指明如何使用这些点。...如果将GL_POINTS替换成GL_LINES,则两个点将被认为是直线的两个端点,OpenGL将会画出一条直线。还可以指定更多的顶点,然后画出更复杂的图形。...如果使用的是GLUT,通知将自动完成,并调用向glutReshapeFunc()注册的函数。该函数必须完成下列工作: Ÿ 重新建立用作新渲染画布的矩形区域; Ÿ 定义绘制物体时使用的坐标系。...glViewport()调整像素矩形,用于绘制整个窗口。接下来三个函数调整绘图坐标系,使左下角位置为(0, 0),右上角为(w, h)。

95520

机械版CG 实验2 直线生成算法的实现

前面的实验已经知道如何绘“点”,那么OpenGL如何知道拿这些顶点来做什么呢?是一个一个的画出来,还是连成线?或者构成一个多边形?或是做其它事情呢?...为了解决这一问题,OpenGL要求:指定顶点的命令必须包含在glBegin函数之后,glEnd函数之前(否则指定的顶点将被忽略),并由glBegin来指明如何使用这些点。...如果将GL_POINTS替换成GL_LINES,则两个点将被认为是直线的两个端点,OpenGL将会画出一条直线。还可以指定更多的顶点,然后画出更复杂的图形。...如果使用的是GLUT,通知将自动完成,并调用向glutReshapeFunc()注册的函数。该函数必须完成下列工作: 重新建立用作新渲染画布的矩形区域; 定义绘制物体时使用的坐标系。...glViewport()调整像素矩形,用于绘制整个窗口。接下来三个函数调整绘图坐标系,使左下角位置为(0, 0),右上角为(w, h)。

68620

实验2 基本图元光栅化

前面的实验已经知道如何绘“点”,那么OpenGL如何知道拿这些顶点来做什么呢?是一个一个的画出来,还是连成线?或者构成一个多边形?或是做其它事情呢?...为了解决这一问题,OpenGL要求:指定顶点的命令必须包含在glBegin函数之后,glEnd函数之前(否则指定的顶点将被忽略),并由glBegin来指明如何使用这些点。...如果将GL_POINTS替换成GL_LINES,则两个点将被认为是直线的两个端点,OpenGL将会画出一条直线。还可以指定更多的顶点,然后画出更复杂的图形。...如果使用的是GLUT,通知将自动完成,并调用向glutReshapeFunc()注册的函数。该函数必须完成下列工作: 重新建立用作新渲染画布的矩形区域; 定义绘制物体时使用的坐标系。...glViewport()调整像素矩形,用于绘制整个窗口。接下来三个函数调整绘图坐标系,使左下角位置为(0, 0),右上角为(w, h)。

1K20

实验3.1 直线光栅化(键盘交互版)

(4) 了解和使用OpenGL的生成直线的命令,来验证程序运行结果。 3.实验原理: 示范代码原理参见教材直线光栅化一节中的DDA算法。...前面的实验已经知道如何绘“点”,那么OpenGL如何知道拿这些顶点来做什么呢?是一个一个的画出来,还是连成线?或者构成一个多边形?或是做其它事情呢?...为了解决这一问题,OpenGL要求:指定顶点的命令必须包含在glBegin函数之后,glEnd函数之前(否则指定的顶点将被忽略),并由glBegin来指明如何使用这些点。...如果使用的是GLUT,通知将自动完成,并调用向glutReshapeFunc()注册的函数。该函数必须完成下列工作: 重新建立用作新渲染画布的矩形区域; 定义绘制物体时使用的坐标系。...glViewport()调整像素矩形,用于绘制整个窗口。接下来三个函数调整绘图坐标系,使左下角位置为(0, 0),右上角为(w, h)。

1.2K20

OpenGL ES 2.0 for Android》读书笔记

所以,想要用OpenGL绘制图形,只需要确定两个问题:顶点、三角形上的颜色。 Air Hockey的效果图 通过本文的讲解,最终做出的效果如下。全部使用OpenGL绘制而成,并添加了交互逻辑。...OpenGL认为所有的屏幕的范围都是[-1,+1] 最简单的一个问题是,比如我们想绘制一个正方形,坐标范围为[-1,+1],显示到屏幕上就变成了长方形。被拉长了,这个应该很好理解。...Texture包含了很多的texel,这texel也可以理解成一个像素点。 使用Texture可以把各类图片加载到OpenGL中进而进行显示,从而实现炫酷的游戏场景。 ?...texture绑定了,下面使用这个texture进行绘制。...OpenGL-ES-2.0-for-Android 主要看一下下面两个功能: OpenGL_01_Simple_Color 实现最基本的绘制正方形 OpenGL_02_Simple_Texture 实现最基本的加载图片

4.5K91

OpenGL 系列---基础绘制流程

OpenGL 坐标 手机屏幕的坐标是以左上角为原点(0,0),向右为 X 轴正方形,向下为 Y 轴正方向,而 OpenGL 也有着它自己的一套坐标定义。...由于我们要绘制的是一个点,在坐标系中,一个坐标就可以代替一个点了。假设要绘制一个三角形,那么在坐标系中就需要三个点才行了。 接下来就涉及到 OpenGL 如何把定义的点的数据绘制出来了。...但是目前手机上 OpenGL 还是使用渲染管线中,有了渲染管线,我们就可以完成点的形状绘制和着色两大问题了,接下来的工作也是围绕这条渲染管线开始的。...确定使用 OpenGL 程序 当一切完成后,就是确定使用OpenGL 程序了。...最后通过glDrawArrays方法来执行最后的绘制GL_POINTS代表绘制的类型,而参数0,1则代表绘制的点的范围,它是一个左闭右开的区间。 以上步骤就完成了一个点的绘制,如图所示: ?

1.7K40

OpenGL】十、OpenGL 绘制点 ( 初始化 OpenGL 矩阵 | 设置投影矩阵 | 设置模型视图矩阵 | 绘制点 | 清除缓冲区 | 设置当前颜色值 | 设置点大小 | 绘制点 )

四、运行效果展示 五、相关资源 上一篇博客 【OpenGL】九、OpenGL 绘制基础 ( OpenGL 状态机概念 | OpenGL 矩阵概念 ) 简单介绍 OpenGL 中的一些理论概念 ; 本篇博客开始使用...); 更多细节参考 【OpenGL】八、初始化 OpenGL 渲染环境 ( 导入 OpenGL 头文件 | 链接 OpenGL 库 | 将窗口设置为 OpenGL 窗口 | 设置像素格式描述符 | 渲染绘制...方法设置多个点 // 绘制点开始 glBegin(GL_POINTS); // 设置绘制点的位置 glVertex3f(0.0f, 0.0f...// 颜色描述符, 像素格式描述符 , 选取 OpenGL 渲染的像素格式 PIXELFORMATDESCRIPTOR pfd; // 将 PIXELFORMATDESCRIPTOR 结构体清空...之间的所有的点都绘制出来 // 可以调用 glVertex3f 方法设置多个点 // 绘制点开始 glBegin(GL_POINTS);

1.6K00

OpenGL】八、初始化 OpenGL 渲染环境 ( 导入 OpenGL 头文件 | 链接 OpenGL 库 | 将窗口设置为 OpenGL 窗口 | 设置像素格式描述符 | 渲染绘制 ) ★

#include 二、链接 OpenGL 库 ---- 链接 OpenGL 库 : 使用 #pragma comment 预处理指令 , 链接 OpenGL...库 , 下面代码中使用 #pragma comment(lib, “opengl32.lib”) 预处理指令 , 链接了 opengl32.lib 函数库 , 相当于调用了该库 , 在后续代码中可以使用该...创建窗口流程是先 注册窗口 , 然后 创建窗口 , 最后 显示窗口 ; 将 Windows 桌面窗口改成 OpenGL 窗口操作是在 创建窗口完成后 进行的 ; 下面开始逐个步骤讲解 , 如何初始化...OpenGL 窗口 ; 四、获取窗口设备 ---- 窗口设备在初始化 OpenGL 上下文 , 和进行 OpenGL 绘制时都需要用到 , 这里设置到全局变量中 ; // 窗口设备 // 提取到全局变量中...绘制标志位 dwFlags 绘制标志位中可以设置多个标志位 , 如下代码中的标志位含义 : PFD_DRAW_TO_WINDOW : 绘制到桌面窗口 PFD_SUPPORT_OPENGL : 支持 OpenGL

1.4K00

OpenGL】十一、OpenGL 绘制多个点 ( 绘制单个点 | 绘制多个点 )

文章目录 一、绘制单个点 二、绘制多个点 三、相关资源 在上一篇博客 【OpenGL】十、OpenGL 绘制点 ( 初始化 OpenGL 矩阵 | 设置投影矩阵 | 设置模型视图矩阵 | 绘制点 | 清除缓冲区...(GL_POINTS); // 设置绘制点的位置 glVertex3f(0.0f, 0.0f, -0.5f); // 绘制点结束 glEnd...(); 绘制效果如下 : 二、绘制多个点 ---- 如果在 glBegin(GL_POINTS) 与 glEnd() 两个方法之间 , 设置多个点 , 此时如果设置的点在摄像机可视范围内 , 就会将这些点投影到屏幕中...glBegin(GL_POINTS); // 设置绘制点的位置 glVertex3f(0.0f, 0.0f, -10.0f); glVertex3f...线段 , 三角形 , 等其它元素 , 也是按照上述方法设置 ; 三、相关资源 ---- GitHub 地址 : https://github.com/han1202012/OpenGL 博客源码快照

1.1K00

android使用OPENGL ES绘制圆柱体

本文实例为大家分享了android使用OPENGL ES绘制圆柱体的具体代码,供大家参考,具体内容如下 效果图: ?.... */ import java.io.IOException; import java.io.InputStream; import android.opengl.GLSurfaceView; import...onSurfaceCreated(GL10 gl, EGLConfig config) { //关闭抗抖动 gl.glDisable(GL10.GL_DITHER); //设置特定Hint项目的模式,这里为设置为使用快速模式...currTextureId; } } 编写zgyCH.java *设置圆柱体的控制属性,主要包括纹理、高度、截面半径、截面角度切分单位和高度切分单位,这些属性用于控制圆柱体的大小 *定义各个圆柱体绘制类的三角形绘制方法和工具方法...*实现圆柱体的线性会执法,线性会执法和三角形会执法顶点的获取方法相同,只是采用的绘制顶点顺序和渲染方法不同,并且先行绘制没有光照和纹理贴图 package com.scout.eeeeeee; /*

83340

OpengL ES _ 入门_02

学习是一件开心的额事情 学习目标 理解OpenGL的顶点和几种绘制方法 用多种方式绘制立方体 顶点是啥?...一般情况下,在绘制多变形时,有这样几种形态: 1.内部的像素将被填充 2.绘制外边的边框 3.只绘制绘制面 不管绘制平面和绘制立体图形,我们都是在面上进行操作的,要绘制一个面,需要绘制多个小三角形...GL_POINTS 给n个顶点的每一个都绘制一个点 GL_POINTS ,如果你选择这个模式,一般四面体的顶点数据就要放在一个数组中: static GLfloat vertex[4\*3\*3]...,在这种方式我们选择GL_POINTS 参数2: first :从数组的那个位置开始,一般如果数组没有其他类型的数据,只有顶点数据,我们就填 0 参数3: count 就是绘制顶点的个数, 例子中是...为什么要使用这种方式排列,这种排列方式,可以让所有三角形按照相同的方法绘制,对应OpenGL 的一些操作,维持方向很重要!

65210

图元装配和光栅化

线段的宽度可以用 glLineWidth void glLineWidth(GLfloat width) width : 指定线宽,以像素表示 width 受限与OpenGL ES 3.0 支持的线宽范围...ES支持的点精灵图元是 GL_POINTS。...点精灵对指定的每个顶点绘制。通常用于粒子效果当作点而非正方形绘制,从而实现高效渲染。 点精灵 是 指定位置和半径的屏幕对齐的正方形。...使用非实例化绘图调用时,gl_InstanceID将返回0。 下面两个代码片说明如何用一次实例化绘图调用绘制多个几何形状,其中每个实例的颜色不同。...小结 学习了OpenGL ES支持的图元类型 了解了如何用常规的非实例化和实例化绘图调用高效的绘制它们 在顶点上执行坐标转换的方法 光栅化相关的知识

3K20

NumPy 初学者指南中文第三版:11~14

将头像图像中的像素复制到数组中: pixels = pygame.surfarray.array2d(img) 使用数组的shape属性从像素数组的形状创建游戏屏幕。...在400 x 400像素正方形内生成 30 个随机点位置: positions = np.random.randint(0, 400, size=(30, 2)) 使用到原点的欧式距离作为亲和度度量来计算亲和度矩阵...pygame.draw.polygon(screen, (255, 0, 0), point) 给定表面,颜色(在这种情况下为红色)和点列表,此函数绘制多边形 OpenGL 和 Pygame OpenGL...,我们将使用 OpenGL 绘制一个 Sierpinski 地毯,也称为 Sierpinski 三角形或 Sierpinski 筛子。...在这种情况下,我们将以红色绘制 glBegin(GL_POINTS) 此函数定义了图元的顶点或图元的组。

3K10

OpenGL ES 绘制贝塞尔曲线

最近要求为图像设计流线型曲线边框,想着可以用 OpenGL 绘制贝塞尔曲线,再加上模板测试来实现,趁机尝试一波。 ? 基于贝塞尔曲线的曲边扇形 什么是贝塞尔曲线 ?...当然我们实际在设备上绘制时,不可能绘制出无数个点,一般是根据屏幕像素的大小,对 t∈[0,1] 区间进行适当的等间隔插值,再由输出的点组成我们要的贝塞尔曲线(此时肉眼分辨不出来两点之间的距离,可以认为它们连成了一条线...ES 绘制贝塞尔曲线 OpenGL ES 的基本绘制单位是点、线和三角形,既然可以绘制点,只需要基于上述公式计算出点,然后将其绘制出来,即可得到我们想要的贝塞尔曲线。...绘制多条贝塞尔曲线 接下来我们基于贝塞尔曲线去绘制曲边扇形(填充曲线与 x 轴之间的区域),则需要 OpenGL 绘制三角形实现,还要重新输入 t 的取值数组,使得每输出 3 个点包含一个原点,类似于绘制扇形...,GL_POINTS 改为 GL_TRIANGLES 。

1.1K40

Half-Pixel Offset 究竟是个什么鬼?

(重要) image.png 纹理也是由正方形的纹素(texel)组成,每个纹素代表一种颜色,并且纹素坐标的原点在左上角纹素的左上角(重要) image.png 纹理的采样使用的是双线性...我们想要绘制正方形大概是这个样子: image.png 由于像素是离散的,我们需要将绘制正方形像素尽可能的”对齐”(这里涉及到光栅化的规则,有兴趣的朋友可以去这里了解),所以实际绘制正方形是这个样子的...: image.png 考虑到我们是从像素坐标的原点开始定义正方形的,所以上图所示的实际绘制结果也是符合预期的(正方形左上角与窗口左上角是对齐的) 现在我们想要将上面的纹理映射到刚才所绘制正方形上去...不过更通用的做法,还是直接偏移顶点的像素坐标,仍然拿上面的正方形绘制举例,我们对正方形的各个顶点做一个(-0.5, -0.5)像素的偏移,那么实际绘制正方形就是这个样子的: image.png...,即是 Half-Pixel Offset Half-Pixel Offset 只会在 Direct3D 9 及之前的Direct3D版本上出现,本质原因是像素坐标和纹素坐标定义不一致,OpenGL像素坐标和纹素坐标定义是一致的

95420

OpenGL中的二维编程——从简单的矩形开始

输入与窗口函数不属于OpenGL核心库,但是由于它们在交互式程序中的重要地位,这类函数已被包含在GLUT库中。这些函数使我们能够对屏幕中的窗口进行控制并使用鼠标和键盘。...应用程序既可以使用OpenGL、GLU以及GLX库中的函数,也可以直接使用X库或X工具集中的函数。 另外还有一种折衷的方法是借助GLUT库,这样可以使同一个程序能够在不同的平台下重新编译和运行。...函数glutCreateWindow()将一个窗口以默认尺寸(300*300像素)显示在屏幕的默认位置上(屏幕左上角)。该函数的参数使我们可为窗口创建一个标题。...五、矩形的绘制 void glVertex(type xcoordinate,type ycoordiante,...) void glVertex(type...mode可取GL_POINTS、GL_LINES或GL_POLYGON void glEnd() //指定顶点列表的终止点 提示:在顶点列表的末尾不要忘记包含glEnd()。

1.8K40

Android OpenGL 介绍和工作流程(十)

OpenGL绘制过程 其实在OpenGL中,所有物体都是在一个3D空间里的,但是屏幕都是2D像素数组,所以OpenGL会把3D坐标转变为适应屏幕的2D像素。...这时候我们也许会有一个疑问为什么OpenGL选择使用三角形构建物体? 是因为OpenGL本质上就是绘制三角形的图形第三方库,而三角形正好是基本图元。...3.图元装配阶段将顶点着色器输出的所有顶点作为输入(如果是GL_POINTS,那么就是一个顶点),并所有的点装配成指定图元的形状。...5.光栅化阶段(Rasterization Stage),这里它会把图元映射为最终屏幕上相应的像素,生成供片段着色器(Fragment Shader)使用的片段(Fragment)。...在OpenGL ES中,这个变换也是自动完成的,但需要我们通过glViewport接口来指定绘制屏幕的大小。这里还需要注意的一点是,屏幕坐标与屏幕的像素还不一样。

2.1K50

OpenGLES-03 使用索引绘制矩形

这篇文章我们同样借助上篇文章《OpenGLES-02 绘制基本图元(点、线、三角形)》的代码,使用另外一种画法来绘制一个矩形。...运行结果.png 如上代码所示,我们绘制的矩形是由2个三角形组成的,一个三角形3个顶点,共使用了6个顶点,其中第2个顶点与第4个顶点相同(0.5,-0.5,0.0),第3个顶点与第6个顶点相同(-0.5,0.5,0.0...type, const GLvoid *indices); 第一个参数 mode 为描绘图元的模式,其有效值为:GL_POINTS, GL_LINES, GL_LINE_STRIP, GL_LINE_LOOP...和顶点缓冲对象一样,EBO也是一个缓冲,它专门储存索引,OpenGL调用这些顶点的索引来决定该绘制哪个顶点。所谓的索引绘制(Indexed Drawing)正是我们问题的解决方案。...[_context presentRenderbuffer:_renderBuffer]; } 两种方式的运行结果是一样的,我们可以发现,运行图中的矩形是个长方形,而我们给的坐标,照理来讲应该是正方形

1.1K100
领券