zoukankan      html  css  js  c++  java
  • OpenGL坐标

    我们已定义好了多边形,下面就要了解如和使用OpenGL ES的API来绘制(渲染)这个多边形了。OpenGL ES提供了两类方法来绘制一个空间几何图形:

    • public abstract void glDrawArrays(int mode, int first, int count)   使用VetexBuffer 来绘制,顶点的顺序由vertexBuffer中的顺序指定。
    • public abstract void glDrawElements(int mode, int count, int type, Buffer indices)  ,可以重新定义顶点的顺序,顶点的顺序由indices Buffer 指定。

    前面我们已定义里顶点数组,因此我们将采用glDrawElements 来绘制多边形。

    同样的顶点,可以定义的几何图形可以有所不同,比如三个顶点,可以代表三个独立的点,也可以表示一个三角形,这就需要使用mode 来指明所需绘制的几何图形的基本类型。

    定义面的顶点的顺序很重要,其顺序(逆时针或顺时针)决定面的正面和反面

    逆时针是正面,顺时针是反面(GL10.GL_CCW模式下,否则相反),貌似只和顺序有关,和哪个点在前面无关。 如果开启了反面不渲染,则顺时针表示的部分(反面)将不显示.

    OpenGL ES 使用也只能使用三角形来定义一个面(Face),为了获取绘制的高性能,一般情况不会同时绘制面的前面和后面,
    只绘制面的“前面”。虽然“前面”“后面”的定义可以应人而易,但一般为所有的“前面”定义统一的顶点顺序(顺时针或是逆时针方向)。
    只绘制“前面”的过程称为”Culling”。

    下面代码设置逆时针方法为面的“前面”:
    gl.glFrontFace(GL10.GL_CCW);

    打开 忽略“后面”设置:
    gl.glEnable(GL10.GL_CULL_FACE);

    明确指明“忽略“哪个面的代码如下:
    gl.glCullFace(GL10.GL_BACK);

    下图中定义了四个顶点和对应的Android 顶点定义:

    private float vertices[] = {
     -1.0f,  1.0f, 0.0f,  // 0, Top Left
     -1.0f, -1.0f, 0.0f,  // 1, Bottom Left
     1.0f, -1.0f, 0.0f,  // 2, Bottom Right
     1.0f,  1.0f, 0.0f,  // 3, Top Right
    };

    UV Mapping指将Bitmap的像素映射到Mesh上的顶点。

    UV坐标定义为左上角(0,0),右下角(1,1)(因为使用的2D Texture),下图坐标显示了UV坐标,右边为我们需要染色的平面的顶点顺序:

     为了能正确的匹配,需要把UV坐标中的(0,1)映射到顶点0,(1,1)映射到顶点2等等。

    float textureCoordinates[] = {0.0f, 1.0f,
     1.0f, 1.0f,
     0.0f, 0.0f,
     1.0f, 0.0f };

    如果使用如下坐标定义:

    float textureCoordinates[] = {0.0f, 0.5f,
     0.5f, 0.5f,
     0.0f, 0.0f,
     0.5f, 0.0f };

    Texture匹配到Plane的左上角部分。

    float textureCoordinates[] = {0.0f, 2.0f,
     2.0f, 2.0f,
     0.0f, 0.0f,
     2.0f, 0.0f };

    将使用一些不存在的Texture去渲染平面(UV坐标为0,0-1,1 而 (0,0)-(2,2)定义超过UV定义的大小),这时需要告诉OpenGL库如何去渲染这些不存在的Texture部分。

  • 相关阅读:
    应用程序发生异常,未知的软件异常0x0eedfade,位置为0x0000001355C
    关于条件表达式的理解
    *p++、*++p、(*p)++、++(*p)的比较
    排序算法01_选择排序
    递归_汉诺塔问题
    排序算法00_冒泡排序
    深入理解C语言
    虚拟机_第一篇---创建Linux虚拟机
    虚拟机_第〇篇---虚拟机的下载安装与功能简介
    对i++与++i的理解
  • 原文地址:https://www.cnblogs.com/zijianlu/p/2727757.html
Copyright © 2011-2022 走看看