我只是在玩弄多边形和其他东西,并决定尝试制作自己的可旋转立方体,我决定通过在每个“多边形”上生成 6 个不同的边和 8 个顶点来实现这一点。(只是一个可以倾斜以适应立方体透视的正方形 - 我还没有找到像 LWJGL 或其他任何“四边形”方法)我知道这可能不是最好的方法,因为我遇到了问题; 油漆顺序。我知道有一个“顺序”,当它们逐行沿着代码向下时,它们会被绘制,但是看看我的代码,你有什么办法认为我可以改变顺序而不是得到这种效果当我渲染我的“立方体”时:
http://i.stack.imgur.com/3MdT2.png
我用不同的颜色为每一面着色,正如你所见,结果非常糟糕。通常,如果我只是要渲染一个无法移动的 2D 立方体,我会制作绘制顺序,这样就不会发生这种情况,但是因为我想旋转和移动它,所以我会说这样做毫无意义.
这是我的代码,任何帮助将不胜感激,谢谢!(忽略我使用小程序来做这件事的事实,我只是在测试......)
package advanced;
import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
public class rotatingCube extends Applet implements Runnable {
private static final long serialVersionUID = -5353063756246119245L;
int[][] vertex = {
{ 50, 50 }, { 100, 50 }, { 100, 100 }, { 50, 100 },
{ 75, 75 }, { 125, 75 }, { 125, 125 }, { 75, 125 }
};
int[] Xpoly1={ vertex[0][0], vertex[1][0], vertex[2][0], vertex[3][0] },
Ypoly1={ vertex[0][1], vertex[1][1], vertex[2][1], vertex[3][1] },
Xpoly2={ vertex[4][0], vertex[5][0], vertex[6][0], vertex[7][0] },
Ypoly2={ vertex[4][1], vertex[5][1], vertex[6][1], vertex[7][1] },
Xpoly3={ vertex[5][0], vertex[1][0], vertex[2][0], vertex[6][0] },
Ypoly3={ vertex[5][1], vertex[1][1], vertex[2][1], vertex[6][1] },
Xpoly4={ vertex[4][0], vertex[0][0], vertex[3][0], vertex[7][0] },
Ypoly4={ vertex[4][1], vertex[0][1], vertex[3][1], vertex[7][1] },
Xpoly5={ vertex[3][0], vertex[2][0], vertex[6][0], vertex[7][0] },
Ypoly5={ vertex[3][1], vertex[2][1], vertex[6][1], vertex[7][1] },
Xpoly6={ vertex[0][0], vertex[1][0], vertex[5][0], vertex[4][0] },
Ypoly6={ vertex[0][1], vertex[1][1], vertex[5][1], vertex[4][1] };
public void start() {
setSize(500, 500);
new Thread(this).start();
}
public void run() {
}
public void paint(Graphics e) {
Graphics2D g = (Graphics2D) e;
g.setColor(Color.RED);
g.fillPolygon(Xpoly1, Ypoly1, 4);
g.setColor(Color.GREEN);
g.fillPolygon(Xpoly2, Ypoly2, 4);
g.setColor(Color.BLUE);
g.fillPolygon(Xpoly3, Ypoly3, 4);
g.setColor(Color.YELLOW);
g.fillPolygon(Xpoly4, Ypoly4, 4);
g.setColor(Color.ORANGE);
g.fillPolygon(Xpoly5, Ypoly5, 4);
g.setColor(Color.PINK);
g.fillPolygon(Xpoly6, Ypoly6, 4);
}
}