如何使用顶点在opengles中移动对象?

时间:2019-05-28 00:22:11

标签: java android opengl-es

我想知道是否有一种方法可以使用顶点在OpenGL ES中更新和移动三角形。这些是我的三角形的顶点:

mapN

我想知道是否可以在不使用矩阵的情况下移动三角形。

谢谢!

2 个答案:

答案 0 :(得分:0)

是有可能的,但是基本上没有意义。转换顶点的最快方法是使用矩阵,而GPU上恰好有专门的电路来使其达到极快的速度。因此,如果要自己变换和更新这些顶点,只需在提交前修改顶点值即可。但是,这比通过矩阵在顶点着色器中进行转换要慢得多。

答案 1 :(得分:0)

好吧,我将向您介绍一些我的想法(我使用ECMA6)。使用带有return的方法更改每个数字。然后在课堂上(模型)定义您想要的东西。

首次使用基于类的编码避免过程。 webGL2 project - object oriented

      class Scale {
    
        constructor() {
    
            this.x = 1;
            this.y = 1;
            this.z = 1;
    
        }
    
        LinearScale(scale_) {
    
            this.x = scale_;
            this.y = scale_;
            this.z = scale_;
    
        }
    
    }
    
        class Point {
    
        constructor(x, y, z) {
    
            if (typeof z == 'undefined') {
                z = 0;
            }
    
            this.x = x;
            this.y = y;
            this.z = z;
            this.scale = new Scale();
    
        }
    
        get X() {
            return parseFloat(this.x * this.scale.x);
        }
        get Y() {
            return parseFloat(this.y * this.scale.y);
        }
        get Z() {
            return parseFloat(this.z * this.scale.z);
        }
    
    }


class TriangleVertex {

    constructor(root) {

        this.root = root;
        this.size = root.size;
        this.dynamicBuffer = App.dynamicBuffer;
        this.pointA = new Point(0.0, 1, 0.0);
        this.pointB = new Point(-1, -1, 0);
        this.pointC = new Point(1, -1, 0);

    }

    // GETTER
    get vertices() {

        return new Float32Array([
                this.pointA.X, this.pointA.Y * this.root.size, this.pointA.Z,

                this.pointB.X * this.root.size, this.pointB.Y * this.root.size, this.pointB.Z,

                this.pointC.X * this.root.size, this.pointC.Y * this.root.size, this.pointC.Z
            ]);

    }

    setScale(scale) {

        this.size = scale;

        if (this.dynamicBuffer == true)
            return;

        App.operation.triangle_buffer_procedure(this.root)

        return 'dynamicBuffer is false but i will update vertex array prototypical.';

    }

}

class Position {

    constructor(x, y, z) {
        //super()

        if (typeof x == 'undefined') {
            x = 0;
        }
        if (typeof y == 'undefined') {
            y = 0;
        }
        if (typeof z == 'undefined') {
            z = 0;
        }

        this.x = x;
        this.y = y;
        this.z = z;

        return this;

    }

    get worldLocation() {

        return [this.x, this.y, this.z];

    }

    SetX(newx) {

        this.x = newx;

    }

    SetY(newy) {

        this.y = newy;

    }

    SetZ(newz) {

        this.z = newz;

    }

    setPosition(newx, newy, newz) {

        this.x = newx;
        this.y = newy;
        this.z = newz;

    }

}