联系方式: 微信:biyebang QQ: 629001810
真实感图形学是计算机图形的核心内容之一,是最能直接反映图形学魅力的分支。
寻求能准确地描述客观世界中各种现象与景观的数学模型,并逼真地再现这些现象与景观,是图形学的一个重要研究课题。很多自然景物难以用几何模型描述,如烟雾、植物、水波、火焰等。本文所讨论的几种建模及绘制技术都超越了几何模型的限制,能够用简单的模型描述复杂的自然景物。
(一)自然景物模拟
在计算机的图形设备上实现真实感图形必须完成的四个基本任务。
1. 三维场景的描述。三维造型。
2. 将三维几何描述转换成为二维透视图。透视变换。
3. 确定场景中的所有可见面。消隐算法,可见面探测算法。
4. 计算场景中可见面的颜色。根据基于光学物理的光照模型计算可见面投射到观察者眼中的光亮度大小和色彩组成。
寻求能准确地描述客观世界中各种现象与景观的数学模型,并逼真地再现这些现象与景观,是图形学的一个重要研究课题。很多自然景物难以用几何模型描述,如烟雾、植物、水波、火焰等。本文所讨论的几种建模及绘制技术都超越了几何模型的限制,能够用简单的模型描述复杂的自然景物。
本程序主要运用java2D提供的强大画图功能,来画直线、椭圆、矩形。首先,是在工具栏中选择要绘制的图形,然后通过鼠标的拖拽来完成图形的绘制。
1. 实现绘图面板
在绘图面板中要实现两个功能,一是跟踪鼠标事件,另一个是覆盖paint方法绘制图形。
鼠标的跟踪通过MouseListener接口来实现,在本绘图程序中,要实现其中的mousePressed和mouseReleased方法,即在开始单击鼠标左键(mousePressed)时,设置绘制图形的起始点,起始点的位置由MouseEvent类的getX和getY方法分别得到。在释放鼠标(mouseReleased)时,设置所绘制图形的终点,终点的位置也由getX和getY方法得到,同时利用两个点的位置信息绘制屏幕。代码如下:
public void mouseReleased(MouseEvent e)
{
point[1]=new Point(e.getX(),e.getY());
}
public void mouseReleased(MouseEvent e)
{
point[1]=new Point(e.getX(),e.getY());
repaint();
}
Paint方法描述了组件的绘制方法,通过覆盖该方法,可绘制各种需要的图形。在本程序中,通过一个swith-case结构来设置绘制图形的类型。Shape参数来自于工具栏,通过drawShape方法传入,shape为0、1、2时画线、画圆、画矩形,它们分别通过Graphics类的drawLine、drawOval、drawRect方法完成。这部分的主要代码如下:
switch (shape){
case 0:
g.drawLine(point[0].x,point[0].y,point[1].x,point[1].y);
break;
case 1:
int width=point[1].x-point[0].x;
int height=point[1].y-point[0].y;
g.drawOval(point[0].x,point[0].y,width,height);
break;
case 2:
width=point[1].x-point[0].x;
height=point[1].y-point[0].y;
g.drawRect(point[0].x,point[0].y,width,height);
break;
}
2.演示程序
在用户界面上方设置了一个工具栏,包含3个按钮,这3个按钮组成按钮组,某时刻只能一个按钮被有选中。
在按钮的事件处理中,调用ActionEvent类的getSource方法得到事件源,将它与3个按钮进行比较,可得到事件来自于哪个按钮,并将这个参数通过PainterPanel类的drawShape方法传递到PainterPanel实例中,这样在发生鼠标拖拽时,就能根据shape的值来确定应该绘制哪种图形。主要代码如下:
for (int i=0;i<button.length;i++)
{
if (e.getSource()==button[i])
{
painter.drawShape(i);
}
}
本程序的运行效果如下图:
版权所有© 帮我毕业网 并保留所有权利