Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用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

复制
相关文章
dotnet C# 获取本机外网 IP 地址
如果有自己的服务器,可以通过自己的服务器使用 asp dotnet core 服务器获取客户 IP 地址 方法,将获取的 IP 地址返回给用户
林德熙
2022/08/04
4.1K0
IP地址
IP是英文Internet Protocol的缩写,意思是“网络之间互连的协议”,也就是为计算机网络相互连接进行通信而设计的协议。在因特网中,它是能使连接到网上的所有计算机网络实现相互通信的一套规则,规定了计算机在因特网上进行通信时应当遵守的规则。任何厂家生产的计算机系统,只要遵守IP协议就可以与因特网互连互通。正是因为有了IP协议,因特网才得以迅速发展成为世界上最大的、开放的计算机通信网络。因此,IP协议也可以叫做“因特网协议”。
星哥玩云
2022/09/15
5.3K0
IP地址
IP地址
IP地址由网络号(包括子网号)和主机号组成,网络地址的主机号为全0,网络地址代表着整个网络。
mcxfate
2020/08/01
4.9K0
怎么查看ip地址?什么是IP地址
电脑是我们生活中非常常见的东西,不仅是可以办公还可以上网娱乐。但是对于电脑并非是大家都知道怎么去用,有时候甚至大家连查看IP也不一定会,那么,怎么查看ip地址?下面就让小编给大家介绍吧。
用户8739990
2021/07/12
15.4K0
怎么查看ip地址?什么是IP地址
ip地址
IP是英文Internet Protocol的缩写,意思是“网络之间互连的协议”,也就是为计算机网络相互连接进行通信而设计的协议。在因特网中,它是能使连接到网上的所有计算机网络实现相互通信的一套规则,规定了计算机在因特网上进行通信时应当遵守的规则。任何厂家生产的计算机系统,只要遵守IP协议就可以与因特网互连互通。正是因为有了IP协议,因特网才得以迅速发展成为世界上最大的、开放的计算机通信网络。因此,IP协议也可以叫做“因特网协议”。
用户7657330
2020/08/14
4.2K0
IP地址
例如,一个大小为5000字节的数据包在穿过网络时,如果遇到一条MTU为1500字节的数据链路,即数据帧最多容纳大小为1500字节的数据包。路由器需要在数据成帧之前将数据包分段成多个数据包,其中每个数据包长度不得超过1500字节;然后路由器在每片数据包的标识字段上打上相同的标记,以便接收设备可以识别出属于一个数据包的分段。
Nujil
2023/04/12
3.5K0
【TCP/IP】IP地址分类和特殊IP地址
IP地址是因特网技术中的一个非常重要的概念,IP地址在IP层实现了底层网络地址的统一,使因特网的网络层地址具有全局唯一性和一致性。IP地址含有位置信息,反映了主机的网络连接,使因特网进行寻址和路由选择的依据。
全栈程序员站长
2022/08/12
5.2K0
【TCP/IP】IP地址分类和特殊IP地址
实用代码-C#之IP地址和整数的互转
源码 1 [StructLayout(LayoutKind.Explicit)] 2 public struct IP 3 { 4 public IP(UInt32 value) 5 { 6 this._text1 = 0; 7 this._text2 = 0; 8 this._text3 = 0; 9 this._text4 = 0; 10 this._value = value; 11
blackheart
2018/01/19
1.4K0
C# dotnet 获取整个局域网的 ip 地址
局域网可以使用的 IP 地址有很多,我写了一段代码用来枚举所有可以用的 ip 地址
林德熙
2022/08/04
1.1K0
IP地址与MAC地址
引言(有基础的同学可以不看):在复杂的网络通信中,有茫茫多的数据在中传输,它们是如何在相隔一步一步寻找到对方的呢?
比特大冒险
2023/10/17
7380
IP地址与MAC地址
ip地址查询
<?php Class IPQuery{ private static $_requestURL = 'http://ip.taobao.com/service/getIpInfo.php';
joshua317
2018/04/16
7.7K0
IP地址常识
   公有地址(Public address)由Inter NIC(Internet Network Information Center 因特网信息中心)负责。这些IP地址分配给注册并向Inter NIC提出申请的组织机构。通过它直接访问因特网。
党志强
2020/02/02
3.3K0
IP地址分类
最初设计互联网络时,为了便于寻址以及层次化构造网络,每个IP地址包括两个标识码(ID),即网络ID和主机ID。同一个物理网络上的所有主机都使用同一个网络ID,网络上的一个主机(包括网络上工作站,服务器和路由器等)有一个主机ID与其对应。Internet委员会定义了5种IP地址类型以适合不同容量的网络,即A类~E类。
用户7657330
2020/08/14
4.1K0
固定ip地址
在把皕杰报表部署到LINUX上时,我们有的时候需要自动获取ip来实现连接,但平时我们为了方便,可以把我们的ip改为固定的ip,这样访问的时候也会方便许多。
用户10133222
2022/11/09
4.5K0
​1行Python代码,获取对方的IP地址
上次我们讲过使用腾讯云DNS解析 + Github Pages,免费搭建个人网站 (给小白的保姆级教程),有一些进阶的小伙伴可能有自己的云服务器,想把域名绑定到云服务器上。
程序员晚枫
2022/06/14
1K0
​1行Python代码,获取对方的IP地址
IP地址简单介绍+查看本机IP地址-命令
IP地址:网络中设备的唯一标识 IP地址分为两大类 IPv4 给每一个连接在网络上的主机分配一个32bit(4个字节)地址 按照TCP/IP规定,IP地址用二进制来表示的,每一个IP地址长32bit(4个字节),但这样处理起来费劲,所以为了方便经常写成十进制的形式,中间使用 “·” 分隔不同的字节 这种表示法叫做:“点分十进制表示法” IPv6 由于互联网的蓬勃发展,IP地址需求量越来越大,但我们知道网络地址资源是有限的,这样使得IP的分配越来越紧张 为了扩大地址,通过IPv6重新定义地址空间,它采用的是1
用户9006224
2022/12/21
10K0
IP地址简单介绍+查看本机IP地址-命令
IP地址封装
 Java中的封装类 InetAddress,该类没有公有构造方法,调用该类必须调用它本身的静态方法。
用户2965768
2019/03/20
2.4K0
Ip地址归属地_电脑ip地址归属地查询
最近各大社交平台都悄悄上线了一个新功能,就是显示用户的IP归属地,境内精确到省级,境外精确到国家或地区。在个人信息和每条评论上面都有,也是炸出来了一波xx在xx国的账号,各大号主纷纷出视频解释自己的ip归属为什么在国内,有说用代理的,有说给家人登录的,也有说在国内有工作室(团队)的……
全栈程序员站长
2022/09/27
5K0
Ip地址归属地_电脑ip地址归属地查询
IP地址类别
一般将IP地址按计算机所在网络规模的大小分为A、B、C三类及特殊地址D、E(默认规模是根据IP地址中的第一个字段确定的)
用户7162790
2022/03/23
1.5K0
IP地址类别
ip地址判断
题目描述 输入一个ip地址串,判断是否合法。 输入描述: 输入的第一行包括一个整数n(1<=n<=500),代表下面会出现的IP地址的个数。 接下来的n行每行有一个IP地址,IP地址的形式为a.b.c.d,其中a、b、c、d都是整数。 输出描述: 可能有多组测试数据,对于每组数据,如果IP地址合法则输出"Yes!”,否则输出"No!”。 合法的IP地址为: a、b、c、d都是0-255的整数。 输入例子: 2 255.255.255.255 512.12.2.3 输出例子: Yes! No!
张俊怡
2018/04/24
3.3K0

相似问题

.rdlc和PDF -字体水平重叠/打印时无法正确呈现

19

佐治亚字体在Windows上无法正确呈现

21

TrueType字体无法从SSRS正确呈现为pdf

11

Typekit字体Raleway无法在Windows上正确呈现

13

R无法在PDF文件中呈现小字体

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档