Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用opengl-es 2.0在android中填充多边形?

如何使用opengl-es 2.0在android中填充多边形?
EN

Stack Overflow用户
提问于 2016-08-22 08:46:10
回答 1查看 1.8K关注 0票数 4

我想绘制多边形,如图片所示,并用颜色填充它。

我已经尝试过使用三角形的多边形,但它不会帮助me.Anyone知道,请帮助我。

OpenGLProjectRenderer.java

代码语言:javascript
运行
AI代码解释
复制
public class OpenGLProjectRenderer implements Renderer {

List<Float> points = new ArrayList<Float>();

private static final String TAG = "Renderer";
private static final int POSITION_COMPONENT_COUNT = 2;
private static final int BYTES_PER_FLOAT = 4;
private FloatBuffer vertexData = ByteBuffer
        .allocateDirect(20000 * BYTES_PER_FLOAT)
        .order(ByteOrder.nativeOrder()).asFloatBuffer();
private Context context;
private int program;

private static final String A_POSITION = "a_Position";
private int aPositionLocation;

private static final String U_COLOR = "u_Color";
private int uColorLocation;

private HashMap<Integer, ArrayList<Float>> lines = new HashMap<Integer, ArrayList<Float>>();
int position = 0;

public OpenGLProjectRenderer(Context context) {

    this.context = context;
}

@Override
public void onDrawFrame(GL10 gl) {
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glUniform4f(uColorLocation, 1.0f, 0.0f, 0.0f, 1.0f);

    for (int p = 0; p < lines.size(); p++) {

        vertexData.put(toFloatarray(lines.get(p)));
        int vertices = (int) lines.get(p).size() / 2;
        int b = vertices % 4 == 0 ? vertices-1 : vertices - 2;
        Log.d(TAG,""+lines.size());
        glDrawArrays(GLES20.GL_LINE_LOOP, 0, lines.size());
        vertexData.clear();
    }

}

@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
    gl.glViewport(0, 0, width, height);

}

@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
    glClearColor(0.0f, 0.0f, 0.0f, 0.0f);

    String vertexShaderSource = TextResourceReader.readTextFileFromResource(
            context, R.raw.simple_vertex_shader);
    String fragmentShaderSource = TextResourceReader.readTextFileFromResource(
            context, R.raw.simple_fragment_shader);

    int vertexShader = ShaderHelper.compileVertexShader(vertexShaderSource);
    int fragmentShader = ShaderHelper
            .compileFragmentShader(fragmentShaderSource);
    program = ShaderHelper.linkProgram(vertexShader, fragmentShader);
    ShaderHelper.validateProgram(program);
    glUseProgram(program);
    uColorLocation = glGetUniformLocation(program, U_COLOR);
    aPositionLocation = glGetAttribLocation(program, A_POSITION);
    vertexData.position(0);
    glVertexAttribPointer(aPositionLocation, POSITION_COMPONENT_COUNT,
            GL_FLOAT, false, 0, vertexData);
    glEnableVertexAttribArray(aPositionLocation);
}

ArrayList<Float> temp = new ArrayList<Float>();

public void handleTouchPress(float normalizedX, float normalizedY) {
    Log.v(TAG + " handleTouchPress", points.size() + "");       

    temp.add(normalizedX);
    temp.add(normalizedY);

    lines.put(position, temp);
}

public void handleTouchDrag(float normalizedX, float normalizedY) {

    Log.v(TAG + " handleTouchDrag", points.size() + "");
}

public float[] toFloatarray(List<Float> floatList) {

    float[] floatArray = new float[floatList.size()];
    int i = 0;

    for (Float f : floatList) {
        floatArray[i++] = (f != null ? f : Float.NaN);
    }

    return floatArray;
}

public void handleTouchUp(float normalizedX, float normalizedY) {
    Log.v(TAG + " handleTouchUp", points.size() + "");

    position++;

}}

使用上面的代码,我可以使用上面的代码使用GL_LINE_LOOP绘制多边形,但不能填充创建的多边形。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-22 09:48:37

OpenGL ES 2.0仅支持绘制三角形作为基本图元。使用三角形绘制多边形有3种方法,1)三角形2)三角形条带3)三角扇

在你的例子中,你可以尝试三角扇形来绘制多边形,前提是你知道平面内的点。

Here就是一个画圆的例子。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39074962

复制
相关文章
技巧 | OpenCV中如何绘制与填充多边形
很多人都问过我这个问题,OpenCV中是怎么绘制与填充多边形的,特别是填充多边形的。因为根据OpenCV中的多边形绘制函数,他们发现这是一个无解的问题。其实我在2017底做一个项目的时候当时会对得到的一个多边形边缘轮廓进行填充,我就发现OpenCV中的多边形绘制函数无法填充,但是其实换个函数就会顺利搞定,只是大家被OpenCV官方的教程误导思维定势,没有想到而已。下面我们就来详细说一下,OpenCV中的多边形绘制与填充问题。
OpenCV学堂
2020/08/11
3.6K0
技巧 | OpenCV中如何绘制与填充多边形
图像多边形填充
算法:图像多边形填充是不仅可以填充凸多边形,而且可以填充任何不具有自相交的单调多边形,即其轮廓与每条水平线(扫描线)的相交最多为两次(最顶部边缘和/或底部边缘水平)。如果图像多边形填充部分或全部位于图像外部,则将对其进行裁剪,还可以处理以亚像素精度指定的像素坐标,意味着可以将坐标作为编码为整数的定点数传递。
裴来凡
2022/05/28
6690
图像多边形填充
Spark 在Spark2.0中如何使用SparkSession
除了有时限的交互之外,SparkSession 提供了一个单一的入口来与底层的 Spark 功能进行交互,并允许使用 DataFrame 和 Dataset API 对 Spark 进行编程。最重要的是,它减少了开发人员在与 Spark 进行交互时必须了解和构造概念的数量。
smartsi
2019/08/08
4.8K0
在OAuth 2.0中,如何使用JWT结构化令牌?
JSON Web Token(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为 JSON 对象在各方之间安全地传输信息。
码农架构
2020/10/29
2.4K0
在OAuth 2.0中,如何使用JWT结构化令牌?
在Spring Boot 2.0中使用ElasticSearch
为了测试目的,让我们创建以下两个REST控制器来调用Spring Data ElasticSearch CRUD存储库:
lyb-geek
2022/03/10
2.1K0
在.Net Core 2.0中使用MySQL
在之前,我简单的介绍过在.net core中使用Mongodb(见文章《.Net Core系列教程(三)——使用Mongodb》),也使用过PostgreSQL(但是没有写文章介绍怎么使用,只是在文章《.Net Core系列教程(一)——环境搭建》中简单介绍过如何安装)。当然,我的文章质量都不高,只是把自己平时遇到的问题记录下来,很多问题是自己经历过之后在网上苦苦的寻找答案但都不适用或者不明了的情况下,自己摸索出来的解决方案,这也算是防止自己再次误入坑,也给遇到同样问题的朋友一点帮助吧。 下面说下怎样在.net core中使用MySQL,这个问题网上随便一搜有很多,我的当然也是从网上搜索来的,只是用自己的语言再次整理下而已。 在使用MySQL时,需要使用到MySQL的驱动,之前MySQL官方没有出驱动的时候,需要使用第三方的,不过现在有官方的驱动,还是尽量使用官方的吧,我这里也以官方的为准。另外还用到了Dapper这个小型ORM,这两个都可以通过Nuget来安装。需要注意的是,MySQL.Data需要安装最新版的(现在是6.10.3-rc版),旧版本不支持.net core 2.0 先在appsettings.json文件中,添加数据库的配置:
徐大嘴
2019/03/21
1.6K0
BetterScroll2.0在Vue中的基本使用
BetterScroll官方文档链接 首先在你的vue项目中安装BetterScroll npm install @better-scroll/core --save 在想要使用BetterScroll的文件中引入 import BScroll from '@better-scroll/core' 基本使用 <div class="content" ref="scroll"> <ul> <li></li> </ul> </div> 需要给父容器设置固定高度 .content { hei
peng_tianyu
2022/12/15
8510
在Spring Bean实例过程中,如何使用反射和递归处理的Bean属性填充?
想想,运营已经对外宣传了七八天的活动,满心欢喜的等着最后一天页面上线对外了,突然出现了一堆异常、资损、闪退,而用户流量稍纵即逝,最后想死的心都有!
小傅哥
2021/06/03
3.5K0
在Spring Bean实例过程中,如何使用反射和递归处理的Bean属性填充?
Android性能优化系列之渲染优化
众所周知的Android系统每隔16ms重新绘制一次activity,也就是说你的app必须在16ms内完成屏幕刷新的所有逻辑操作,这样才能达到60帧/s。而用户一般所看到的卡顿是由于Android的渲染性能造成的。 本篇博客将介绍Android的渲染相关知识。
老马的编程之旅
2022/06/22
1K0
Android性能优化系列之渲染优化
R语言可视化——多边形与数据地图填充
ggplot函数中有一类特殊的图表类型叫做多边形,很难用传统的视角来定义它属于哪一类图表,因为它能够呈现信息多种多样。 特别是在做某些比较高阶的图表——地图时,这种多边形函数便能够大显神通。 之前本公众号所推送的所有涉及地图图表绘制所使用的技巧,几乎全部都依赖多边形函数的支持。 library(ggplot2) library(plyr) library("maptools") 这里以之前推送过的全球地图为例: 导入地图地理信息数据: world_map <-readShapePoly("c:/rstudy
数据小磨坊
2018/04/11
1.8K0
R语言可视化——多边形与数据地图填充
技术干货:前端图形化技术简介(上)
Canvas与SVG 前端图形化技术,主要包括Canvas绘图和SVG绘图两类。 Canvas早在十几年前就被火狐浏览器引入。Canvas通过Canvas.getContext(2d/3d)获得绘图上下文,采用绘制路径、填充路径、描边路径等操作绘制像素图片,并带有一定的矩阵旋转和偏移功能,总体与传统绘图流程一致。经过几年的发展,Canvas具备了3D上下文接口,其背后的WebGL,实际是OpenGL-ES的一个子集,可使用GPU渲染内容。实际上,通过改变视觉场的perspective,我们可以在3D的场
企鹅号小编
2018/02/09
1.7K0
技术干货:前端图形化技术简介(上)
php判断坐标是否在指定的多边形中
如何判断一个坐标点是否在一个多边形中,具体的应用场景就是,外卖派送,用户提供的坐标是否是在外卖的派送范围之内。用户的坐标可以通过手机设备获取到,派送范围就是通过在地图上,进行多边形的绘制,获取多个坐标点连接起来的配送范围。下面来看看代码上是如何简单判断的。
码农编程进阶笔记
2021/07/20
1.6K0
TensorFlow2.0(4):填充与复制
tf.pad函数主要是用来对tensor的大小进行扩展,包括水平、垂直、深度(通道)等,方法定义如下:
统计学家
2019/12/23
8320
在Scrapy中如何使用aiohttp?
当我们从一些代理IP供应商购买代理IP时,他们可能是提供一个网址供我们查询当前可用的代理IP。我们周期性访问这个网址,拿到最新的IP,再分给爬虫使用。
青南
2020/07/16
6.8K0
在 Java 中如何使用 transient
Java语言的transient不像class、synchronized和其他熟悉的关键字那样众所周知,因而它会出现在一些面试题中。这篇文章我将为大家讲解transient。
哲洛不闹
2018/09/18
6.5K0
在 Java 中如何使用 transient
在HTML中如何使用CSS?
一、前言 在 HTML 中使用 CSS,包括内联式、内嵌式、链接式和导入式。 二、分类 2.1 内联式 内联式是所有样式应用方式中最为直接的一种,它通过对 HTML 标记使用 属性,将 CSS 代码直接写在其中。 内联式是最简单、直接的 CSS 使用方法,但它的针对性很明显,只能作用于当前标记,造成代码冗余,维护比较困难。 2.2 内嵌式 内嵌式与内联式使用方法不同,它将 CSS 代码写在 标记之间,并需要采用 标记进行声明。 使用内嵌式 CSS 用法时 CSS 代码将被集中放在 标记中,这样方便查
企鹅号小编
2018/02/01
9.3K0
在Python中如何使用Elasticsearch?
在这篇文章中,我将讨论Elasticsearch以及如何将其整合到不同的Python应用程序中。
马哥linux运维
2019/06/10
8.6K0
在Python中如何使用Elasticsearch?
点击加载更多

相似问题

如何在OpenGL-ES 2.0中绘制透明多边形?

12

纹理颠倒?| OpenGL-ES 2.0 (android)

13

如何在linux和Android中使用OpenGL-ES 2.0

22

如何在opengles 2.0 android中用图像填充多边形

14

Android 2.3.3 AVD上的opengl-es 1.1或2.0?

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档