1 / 38

计算机图形学实验

计算机图形学实验. 计算机科学与技术学院. 提纲. 实验一 上机环境的设置 实验二 基于光栅图形学的直线、圆弧生成 实验三 多边形的扫描转换和区域填充 实验四 变换与裁剪 实验五 投影 实验六 光照明模型模拟. 实验一 上机环境的设置. 实验目的 实验采用 Windows 环境下 Java 编程,通过本次实验使学生基本了解 Java 编程的用户界面环境,能独立运用该环境,为后续实验打下良好的基础。 理解如何用 Java 语言为一个坐标为 (x,y) 的像素设置颜色。为后面章节的算法编程实现和上机实习奠定基础。. 实验内容:

marla
Télécharger la présentation

计算机图形学实验

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 计算机图形学实验 计算机科学与技术学院

  2. 提纲 • 实验一 上机环境的设置 • 实验二 基于光栅图形学的直线、圆弧生成 • 实验三 多边形的扫描转换和区域填充 • 实验四 变换与裁剪 • 实验五 投影 • 实验六 光照明模型模拟

  3. 实验一 上机环境的设置 • 实验目的 • 实验采用Windows环境下Java编程,通过本次实验使学生基本了解Java编程的用户界面环境,能独立运用该环境,为后续实验打下良好的基础。 • 理解如何用Java语言为一个坐标为(x,y)的像素设置颜色。为后面章节的算法编程实现和上机实习奠定基础。

  4. 实验内容: • 实现画起点为(50,50),终点为(150,150)的直线的Java Applet程序; • 实现画起点为(50,50),终点为(150,150)的直线的JavaApplication程序;

  5. 实验步骤 • 1)用Java小程序绘图与绘图有关的Java 小程序的关键方法之一是:init(),它由浏览器或applet浏览器来调用,通知小程序即将被装入系统,即初始化。初始化包括创建小程序所需的对象,设置初始状态,装载图像和字体,设置某些参数。涉及到的绘图函数有paint(Graphics g),update()和repaint()

  6. 2)用Java应用程序绘图 在Java应用程序中,可把图形绘制在面板中,然后再将该面板加入到窗口程序中显示图形。面板是继承JPanel类而来,其中与绘图相关的是paintComponent(Graphics)函数。可以通过覆盖面板的paintComponent()函数,将所有的图形操作代码放在这个函数中来实现图形的绘制。此函数相当于Java小程序中的paint(Graphics)函数。窗口是继承JFrame类而来,其中的show()函数使整个窗口可见。

  7. 实验结果示例 • Java小程序

  8. Java应用程序

  9. 实验二 直线、圆弧生成 • 实验目的:直线与圆弧作为机器人轮廓的基本元素,在机器人的建模中起到至关重要的作用。通过该实验熟悉如何将象素点亮,如何画一条直线、一段圆弧。另外也通过该实验熟悉书本中光栅图形显示器的特点、充分理解光栅图形的基本元素(直线、圆弧)的生成算法

  10. 实验内容:在实验一的基础上,进行直线与圆的绘制,具体为 • 1、完成直线绘制程序。 • 2、选择一种绘圆弧程序,在其基础上,使其能绘整个圆。

  11. 实验步骤: • 1)绘制直线: • DDA直线绘制算法 • Bresenham算法 • 2)绘制圆弧 • 用正负法画圆弧 • 在圆弧基础上画整圆

  12. 实验结果示例:

  13. 实验三 多边形扫描转换和区域填充 • 实验目的:机器人的轮廓以矩形为主,则多边形的着色或区域着色问题在绘制场景中的也是非常重要的。通过该实验加深对多边形的扫描转换和区域填充的原理的理解,并掌握java中ImageProducer接口的用法

  14. 实验内容: • 1、用边界标志算法填充一个凸多边形。 • 2、用扫描线种子算法填充任意一个区域。

  15. 实验步骤: • 1)填充一个凸多边形 • 步骤1:以值为boundary_color 的特殊颜色勾画多边形P的边界。设多边形的顶点为均为整数;置。下面的算法可保证每一条扫描线上着上这种特殊颜色的点的个数是偶数(包括零)。

  16. 步骤2:逐条处理扫描线对多边形着色。设in_flag是一布尔变量。对每一条扫描线从左到右进行搜索,如果当前像素位于多边形P内,则in_flag=true,需填上值为polygon_color的颜色;若该像素在多边形P外,则需填上值为background_color的颜色。

  17. 2)区域填充 • (1)将堆栈置空,并将给定的种子点(x, y)压入堆栈。 • (2)若堆栈为空,算法结束;否则取栈顶元素(x, y)作为种子点。 • (3)从种子点(x, y)出发,沿纵坐标为y的当前扫描线向左右两个方向用新的颜色逐个像素地填充,直到边界。设区间两边界的横坐标分别为和。 • (4)以区间为搜索范围,检查与当前扫描线相邻的上下两条扫描线上的像素,若存在非边界、未填充的像素,则把相应小区间中最右边的点作为种子点压入堆栈,转入(2)。

  18. 实验结果示例

  19. 实验四 变换与裁剪 • 实验目的:通过该实验加深几何变换以及经典裁剪算法的理解,并能熟练掌握这些算法。

  20. 实验内容: • 1、调用DDA算法,然后实现直线的平移,放缩,旋转。 • 2、选择Sutherland-Cohen或cyrus-Beck算法或梁友栋算法进行给定直线的裁剪。

  21. 实验步骤: • 1)Cyrus-beck 算法 • 2)Sutherland-Cohen 算法 • 3)梁友栋算法

  22. 实验五 投影 • 实验目的:最终的机器人是要通过三维到二维的投影而显示在计算机上,所以,通过该实验加深对投影的原理的认识。

  23. 实验内容:以一个立方体为例,投影模式采用透视,对其进行平移,放缩和旋转等模型变换。

  24. Virtual Universe Locale Object BranchGroup BG BG TG TG TransformGroup S Appearance Appearance Shape3D S Appearance Appearance • 实验步骤: • 本实验用到java3D • Java3D场景图

  25. java3D编程思路 • 1 按照上图的结构首先必须创建一个根节点Virtual Universe。 • SimpleUniverse u=new SimpleUniverse(c); • 2 创建BranchGroup节点。BranchGroup节点的内容一般比较多,因此通常定义createSceneGraph()方法,在这个方法中定义BranchGroup的内容,然后返回一个BranchGroup,最后将这个BranchGroup的实例添加到SimpleUniverse. • public BranchGroup createSceneGraph() • { • BranchGroup objRoot=new BranchGroup(); • //其他子节点内容 • return objRoot; • } • BranchGroup scene=createSceneGraph(); • u.addBranchGroup(scene); 0,0,0, //忽略层,可见性和损毁掩模

  26. 3 创建TransformGroup节点。TransformGroup对象生成一个坐标系,其长度为米,原点在屏幕中心。Transform3D对象用来对TransformGroup对象进行渲染。 • Transform3D t3d=new Transform3D(); • TransformGroup trans=new TransformGroup(t3d); • objRoot.addChild(trans); • 4 创建Shape3D节点。 • Sphere sphere=new Sphere(.3f,app); • trans.addChild(sphere);

  27. 5 为三位几何体创建外观Appearance。 • Appearance app=new Appearance(); • Material mat=new Material(); • mat.setDiffuseColor(new Color3f(1f,0f,0f)); • mat.setSpecularColor(new Color3f(1f,1f,1f)); • mat.setShininess(512f); • app.setMaterial(mat);

  28. 实验结果示例:

  29. 实验六 光照明模型模拟 • 实验目的:如果得到真实感图形,机器人还应打上光照,通过该实验加深对光照明模型的认识,并掌握它。

  30. 实验内容: • 1、绘制一个光照明球体。 • 2、绘制一个点光照明的立方体,根据立方体各个表面的法向量计算立方体的颜色。

  31. 实验步骤: • 1)Java3D中的颜色模型Java 3D模型的颜色是由R(red)、G(green)、B(bue)3个分量来组合表示

  32. 2)明暗模型在计算光照明模型时,有时可以计算每一点的光强;有时可以计算特定点的光强,面上的光强根据顶点的光强由插值方法得到。采用何种形式计算物体的明暗是在物体的Appearance对象的属性中指定的,其模式是由ColoringAttributes对象指定。在Java3D中有四种明暗模式:SHADE—GOURAUD、SHADE—FLAT、FASTEST、NICEST。在Gouraud明暗模式下,每个像素的光照强度值根据包围它的多边形顶点的强度由插值法算出。在Flat明暗模式下,一个面上所有像素的光照强度值与多边形的某—个顶点相同。Gouraud明暗模式的优点是真实感强,Flat明暗模式的优点是速度快。2)明暗模型在计算光照明模型时,有时可以计算每一点的光强;有时可以计算特定点的光强,面上的光强根据顶点的光强由插值方法得到。采用何种形式计算物体的明暗是在物体的Appearance对象的属性中指定的,其模式是由ColoringAttributes对象指定。在Java3D中有四种明暗模式:SHADE—GOURAUD、SHADE—FLAT、FASTEST、NICEST。在Gouraud明暗模式下,每个像素的光照强度值根据包围它的多边形顶点的强度由插值法算出。在Flat明暗模式下,一个面上所有像素的光照强度值与多边形的某—个顶点相同。Gouraud明暗模式的优点是真实感强,Flat明暗模式的优点是速度快。

  33. 3)光源光源对于三维真实感图形来说是非常重要的。如果没有光源,所绘制的三维图形就没有立体感,和二维图形基本没有区别。Java3D中的光照是对真实光照的一种逼近,它是一个高效的方法。在Java3D中可以使用多个光源,也可以单独使用某个光源。Java3D提供四种光源,即环境光、定向光、点光源、聚光源。

  34. 4)材质:材质(Material)对象是外观(Appearance)对象的一部分。物体表面在光线作用下的表现效果取决于它的材质。通过对物体设置不同的材质可以使物体呈现不同光滑程度的表面。

  35. 实验结果示例

More Related