Java 如何在opengl中旋转三维空间中的单个形状?

Java 如何在opengl中旋转三维空间中的单个形状?,java,opengl,rotation,shapes,Java,Opengl,Rotation,Shapes,所以我对opengl和创建3d形状非常陌生。在我的例子中,我有两个正方形,一个高度/宽度为2,中心位于原点坐标0,0,-10,另一个位于窗口最左侧。我试图沿着x-z平面旋转原点中的正方形,而不旋转位于屏幕最左侧的正方形。我的方法是将中心正方形的每个xyz坐标保存为一个变量,并创建一个使用costheta行为沿x-z平面旋转正方形的方法。我的代码可以工作,但我认为这是一种可怕的方法,因为必须有一些已经创建的更有效的方法可以实现相同的功能。我看了glRotatef,但据我所知,这只会旋转我的相机视图

所以我对opengl和创建3d形状非常陌生。在我的例子中,我有两个正方形,一个高度/宽度为2,中心位于原点坐标0,0,-10,另一个位于窗口最左侧。我试图沿着x-z平面旋转原点中的正方形,而不旋转位于屏幕最左侧的正方形。我的方法是将中心正方形的每个xyz坐标保存为一个变量,并创建一个使用costheta行为沿x-z平面旋转正方形的方法。我的代码可以工作,但我认为这是一种可怕的方法,因为必须有一些已经创建的更有效的方法可以实现相同的功能。我看了glRotatef,但据我所知,这只会旋转我的相机视图,最终会旋转中间的正方形和最左边的正方形,而我只想旋转中间的正方形。是否有其他方法可以在3d空间中轻松旋转单个2d形状

如果相关的话,我已经包括了我自己为中间正方形制作的旋转代码:顺便说一句,蓝色类只是我制作的一个类,它有正方形坐标和costheta的圆度

if (Keyboard.isKeyDown(Keyboard.KEY_LEFT)) {

            blue.setCircle(blue.getCircle()+1f);//getCircle is initially zero and gets incremented by 1 for everytime the program loops with the user holding the left button.

            blue.setXfrontTR((float)Math.cos(Math.toRadians(blue.getCircle())));//Changing top-right x coordinate of the middle square
            blue.setZfrontTR(-10f+ ((float)Math.cos(Math.toRadians(blue.getCircle()+270f)))); //Changing top-right z coordinate of the middle square.

            blue.setXfrontTL((float)Math.cos(Math.toRadians(blue.getCircle()+180f)));
            blue.setZfrontTL(-10f+ ((float)Math.cos(Math.toRadians(blue.getCircle()+90f))));//Changing top-left x,z coordinates

            blue.setXfrontBL((float)Math.cos(Math.toRadians(blue.getCircle()+180f)));
            blue.setZfrontBL(-10f+ ((float)Math.cos(Math.toRadians(blue.getCircle()+90f))));//Changing bottom-left x,z coordinates

            blue.setXfrontBR((float)Math.cos(Math.toRadians(blue.getCircle())));
            blue.setZfrontBR(-10f+ ((float)Math.cos(Math.toRadians(blue.getCircle()+270f))));//Changing bottom-right x-z coordinates
}

如果为每个需要独立移动的对象指定一个模型视图矩阵,则可以实现这一点。快速绘制/移动几个独立对象的另一个选项是:

对于每个对象:

推矩阵

绘图对象

流行音乐

而在modelview矩阵中

绘图方法在很大程度上取决于您编码的OpenGL版本,但上述方法适用于简单绘图。我不是OpenGL/3D编程专家,因此,如果您稍等,您可能会听到比我提供的更好的智慧: