Java 3D渲染器-边消失
我正在使用Java Graphics开发一个简单的3D渲染器,它目前可以渲染组成一个简单平面的一组多边形。问题是,边上的一些线在渲染几秒钟后消失。怎么了Java 3D渲染器-边消失,java,3d,rendering,Java,3d,Rendering,我正在使用Java Graphics开发一个简单的3D渲染器,它目前可以渲染组成一个简单平面的一组多边形。问题是,边上的一些线在渲染几秒钟后消失。怎么了 package com.zove.renderer; import java.awt.Graphics; import java.awt.Point; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JFrame; i
package com.zove.renderer;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
public final class Frame extends JPanel implements KeyListener{
volatile int x1 = 0;
volatile int x2 = 0;
volatile int y1 = 0;
volatile int y2 = 550;
volatile int x3 = 0;
volatile int y3 = 0;
volatile int x4 = 800;
volatile int y4 = 0;
volatile int angle = 0;
volatile int i;
public JFrame f;
public Frame(){
f = new JFrame();
f.setVisible(true);
f.add(this);
f.setResizable(false);
f.setSize(800,550);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.addKeyListener(this);
}
public void paint(Graphics g){
super.paint(g);
for(i=0; i<2000;){
if(x1+i+angle<2600){
//Vertical
g.drawLine(x1+i+angle, y1,x2+i-angle*2,y2);
}
else{
g.drawLine(x1+i+angle, y1-i/200,x2+i-angle,y2+angle);
}
//Horizontal
g.drawLine(x3, y3+i-angle/2,x4,y4+i+angle/2);
i +=10*angle/100;
}
}
public static void main(String[] args){
Thread s = new Thread(new repainter());
s.start();
}
@Override
public void keyPressed(KeyEvent arg0) {
i -=20;
angle -=20;
}
@Override
public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
}
class repainter implements Runnable{
public void run() {
Frame f = new Frame();
while(true){
f.repaint();
try {
Thread.sleep(30);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(f.x1+f.i+f.angle);
f.angle +=10;
}
}
}
package com.zove.renderer;
导入java.awt.Graphics;
导入java.awt.Point;
导入java.awt.event.KeyEvent;
导入java.awt.event.KeyListener;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
公共最终类框架扩展JPanel实现KeyListener{
挥发性int x1=0;
挥发性int x2=0;
挥发性int y1=0;
挥发性int y2=550;
挥发性int x3=0;
挥发性int y3=0;
挥发性int x4=800;
挥发性int y4=0;
可变内倾角=0;
挥发性int i;
公共JF框架;
公共框架(){
f=新的JFrame();
f、 setVisible(真);
f、 加上(这个);
f、 可设置大小(假);
f、 设置大小(800550);
f、 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f、 addKeyListener(此);
}
公共空间涂料(图g){
超级油漆(g);
对于(i=0;iIt不是你的错,而是从float
到int
的转换会截断并失去精度。