[ 本帖最后由 乌木 于 2012-5-9 11:16 编辑 ] 我编的java也没有用java3d功能,模型建立,消隐都是自己计算的,主要用到java2d的绘图功能,消除显示时的锯齿是用这个函数实现的:
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
这是画一个完整魔方子程序:
//画一个完整的魔方
void xianshimq(Graphics gg)
{
int i,j;
if(ogg==null){
ogg=createImage(width,height);
};
int m;
boolean zxflag=false;
Graphics og=ogg.getGraphics();
og.setClip(0,0,width,height);
og.setColor(bgColor);
og.fillRect(0, 0, width, height);
Graphics2D g2 = (Graphics2D)og;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
//for(i=26;i<27;i++)
for(i=0;i<zongkuaishu;i++)
{
showmian(g2,moqiu);
};
xianshigongshiye(og);
gg.setClip(0,top,width,height);
gg.drawImage(ogg,0,top,null);
};
其中showmian(g2,moqiu);
xianshigongshiye(og);
是自己编的。
回复 11# 的帖子
你说的这几个,就是绘图的bug,不应该有那几条线的。颜色的不同只是因为光照效果的原因。这里一共就五种颜色,不分深黄浅黄之类的。回复 12# 的帖子
多谢你的回复。antialiasing我试过,不过动画弄得不太流畅,所以就没采用。回头我再试试看。showmian() 里应该有消隐的算法吧。要决定先画那个多边形,后画哪个之类的。大概是什么思路呢?从远到近画? 在调用showmian()之前先排序,这是排过顺序的,显示时要结合显示的面的法向量,不能显示的就不显示了,先画远处的再画近处的,就是画家算法消隐。 这个魔方很难观察,调整好方向之后,只有两种块. 好主意。不过我试了一下还是想画那些法矢量朝后的,否则动画效果有种支离破碎的感觉。现在把那些画成灰色的了。
然后我改了一下多边形中心的算法,现在那个地方已经不会出现之前的那个毛病了。
期待
我们很期待你 能多做出现在市面上常见的一些异型魔方的模拟器,来帮助一些像我这样的初级魔法爱好者 呼呼,花了两个半小时,终于解开了。中间出了很多次错误,多亏了有 撤销 按钮,才不至于从头再来...有了一些经验以后,发现鼠标选的点和对应的顶点之间的对应关系还是不太自然,没达到想转哪儿就转哪儿的程度。我还要慢慢调试啊 刚才我把十几年前的笔记本翻出来了。这是我当时尺规作图画的图。它是这个applet里的形体的镜像。
我改天给applet加一个镜像按钮