Так что я довольно новичок в opengl, и у меня появился объект, который появляется на экране, и у меня также есть игровой цикл, но я не могу получить треугольник, который я сделал для перемещения, и если я это сделаю заставить его двигаться, он не перерисовывает себя.Как перемещать и поворачивать объект в opengl с помощью матриц
PaintGl рисует мой треугольник на экран
void MeGlWindow::paintGL()
{
GLint TriPositionUniformLocation = glGetUniformLocation(programID, "TriPosition");
TriPosition = rot * tra;
glUniformMatrix3fv(TriPositionUniformLocation, 1, GL_FALSE, &TriPosition[0][0]);
//glClearColor(1, 0, 0, 1);
//glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glViewport(0, 0, width(), height());
//glDrawArrays(GL_TRIANGLES, 0, 6);
glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_SHORT, 0);
}
мое обновление вызывается каждый кадр и им пытаются использовать это, чтобы получить ввод с клавиатуры, чтобы знать, когда для перемещения объекта. прямо сейчас im пытается перевести, если клавиша u или down нажата и вращается, если нажата левая или правая клавиша.
void MeGlWindow::myUpdate()
{
short Left = GetAsyncKeyState(37);
short Up = GetAsyncKeyState(38);
short Right = GetAsyncKeyState(39);
short Down = GetAsyncKeyState(40);
float speed = .001f;
float angle = 0;
if (Left != 0)
{
angle -= .5;
rot = mat3(cos(angle), -sin(angle), rot[0][2], sin(angle), cos(angle), rot[1][2], rot[2][0], rot[2][1], rot[2][2]);
cout << "moved" << endl;
}
if (Right != 0)
{
angle += .5;
rot = mat3(cos(angle), -sin(angle), rot[0][2], sin(angle), cos(angle), rot[1][2], rot[2][0], rot[2][1], rot[2][2]);
cout << "moved" << endl;
}
if (Up != 0)
{
tra = mat3(tra[0][0], tra[0][1], tra[0][2], tra[1][0], tra[1][1], tra[1][2] + speed, tra[2][0], tra[2][1], tra[2][2]);
cout << "moved" << endl;
}
if (Down != 0)
{
tra = mat3(tra[0][0], tra[0][1], tra[0][2], tra[1][0], tra[1][1], tra[1][2] + -speed, tra[2][0], tra[2][1], tra[2][2]);
cout << "moved" << endl;
}
if (angle < 0) angle += 360;
if (angle > 360) angle -= 360;
paintGL();
}
мой последний кусок кода vertexshadercode, что им с помощью нарисовать треугольник Aswell.
#version 430
in layout(location=0) vec2 position;
in layout(location=1) vec3 vertexColor;
uniform mat3 TriPosition;
out vec3 theColor;
void main()
{
vec4 v = vec4(position, 0.0, 1.0);
gl_Position.x = gl_Position.x + TriPosition[0][2];
gl_Position.y = gl_Position.y + TriPosition[1][2];
theColor = vertexColor;
};
Почему мой треугольник не перемещается и не вращается. Я смог сделать это, когда я не использовал opengl, но теперь потерял.
Посмотрите на свой вершинный шейдер. Вы используете атрибут «position» для ввода значения 'v', который никогда не используется. Таким образом, это не влияет на результат. С другой стороны, вы используете значения из 'gl_Position', которые никогда не инициализируются. –