所以我對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。
#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'中的值永遠不會被初始化。 –