Как мне переместить объект в открытых углах, используя вершины? - PullRequest
1 голос
/ 28 мая 2019

Мне интересно, есть ли способ обновить и переместить треугольник в OpenGL ES, используя вершины.Это вершины моего треугольника:

// in counterclockwise order :

static float triangleCoords[] = {
        0.0f,  0.622008459f, 0.0f,  // top
        -0.5f, -0.311004243f, 0.0f, // bottom left
        0.5f, -0.311004243f, 0.0f   // bottom right
}; 

Я хотел знать, можно ли было переместить треугольник без матриц.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 28 мая 2019

Хорошо, я представлю вам некоторые из моих идей (я использую ECMA6).Измените каждое число методами с возвратом.Затем в классе (модели) определите, что вы хотите.

Первое использование классно-ориентированного кодирования, избегая процедурного. Проект webGL2 - объектно-ориентированный

      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;

    }

}
0 голосов
/ 28 мая 2019

Да, это возможно, но в принципе это бессмысленно. Самый быстрый способ преобразования вершин - это матрица, и в GPU есть специальная схема, которая делает это чрезвычайно быстро. Поэтому, если вы хотите преобразовать и обновить эти вершины самостоятельно, просто измените значения вершин перед отправкой. Однако это будет гораздо медленнее, чем их преобразование в вершинный шейдер с помощью матрицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...