我想知道是否有一种方法可以使用顶点在OpenGL ES中更新和移动三角形。这些是我的三角形的顶点:
mapN
我想知道是否可以在不使用矩阵的情况下移动三角形。
谢谢!
答案 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;
}
}