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

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.2K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    实验2 直线生成算法实现

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

    99720

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

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

    71320

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

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

    1.3K20

    实验2 基本图元光栅化

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

    1.1K20

    《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.6K91

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

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

    1.9K40

    【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);

    2.1K00

    【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.7K01

    【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.3K00

    计算机图形学—从0开始构建一个OpenGL软光栅

    显示列表和着色器:OpenGL 提供了两种主要的方式来指定如何渲染图形。一种是通过使用显示列表来指定一系列的顶点和参数。...但在计算机中,无论计算精度如何提高,始终不能表示一个无穷小的点。另一方面,无论图形输出设备(例如,显示器)如何精确,始终不能输出一个无穷小的点。...一般情况下,OpenGL中的点将被画成单个的像素(像素的概念,请自己搜索之~),虽然它可能足够小,但并不会是无穷小。...同一像素上,OpenGL可以绘制许多坐标只有稍微不同的点,但该像素的具体颜色将取决于OpenGL的实现。当然,过度的注意细节就是钻牛角尖,我们大可不必花费过多的精力去研究“多个点如何画到同一像素上”。...的基本使用以下是一个简单的OpenGL程序示例,使用C++和GLFW库创建一个窗口并绘制一个三角形:GLuint texture;glGenTextures(1, &texture);glBindTexture

    13210

    FFmpeg4.3系列之52:Android OpenGL实现3D画图及抛骰子案例实战

    要使用OpenGL实现点、线、面的基本绘制,你需要了解几个关键概念和技术:设置OpenGL上下文、加载着色器程序、定义顶点数据以及调用绘制命令。...下面我们将通过一个简单的例子来分析如何用OpenGL绘制点、线和面。1. 设置OpenGL环境首先确保你的开发环境中已经安装了OpenGL库,并且配置好了一个窗口系统,如GLFW或SDL。...,使用GL_POINTS;对于线,使用GL_LINES或GL_LINE_STRIP; // 对于面(例如三角形),使用GL_TRIANGLES glDrawArrays(GL_TRIANGLES...OpenGL API来绘制基本几何形状。...你可以根据需要修改顶点数据、着色器逻辑以及绘制模式(如GL_POINTS, GL_LINES, GL_TRIANGLES等)来实现不同类型的图形元素。

    5800

    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 的一些操作,维持方向很重要!

    73810

    图元装配和光栅化

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

    3.1K20

    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) 此函数定义了图元的顶点或图元的组。

    3.1K10

    OpenGL ES 绘制贝塞尔曲线

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

    1.3K40

    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的像素坐标和纹素坐标定义是一致的

    1K20

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

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

    2.3K50

    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
    领券