gpt4 book ai didi

OpenGL 旋转对象,同时将其保持在屏幕中心

转载 作者:行者123 更新时间:2023-12-02 13:20:29 26 4
gpt4 key购买 nike

我正在 2D 领域工作,我试图围绕一个对象旋转整个世界(包括该对象),并将该对象保持在屏幕中央。

这是我当前用于变换世界的代码,所有渲染都是在之后完成的:

hw 和 hh 是屏幕的半宽和半高。 p 是对象坐标。

float hw = 400;
float hh = 300;

float x = hw - p.x;
float y = hh - p.y;

glTranslatef(x, y, 0);
glTranslatef(-hw, -hh, 0);
glRotatef(level->angle, 0, 0, 1);
glTranslatef(hw, hh, 0);

但是,它并没有按预期工作。任何帮助将不胜感激。

最佳答案

尝试使用 glPushMatrix() 和 glPopMatrix()。所以你有:

glTranslatef(x, y, 0);
glPushMatrix();
glTranslatef(-hw, -hh, 0);
glRotatef(level->angle, 0, 0, 1);
glTranslatef(hw, hh, 0);
glPopMatrix();

glPushMatrix() 保存当前的矩阵(所有平移、旋转等)并设置一个新的矩阵。该矩阵是相对于旧矩阵的,因此如果您平移而不插入矩阵,您将围绕该矩阵中的 (0|0) 点旋转。如果您设置一个新的矩阵,它会在您在旧矩阵中的位置创建该矩阵。

关于OpenGL 旋转对象,同时将其保持在屏幕中心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9104416/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com