Я делаю 2d игру, используя opengl в android. У меня есть квадратный текстурированный спрайт, который я намерен использовать в качестве прыгающего шара. Проблема, с которой я столкнулся, касается перевода спрайта. Я использую единственную модельную матрицу как униформу моего вершинного шейдера. Я обновляю эту матрицу перед визуализацией каждого из спрайтов. Является ли это правильным методом?перевод сделан неправильно в opengl
Я хочу, чтобы мяч ускорялся с помощью гравитационного эффекта, но он переводится только с постоянной скоростью.
Вот функция обновления класса спрайтов: -
public Ball(int textureID) {
texture = textureID;
//Stores location of the center of the ball
location = new Vector(300,350);
//The velocity of ball
speed = new Vector(0, 0);
//gravity acceleration
accel = new Vector(0, 2);
//Geometry of ball
rect = new Geometry.Rectangle(new Geometry.Point(location.getI() - RADIUS,location.getJ() - RADIUS, 0), 2*RADIUS, 2*RADIUS);
//Builder class to create vertex coordinates
builder = new ObjectBuilder(ObjectBuilder.RECTANGLE2D, true);
builder.generateData(rect, 0);
//Vertex Array holds the coordinates
vertexArray = new VertexArray(builder.vertexData);
}
public void update(float[] modelMatrix) {
Matrix.setIdentityM(modelMatrix, 0);
location.addVector(speed);
Matrix.translateM(modelMatrix, 0, speed.getI(), speed.getJ(), 0);
accel.setJ(1);
speed.addVector(accel);
accel.setI(-(0.3f * speed.getI()));
}
Мой Vertex шейдер: -
uniform mat4 u_Matrix;
uniform mat4 u_ModelMatrix;
attribute vec4 a_Position;
attribute vec2 a_TextureCoordinates;
varying vec2 v_TextureCoordinates;
void main() {
v_TextureCoordinates = a_TextureCoordinates;
gl_Position = u_Matrix * u_ModelMatrix * a_Position;
}
Мой OnDrawFrame Функция: -
public void onDrawFrame(GL10 gl) {
textureShaderProgram.useProgram();
ball.update(modelMatrix);
textureShaderProgram.setUniforms(projectionMatrix, modelMatrix);
ball.bindData(textureShaderProgram);
ball.render();
}
Спасибо, это решило мою проблему. Btw - мой метод перевода объекта прямо ?? Я передаю эту матрицу модели в форму перед каждым рендерингом объекта. – AribAlam
Должен ли я предоставить каждому объекту собственную матрицу модели или просто изменить его можно сделать – AribAlam
Это правильный способ сделать это. Вы можете просто изменить эту матрицу каждый раз (однако вы все равно отправляете ее как униформу в шейдер при каждом ее изменении), однако я всегда предпочитаю хранить модельную матрицу для каждого объекта. – Reigertje