java - lwjgl,仅旋转屏幕上的一个对象?

标签 java api lwjgl

所以我尝试只旋转一个对象,我已经阅读了有关如何执行此操作的其他帖子,但所有这些帖子都只是说了这样的话: 1.调用glLoadIdentity(); 2. 绘制形状 3.旋转

我已经尝试了他们告诉我做的事情,但似乎对我不起作用?

if (time != faces.size() - 1 && faces.size() != 1){
            if (faces.get(time+1).needsIdentity){
                GL11.glLoadIdentity();
                System.out.println("The not last identity was set!");
            }
            System.out.println("got identity");
        }else{
            if (faces.get(faces.size() - 1).needsIdentity){
                GL11.glLoadIdentity();
                System.out.println("identity set!");
            }
            System.out.println("got last identity");
        }


        GL11.glBegin(GL11.GL_QUADS);
        GL11.glColor3f(f.clr.red, f.clr.green, f.clr.blue);
        GL11.glVertex3f(f.loc.x - f.x, f.loc.y +  f.y, f.loc.z + f.z);
        GL11.glVertex3f(f.loc.x + f.x, f.loc.y + f.y, f.loc.z + f.z);
        GL11.glVertex3f(f.loc.x + f.x, f.loc.y - f.y, f.loc.z + f.z);
        GL11.glVertex3f(f.loc.x - f.x, f.loc.y - f.y, f.loc.z + f.z);
        GL11.glEnd();
        finished();
    }

public void finished(){
    GL11.glRotatef(rs.rotx, 1F, 0F, 0F);
    GL11.glRotatef(rs.roty, 0F, 1F, 0F);
    GL11.glRotatef(rs.rotz, 0F, 0F, 1F);
    System.out.println("rotated");
}

这是我的代码。 在名为 faces 的数组中有 4 个四边形,其中 3 个有 needsIdentity false,其中一个是 true,也是我要旋转的那个。 我已经输入了打印行来检查它是否获得了身份,它确实获得了身份。 另请参阅times每轮添加 1 个。

你能解释一下我到底要在哪里调用glLoadIdentity()吗? ? 您可能想知道这一点,但它旋转的是我而不是对象。

最佳答案

如果您只想旋转场景的某些部分(在您的情况下,是一个对象),您可以使用 glPushMatrix()glPopMatrix()。这允许您进行变换(例如平移、旋转和缩放)并在完成绘制要变换的对象后恢复。不用担心 glLoadIdentity() - 这会重置所有转换。它可能会旋转您的原因是您可能在多次调用 glRotatef(r, x, y, z) 后绘制自己。

//Draw some objects here - not rotated

GL11.glPushMatrix(); //Push the matrix onto the stack

//Rotate the object about to be drawn
GL11.glRotatef(rs.rotx, 1F, 0F, 0F);
GL11.glRotatef(rs.roty, 0F, 1F, 0F);
GL11.glRotatef(rs.rotz, 0F, 0F, 1F);

//Draw the object
GL11.glBegin(GL11.GL_QUADS);
GL11.glColor3f(f.clr.red, f.clr.green, f.clr.blue);
GL11.glVertex3f(f.loc.x - f.x, f.loc.y +  f.y, f.loc.z + f.z);
GL11.glVertex3f(f.loc.x + f.x, f.loc.y + f.y, f.loc.z + f.z);
GL11.glVertex3f(f.loc.x + f.x, f.loc.y - f.y, f.loc.z + f.z);
GL11.glVertex3f(f.loc.x - f.x, f.loc.y - f.y, f.loc.z + f.z);
GL11.glEnd();

GL11.glPopMatrix(); //Pop the matrix off of the stack

//Draw some more objects here - not rotated

关于java - lwjgl,仅旋转屏幕上的一个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38553084/

相关文章:

java - LWJGL 3 图像加载?

java - 如何求矩阵中次对角线的总和(JAVA)

java - 如何在 Spring Boot 中使用 Java 通过更改 JSON 结构中的字段名称(如本例所示)从 JSON 响应中提取特定部分?

java - 带有 HTML 内容的 JTextPane 中缺少空格/表格

xml - 获取和返回 XML 文档的 Web 服务 - 为什么?

r - curl::curl_fetch_memory(url, handle = handle) 中的错误:已达到超时:发送失败:连接已重置

java - LWJGL 键盘输入不起作用

java - 找不到 tomcat 请求的资源时出错 - 在 Netbeans 中实现 SSL 时

android - 使用 Pinboard API 在 Android 中添加帖子时出现 401 Unauthorized

java - LWJGL 改变顶点之间线条的颜色