当前位置:文档之家› Opengl实验报告及源代码实验二 几何图元绘制

Opengl实验报告及源代码实验二 几何图元绘制

Opengl实验报告及源代码实验二  几何图元绘制
Opengl实验报告及源代码实验二  几何图元绘制

实验报告

学生姓名:学号:专业班级:

实验类型:□验证□综合□设计□创新实验日期:2018.11 实验成绩:

一、实验名称

实验二几何图元绘制

二、实验内容

1.利用OpenGL提供的基本工具函数刷新绘图窗口、指定绘图颜色、设置工作状态

等,实现OpenGL流水线状态的基本管理。

2.采用立即模式绘制OpenGL常用的几何图元:如点、线、三角形等,基于几何图

元绘制一些简单的几何图形。

三、实验目的

1.掌握OpenGL常用工具函数的功能及使用方法,了解立即模式下OpenGL流水线的

工作原理。

2.掌握点、线、三角形等基本几何图元的绘制和图元属性的设置方法,了解点的大

小,直线的宽度与模式,多边形的填充等图元属性的具体使用。

四、实验步骤

1.新建项目OPengl02,在项目下添加opengl0

2.cpp文件和glad.c文件;

2.在opengl02.cpp文件中,添加函数:

(1)绘制点

void renderPoint()

{

//点的绘制

glClearColor(1.0f, 1.0f, 1.0f, 1.0f);

glClear(GL_COLOR_BUFFER_BIT);

glColor3f(1.0, 0.0, 0.0);

glPointSize(30);

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

glEnable(GL_BLEND);

glEnable(GL_POINT_SMOOTH);

glBegin(GL_POINTS);

glVertex3f(0.5, 0.5, 0.0);

glVertex3f(-0.5, 0.5, 0.0);

glVertex3f(-0.5, -0.5, 0.0);

glVertex3f(0.5, -0.5, 0.0);

glEnd();

glFlush();

}

(2)绘制线

void renderLine()

{

//线的绘制

glClearColor(1.0f, 1.0f, 1.0f, 1.0f);

glClear(GL_COLOR_BUFFER_BIT);

glColor3f(1.0, 0.0, 0.0);

glLineWidth(10);

glLineStipple(1, 0xFF00);

glEnable(GL_LINE_STIPPLE);

//glBegin(GL_LINES);

//glBegin(GL_LINE_STRIP);

glBegin(GL_LINE_LOOP);

glVertex3f(0.5, 0.5, 0.0);

glVertex3f(-0.5, 0.5, 0.0);

glVertex3f(-0.5, -0.5, 0.0);

glVertex3f(0.5, -0.5, 0.0);

glEnd();

glFlush();

}

(3)绘制三角形

//三角形的绘制

void renderTrangles()

{

glClearColor(1.0f, 1.0f, 1.0f, 1.0f);

glClear(GL_COLOR_BUFFER_BIT);

glColor3f(1.0, 0.0, 0.0);

glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);

glBegin(GL_TRIANGLES);

glVertex3f(-0.5, 0.5, 0.0);

glVertex3f(-0.9, -0.5, 0.0);

glVertex3f(-0.1, -0.5, 0.0);

glVertex3f(0.4, 0.5, 0.0);

glVertex3f(-0.4, 0.5, 0.0);

glVertex3f(0.0, -0.5, 0.0);

glVertex3f(0.5, 0.5, 0.0);

glVertex3f(0.1, -0.5, 0.0);

glVertex3f(0.9, -0.5, 0.0);

glEnd();

glFlush();

}

(4)绘制圆

#include

#define PI 3.1415926535

GLint circle_points = 128;

//圆的逼近表示

void renderCircle()

{

glClearColor(1.0f, 1.0f, 1.0f, 1.0f);

glClear(GL_COLOR_BUFFER_BIT);

glColor3f(1.0, 0.0, 0.0);

glBegin(GL_LINE_LOOP);

for (int i = 0; i < circle_points; ++i) { float angle = (2 * PI / circle_points)*i;

glVertex2f(cos(angle), sin(angle));

}

glEnd();

glFlush();

}

(5)绘制多边形

//四边形的属性

void renderQads()

{

glClearColor(1.0f, 1.0f, 1.0f, 1.0f);

glClear(GL_COLOR_BUFFER_BIT);

glColor3f(1.0, 0.0, 0.0);

glPointSize(10);

glEnable(GL_POINT_SMOOTH);

glLineWidth(5);

glPolygonMode(GL_FRONT, GL_FILL);

glBegin(GL_QUADS);

glVertex3f(0.5, 0.5, 0.0);

glVertex3f(-0.5, 0.5, 0.0);

glVertex3f(-0.5, -0.5, 0.0);

glVertex3f(0.5, -0.5, 0.0);

glEnd();

glFlush();

}

(6)绘制三角形组合

//三角带的属性

void renderTrangleStrip()

{

glClearColor(1.0f, 1.0f, 1.0f, 1.0f);

glClear(GL_COLOR_BUFFER_BIT);

glColor3f(1.0, 0.0, 0.0);

glLineWidth(5);

glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);

glBegin(GL_TRIANGLE_STRIP);

glVertex3f(-0.9, -0.5, 0.0);

glVertex3f(-0.5, 0.5, 0.0);

glVertex3f(-0.1, -0.5, 0.0);

glVertex3f(0.4, 0.5, 0.0);

glVertex3f(0.9, -0.5, 0.0);

glEnd();

glFlush();

}

3.在main函数中分别调用以上六个函数,得出结果。

五、实验结果

(1)目录结构

(2)运行结果

六、实验体会

1.这次实验是了解OPenGL的基本图元,像点、圆、三角形这种基本的图形以及它们的简单组合。在实验中,体会到了OPenGL绘制图形的灵活性和方便性,让我感受到了学习OPenGL的乐趣;

2.在实验中,遇到的最大问题是圆的绘制。一开始没有找对方向,一直在半径和圆心上做功夫。后来查了资料,才写出了逐步逼近的处理方式。所以,在以后做实验的时候要发散思维,不能一味拘泥于传统的思维方式。

D图像生成算法原理

D图像生成算法原理 Standardization of sany group #QS8QHH-HHGX8Q8-GNHHJ8-HHMHGN#

3D图像生成算法原理 一、建齐次坐标 二、着色模型 三、Z缓存 四、纹理映射 在这些步骤中,显示部分(GPU)只负责完成第三、四步,而前两个步骤主要是依靠 CPU 来完成。而且,这还仅仅只是3D图象的生成,还没有包括游戏中复杂的AI运算。 场景切换运算等等……无疑,这些元素还需要CPU去完成,这就是为什么在运行大型3D的时候,当场景切换时再强劲的显卡都会出现停顿的现象。 3D芯片的处理对象是多边形表示的物体。用多边形表示物体有两个优点:首先是直接(尽管繁琐), 多边形表示的物体其表面的分段线性特征除轮廓外可以通过明暗处理(shading)技术消除;其次是仅存储多边形顶点的几何信息, 多边形内部每个象素的明暗颜色计算所需的信息由这些顶点信息插值而来,这正是易于用图形硬件支持的快速明暗处理技术。 支持多边形绘制的图形硬件同样也可以绘制由双三次曲面片表示的物体,通过对这种物体的表面进行三角剖分, 用逼近的三角形网格代替原物体的曲面表示就可以做到这一点。

当然,用多边形表示物体也有其缺点,如增加了纹理映射和阴影生成的难度,当需要详细表示复杂物体时所需的三角形数量将变得非常庞大。 将多边形表示的物体显示到计算机屏幕上,这一过程涉及物体在计算机内部的表示方式即物体的数据结构, 由物体组成的场景的组织结构,物体从场景到屏幕空间要经过的一系列变换,以及产生最终屏幕图象要经过的一系列光栅化处理。 这些方面都涉及到特定的处理算法,相应的算法又有许多不同的变种。 下面仅就3D芯片涉及的图形处理过程及相关算法做一简单分析介绍,这些是理解3D图形处理及图形硬件的基础。 一、3D物体的表示法 具有复杂外形的物体其表面可以由多边形面片来近似表示。以图1的圆柱为例,其柱面可以由2N个三角形近似,其两端可以由两个N边形来近似。 多边形模型在其轮廓上的分段线性特征是这一表示法主要的视觉缺陷,改进的唯一途径是增加多边形的分辨率。 对于一个复杂形体来说,为了充分表示其细节,常常要用到十万个以上的多边形。这将耗费许多数据库访问时间和绘制时间。 当将多边形模型进行放大处理时,会产生连接问题。这就是所谓的“几何走样”。

计 算 机 图 形 学 实 验 报 告

实验一:基本图形生成算法演示 一、实验目的与要求 了解OpenGL图形软件包绘制图形的基本过程及其程序框架,并在已有的程序框架中添加代码实现直线和圆的生成算法,演示直线和圆的生成过程,从而加深对直线和圆等基本图形生成算法的理解。 二、实验内容 实验要求:(1)理解glut程序框架 (2)理解窗口到视区的变换 (3)理解OpenGL实现动画的原理 (4)添加代码实现中点Bresenham算法画直线 (5)添加代码实现改进Bresenham算法画直线 (6)添加代码实现圆的绘制(可以适当对框架坐标系进行修改) 实验操作和步骤:本次实验主要的目的是为了掌握基本画线和画圆算法,对于书上给出的代码,要求通过本次试验来具体的实现。由于实验已经给出大体的框架,所以只需要按照书上的算法思想来设计具体实现代码,对于直线DDA算法,中点Bresenham算法及其改进算法,以及Bresenham画圆算法都有进一步的体会。DDA算法是对每一步都要进行增量处理,然后取整,绘制,而Bresenham通过判断误差函数和求取递推公式来实现。特别是对于整数的选择取舍,以及代码的流程和循环的控制有一个深入的了解。同时也熟练运用OpenGL基本的绘图函数。 三、实验结果 1-1. DDA算法画直线。 图1-1-1 ,显示每次DDA算法画线的坐标结果(如上)。

图1-1-2.显示DDA算法画圆过程及截图 1-2. 中点Bresenham算法画直线 1-2-1利用中点Bresenham算法画直线的各点坐标如上: 1-2-2.中点Bresenham画线算法画线过程截图

1-3. 利用改进的Bresenham画线算法来画图 1-3-1.利用改进的Bresenham算法来画图各点坐标如上: 1-3-2.利用改进的Bresenham算法画直线图形如上 1-4.利用Bresenham画圆算法来作图

基本图元的生成算法

基本图元的生成算法 一、实验目的1、初步了解显示窗口与视区的关系2、掌握OpengGL点、直线、多边形的绘制3、掌握DDA直线生成算法。4、掌握Bresenham直线生成算法二、实验环境硬件要求:PC机,主流配置,最好为独立显卡,显存512M以上。 软件环境:操作系统:Windows XP。语言开发工具:VC6.0。 三、实验内容与要求 1、调出实验一的源代码运行,调整修改使得显示窗口大小改变时,绘制的矩形大小随之改变。如图2-1所示。提示:(1)在main函数里添加注册窗口变化函数glutReshapeFunc(myreshape); (放在glutMainLoop()之前)(2)在程序中添加窗口改变子函数,参数w,h为当前显示窗口的宽和高 void myreshape(GLsizei w, GLsizei h) { glViewport(0,0,w,h); //设置视区位置 glMatrixMode(GL_PROJECTION);//设置投影变换模式 glLoadIdentity(); //调单位矩阵,清空当前矩阵堆栈 if(w<=h) gluOrtho2D(0,300,0,300*(GLfloat)h/(GLfloat)w); //设置裁剪窗口大小 else gluOrtho2D(0,300*(GLfloat)w/(GLfloat)h,0,300); } a) 显示窗口改变前 b)显示窗口变大后 未修改前的初始源程序参考如下: /*my first program.cpp*/ #include void display(void)

{ glClear(GL_COLOR_BUFFER_BIT); //刷新颜色缓冲区 glRectf(0,0,0.5,0.5); glFlush(); //用于刷新命令队列和缓冲区,使所有尚未被执行的 OpenGL命令得到执行 } void main(int argc, char** argv) { glutInit(&argc, argv); //初始化GLUT库 glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); //设置显示模式 glutInitWindowSize(100, 200); glutCreateWindow("hello"); //创建窗口,标题为“hello” glutDisplayFunc(display); //用于绘制当前窗口 glutMainLoop(); //表示开始运行程序,用于程序的结尾 } 2、自己参照讲义或教材按照自己的构思画二维平面图形, 修改样本程序 circle-algorithm.cpp将上面的矩形替换成自己构思的二维平面图形。注意顶点的顺序。 参考函数: (1)、点绘制举例 glPointSize(2.0) //点的大小设置 glBegin(GL_POINTS); glColor3f(1.0,1.0,1.0); glVertex2f(-0.5,-0.5); //顶点 glColor3f(1.0,0.0,1.0); glVertex2f(-0.5,0.5); glColor3f(0.0,1.0,1.0); glVertex2f(0.5,0.5); glColor3f(1.0,1.0,0.0); glVertex2f(0.5,-0.5); glEnd() (2)、直线/三角形/四边形绘制举例 glLineWidth(2.0); glBegin(GL_LINES); // glBegin(GL_LINE_STRIP); // glBegin(GL_LINE_LOOP); // glBegin(GL_TRIANGLES); // glBegin(GL_TRIANGLE_STRIP); // glBegin(GL_TRIANGLE_FAN); // glBegin(GL_QUADS); // glBegin(GL_TRIANGLE_STRIP); glVertex2f(-0.5,0.5);

研究生计算机图形学课程室内场景OpenGL--实验报告Word版

《高级计算机图形学》实验报告 姓名:学号:班级: 【实验报告要求】 实验名称:高级计算机图形学室内场景 实验目的:掌握使用OpenGL生成真实感复杂对象的方法,进一步熟练掌握构造实体几何表示法、扫描表示法、八叉树法、BSP树法等建模方法。 实验要求:要求利用OpenGL生成一个真实感的复杂对象及其周围场景,并显示观测点变化时的几何变换,要具备在一个纹理复杂的场景中漫游功能。要求使用到光线跟踪算法、 纹理映射技术以及实时绘制技术。 一、实验效果图 图1:正面效果图

图2:背面效果图 图4:背面效果图

图4:室内场景细节效果图 图5:场景角度转换效果图

二、源文件数据代码: 共6个文件,其实现代码如下: 1、DlgAbout.cpp #include "StdAfx.h" #include "DlgAbout.h" CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) END_MESSAGE_MAP() 2、FormCommandView.cpp #include "stdafx.h" #include "Tool.h" #include "MainFrm.h" #include "FormCommandView.h" #include "ToolDoc.h" #include "RenderView.h" // Download by https://www.doczj.com/doc/a92335114.html, #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif // CFormCommandView IMPLEMENT_DYNCREATE(CFormCommandView, CFormView) CFormCommandView::CFormCommandView() : CFormView(CFormCommandView::IDD) { //{{AFX_DATA_INIT(CFormCommandView)

程序设计实验报告

学生实验报告 院系:测绘学院 专业班级:测绘13级3班 学号:2013305517 学生姓名:王泽 指导教师:郭辉老师 2016年05月20日

安徽理工大学实验报告 实验课程名称:数据结构与软件开发上机实验 开课院系及实验室:测绘学院红楼二楼机房 实验1 编程基本知识练习 实验目的: 通过该实验课内容的练习,学生应掌握VB 编程的基本语法、变量的定义、数组(动态数组)的定义、VB 语言中子过程与函数的定义以及文本文件的读写等知识。 实验内容: 1)变量的定义动态数组的定义与应用; 2)矩阵的加、减、乘运算(定义Sub()子过程或Function()来实现); 3)数据文件的建立、数据的读取与写入。 实验步骤: 1.编辑界面 1.1 打开VB 编程工具,进入编程主界面。

1.2 在窗体上新建“读入数据”和“输出数据”两个按钮。 1.3 双击“窗体”进入代码输入界面,进行代码编辑。 2.用VB 编写的源代码 2.1 矩阵基本运算源码详见附录一。 (1)两矩阵相加 (2)两矩阵相减 (3)矩阵转置 (4)两矩阵相乘 (5)矩阵求逆 2.2 文本文件(本实验中data.txt)的读取源代码 (1)建立文本文件并输入数据 在桌面上新建一“data.txt” ( 文本文件路径为C:\Users\ WH\Desktop\练习\data.txt”)。输入以下内容: 6,7,4,0.005 A,35.418 B,45.712 C,25.270

D,24.678 在桌面上新建一“result.txt” ( 文本文件路径为C:\Users\ WH\Desktop\练习\result.txt”)。(2)从文本文件中读数据 Dim linedata as string, m_GaochaN as integer,m_Pnumber as integer,m_knPnumber as integer,M as Double,k1 as integer 'linedata 为存储文本文件一行信息的字符串变量 Dim a() as String,H() as Double 'a()为存储点名,H()存储高程 Open“C:\Users\ WH\Desktop\练习\data.txt”For Input As #1 Line Input #1, linedata k = Split(linedata, ",") m_GaochaN = Val(k(0)) m_Pnumber = Val(k(1)) m_knPnumber = Val(k(2)) M = CDbl(k(3)) For k1 = 1 To m_knPnumber Line Input #1, linedata k = Split(linedata, ",") a(k1)= k(0) GetstationNumber (a) H(k1) = CDbl(k(1)) Next Close #1 (3)将读入点名存储到点名数组中,且返回该点名所对应编号 Function GetstationNumber(name As String) Dim i As Integer For i = 1 To m_Pnumber If P_Name(i) <> "" Then '将待查点名与已经存入点名数组的点比较 If P_Name(i) = name Then GetstationNumber = i Exit For End If Else '待查点是新的点名,将新点名放到P_Name 数组中 P_Name(i) = name GetstationNumber = i Exit For End If Next i End Function (4)从文本文件中写数据(将从data.txt 读入的数据,写入到result.txt 文件中) Open“C:\Users\ WH\Desktop\ 练习\result.txt” For Output As #1 outstring = outstring + str(m_GaochaN) +","

浙江大学Linux程序设计实验报告

Linux程序设计实验报告1 ——操作系统基本命令使用 一、实验目的 1.通过对Emacs、vi、vim、gedit文本编辑器的使用,掌握在Linux环境下文本文件的编辑方法; 2.通过对常用命令mkdir、cp、cd、ls、mv、chmod、rm等文件命令的操作,掌握Linux操作系统中文件命令的用法。 二、实验任务与要求 1.emacs的使用,要求能新建、编辑、保存一个文本文件 2.vi或vim的使用,要求能新建、编辑、保存一个文本文件 3.gedit的使用,要求能新建、编辑、保存一个文本文件 4.掌握mkdir、cd命令的操作,要求能建立目录、进入与退出目录 5.掌握cp、ls、mv、chmod、rm命令的操作,要求能拷贝文件、新建文件、查看文件、文件重命名、删除文件等操作。 三、实验工具与准备 计算机PC机,Linux Redhat Fedora Core6操作系统 四、实验步骤与操作指导 任务1.学习emacs的使用,要求能新建、编辑、保存一个文本文件 (1)启动emacs (2)输入以下C程序 (3)保存文件为kk.c (4)用emacs打开文件kk.c (5)修改程序 (6)另存为文件aa.txt并退出。 任务2.vi或vim的使用,要求能新建、编辑、保存一个文本文件 (1)点击”应用程序”→ “附件”→“终端”,打开终端,在终端输入命令: [root@localhost root]#vi kk.c 按i键,进入插入状态。 (2)输入以下C程序 #include int main( ) {

printf(“Hello world!\n”); return 0; } 此时可以用Backspace、→、←、↑、↓键编辑文本。 (3)保存文件为kk.c 按Esc键,进入最后行状态,在最后行状态输入:wq保存文件,退出vi。 (4)用vi打开文件kk.c,输入命令: [root@localhost root]#vi kk.c (5)修改程序为: #include int main( ) { printf(" Hello world!\n"); printf("*****************\n"); return 0; } (6)按Esc键,进入最后行状态,在最后行状态输入:wq aa.txt保存文件,如图1所示,另存为文件aa.txt并退出vi。。 图1 程序编辑环境 任务3.gedit的使用,要求能新建、编辑、保存一个文本文件 (1)启动gedit,点击”应用程序”→ “附件”→“文本编辑器”,打开文本编辑器,如图所示。

Opengl实验报告及源代码实验七 模型加载

实验报告 学生姓名:学号:专业班级: 实验类型:□验证□综合□设计□创新实验日期:2018.11 实验成绩:一、实验名称 实验七模型加载 二、实验内容 1.设计并实现Mesh类,利用该类实现模型网格的解析、加载、管理与渲染。 2.设计并实现Model类,利用该类实现几何模型的解析、加载、管理与渲染。 3.基于Mesh类和Model类,利用Assimp模型加载库,加载并渲染三维几何模型。 三、实验目的 1.掌握3D模型网格数据的组织与渲染方法。 2.掌握3D模型数据的结构与组织,以及模型数据的解析与渲染方法。 3.了解Assimp库中管理3D模型的数据结构,掌握Assimp库的使用方法。 四、实验步骤 1.定义网格类结构,并初始化 class Mesh { Public: vector vertices; vector indices; vector textures; Mesh(vector vertices, vector indices, vector texture); Void Draw(Shader shader); private: GLuint VAO, VBO, EBO; void setupMesh(); } void setupMesh() { glGenVertexArrays(1, &this->VAO); glGenBuffers(1, &this->VBO); glGenBuffers(1, &this->EBO); glBindVertexArray(this->VAO); glBindBuffer(GL_ARRAY_BUFFER, this->VBO);

实验二M精编B程序设计含实验报告

实验二M精编B程序设 计含实验报告 The following text is amended on 12 November 2020.

实验二 MATLAB 程序设计 一、 实验目的 1.掌握利用if 语句实现选择结构的方法。 2.掌握利用switch 语句实现多分支选择结构的方法。 3.掌握利用for 语句实现循环结构的方法。 4.掌握利用while 语句实现循环结构的方法。 5.掌握MATLAB 函数的编写及调试方法。 二、 实验的设备及条件 计算机一台(带有以上的软件环境)。 M 文件的编写: 启动MATLAB 后,点击File|New|M-File ,启动MATLAB 的程序编辑及调试器 (Editor/Debugger ),编辑以下程序,点击File|Save 保存程序,注意文件名最好用英文字符。点击Debug|Run 运行程序,在命令窗口查看运行结果,程序如有错误则改正 三、 实验内容 1.编写求解方程02=++c bx ax 的根的函数(这个方程不一定为一元二次方程,因c b a 、、的不同取值而定),这里应根据c b a 、、的不同取值分别处理,有输入参数提示,当0~,0,0===c b a 时应提示“为恒不等式!”。并输入几组典型值加以检验。 (提示:提示输入使用input 函数) 2.输入一个百分制成绩,要求输出成绩等级A+、A 、B 、C 、D 、E 。其中100分为A+,90分~99分为A ,80分~89分为B ,70分~79分为C ,60分~69分为D ,60分以下为E 。 要求:(1)用switch 语句实现。 (2)输入百分制成绩后要判断该成绩的合理性,对不合理的成绩应输出出错信息。 (提示:注意单元矩阵的用法) 3.数论中一个有趣的题目:任意一个正整数,若为偶数,则用2除之,若为奇数,则与3相乘再加上1。重复此过程,最终得到的结果为1。如: 21 21 421 运行下面的程序,按程序提示输入n=1,2,3,5,7等数来验证这一结论。 请为关键的Matlab 语句填写上相关注释,说明其含义或功能。 4. y

3D图像生成算法原理

3D图像生成算法原理 一、建齐次坐标 二、着色模型 三、Z缓存 四、纹理映射 在这些步骤中,显示部分(GPU)只负责完成第三、四步,而前两个步骤主要是依靠 CPU 来完成。而且,这还仅仅只是3D图象的生成,还没有包括游戏中复杂的AI运算。 场景切换运算等等……无疑,这些元素还需要CPU去完成,这就是为什么在运行大型3D的时候,当场景切换时再强劲的显卡都会出现停顿的现象。 3D芯片的处理对象是多边形表示的物体。用多边形表示物体有两个优点:首先是直接(尽管繁琐), 多边形表示的物体其表面的分段线性特征除轮廓外可以通过明暗处理(shading)技术消除;其次是仅存储多边形顶点的几何信息, 多边形部每个象素的明暗颜色计算所需的信息由这些顶点信息插值而来,这正是易于用图形硬件支持的快速明暗处理技术。 支持多边形绘制的图形硬件同样也可以绘制由双三次曲面片表示的物体,通过对这种物体的表面进行三角剖分, 用逼近的三角形网格代替原物体的曲面表示就可以做到这一点。 当然,用多边形表示物体也有其缺点,如增加了纹理映射和阴影生成的难度,当需要详细表示复杂物体时所需的三角形数量将变得非常庞大。

将多边形表示的物体显示到计算机屏幕上,这一过程涉及物体在计算机部的表示方式即物体的数据结构, 由物体组成的场景的组织结构,物体从场景到屏幕空间要经过的一系列变换,以及产生最终屏幕图象要经过的一系列光栅化处理。 这些方面都涉及到特定的处理算法,相应的算法又有许多不同的变种。下面仅就3D芯片涉及的图形处理过程及相关算法做一简单分析介绍,这些是理解3D图形处理及图形硬件的基础。 一、3D物体的表示法 具有复杂外形的物体其表面可以由多边形面片来近似表示。以图1的圆柱为例,其柱面可以由2N个三角形近似,其两端可以由两个N边形来近似。 多边形模型在其轮廓上的分段线性特征是这一表示法主要的视觉缺陷,改进的唯一途径是增加多边形的分辨率。 对于一个复杂形体来说,为了充分表示其细节,常常要用到十万个以上的多边形。这将耗费许多数据库访问时间和绘制时间。 当将多边形模型进行放大处理时,会产生连接问题。这就是所谓的“几何走样”。 物体的多边形表示既可以通过交互设计人工提取,也可以通过激光扫描设备得到。总之,多边形表示的物体并不特别适合于交互操作或做自由的形状改变。 当改变物体的形状时很难保证多边形表示的完整性得到保持。 对多边形明暗着色所需要的信息存储在一个分层的数据结构中,每一个物体表面由指向多边形表的指针定义,该多边形表包含了近似该表

大学大一c语言程序设计实验室上机题全部代码答案(实验报告)汇编

C语言实验报告 实验1-1: hello world程序: 源代码: #include main() { printf("hello world!\n"); system("pause"); } 实验1-2: 完成3个数据的输入、求和并输出计算结果的程序: 源代码: #include main() { int i,j,k,sum; scanf("%d%d%d",&i,&j,&k); sum=i+j+k; printf("sum=%d",sum); system("pause"); 实验1-3: 在屏幕上输出如下图形: A BBB CCCCC 源代码: #include main() { printf(" A\n"); printf(" BBB\n"); printf(" CCCCC\n"); system("pause"); } 实验2-1: 计算由键盘输入的任何两个双精度数据的平均值 源代码: #include

main() { double a,b; scanf("%lf%lf",&a,&b); printf("%.1lf\n",(a+b)/2); system("pause"); } 实验2-2: 写一个输入7个数据的程序,把输入的数据代入a + b * (c – d ) / e * f – g 表达式进行运算源代码: #include main() { float a,b,c,d,e,f,g,x; scanf("%f%f%f%f%f%f%f",&a,&b,&c,&d,&e,&f,&g); x=a + b * (c - d ) / e * f - g; printf("x=%f",x); system("pause"); } 实验2-3: 编写一个C语言程序,测试下列各表达式: i, j i + 1 , j + 1 i++ , j++ ++i , ++j i+++++j 源代码: #include main() { int i=1,j=1; printf("%d %d\n",i+1,j+1); printf("%d %d\n",i++,j++); printf("%d %d\n",++i,++j); printf("%d\n",(i++)+(++j)); system("pause"); } 实验2-4: 输入存款金额money,存期year和年利率rate,根据下列公式计算存款到期时的利息interest (税前),输出时保留2位小数。 interest = money(1+rate)year - money

C程序设计上实验报告(完整版)

C语言程序设计上机实验报告 学院:机械工程学院 班级:机自161213 姓名:刘昊 学号:20162181310 实验时间:2017年3月6号 任课老师:张锐

C语言程序设计上机实验报告 实验一 一、实验名称: C程序的运行环境和运行C程序的方法 二、实验目的:了解在C编译系统上如何编辑、编译、连接和运行一个C 程序 三、实验内容: (1). 输入并运行一个简单的C程序。 (2). 设计程序,对给定的两个数求和。 (3). 设计程序,对给定的两个数进行比较,然后输出其中较大的数。 四、源程序代码: 代码1: 运行结果1:

程序分析1: 该程序用来判断所输入的整数是否为一个素数,如果一个数能被除了1和它本身整除,还能被其它数整除,那么它就不是一个素数,因此,用for 循环来进行整除过程的简写。 代码2: 运行结果2:

程序分析2: 简单的使用printf()和scanf()函数进行简单的数据运算。代码3: 运行结果3:

程序分析3: 使用if语句进行判断。 五.实验总结 C语言程序设计上机实验报告 实验二 一、实验名称:顺序结构程序设计 二、实验目的:正确使用常用运算符(算术运算符、赋值运算符)的用法, 熟练掌握算术运算符及其表达式,逻辑运算符和逻辑表达式。 三、实验内容: (1). 编写程序,实现小写字母转大写。

(2). 编写程序,实现输入两个不同类型数据后,经过适当的运算(加、减、乘、除)后输出。 (3). 编写程序,计算三角形面积、立方体的体积和表面积、圆的面积和周长。 (4). 编写程序,实现单字符getchar和putchar输入输出。 (5). 编写程序,实现十进制、八进制、十六进制不同数制的输出。 四、源程序代码 代码1: 运行结果1: 程序分析1:

周信东主编版C语言程序设计基础实验一实验报告

周信东主编版C语言程序设计基础实验一实验报告 The latest revision on November 22, 2020

实验1 C程序的运行环境和最简单的C程序设计 学号:姓名:莫新锋实验日期: 一、实验目的和要求 (1)熟悉C语言程序开发环境(Visual C++),了解开发环境中的编辑、编译、链接和运行命令。 (2)掌握在C语言开发环境中如何编辑、编译、链接和运行一个标准C语言程序。(3)掌握简单C语言程序的查错方法,理解编译错误信息的含义。 (4)掌握C语言数据类型的概念,熟悉如何定义一个整型、字符型、实型变量,以及如何对它们进行赋值。 (5)了解下列命令及函数:#include <>、main、printf、scanf。 (6)通过运行简单的程序,熟悉C语言的基本格式规范,并初步了解它的结构特点。 二、实验内容 实验指导书中的实验一的“基础部分”题目。 三、实验步骤及结果 (一)VC 实验平台的使用 1.简要描述在VC环境下开发一个C程序的主要步骤,并粘贴主要操作窗口的截图。【请填空。截图的操作方法:先点击欲截取的窗口使之置于屏幕最前方,并作适当的缩放,再按快捷键+将窗口截取到内存中,然后打开word将光标移到欲插入图片的位置上进行粘贴即可。也可对图片进行适当剪切,裁剪掉多余部分。注意:截图上必须有你自己的学号或姓名等信息,否则视为抄袭。】 主要步骤: 1: 创建一个工作文件夹。 2:启动 Visual C++。 3:新建一个 C 语言源程序。 4:编辑源程序 5:保存源程序 2.编译、链接、运行程序 (1)输入源程序后,如何编译该程序 【请填空】 输入好后在编译器中有一个编译按钮按一下就能编译 (2)如何链接程序生成可执行文件 【请填空】 得到后缀为obj的目标程序后选择build菜单下的build选项,表示要求连接并建立一个可执行文件 (3)如何运行程序查看结果 【请填空】

高级程序设计实验报告

高级程序设计 实验报告 班级 学号: 姓名: 实验名称: 指导老师: 日期:

实验十一文件和流I/O 一、实验题目:文件和流I/O 二、实验内容: 1.掌握磁盘的基本操作 2.掌握目录的基本操作 3.文件的基本操作 4.文本文件的读取和写入 5.字符串的读取和写入 6.二进制文件的读取和写入I 7. 二进制文件的读取和写入2 三、主要程序代码: 1. using System; using System.IO; using System.Collections.Generic; using System.Text; namespace实验1 { class Test { public static void Main() { DriveInfo[] allDrives = DriveInfo.GetDrives(); foreach (DriveInfo d in allDrives) { Console.WriteLine("Drive {0}", https://www.doczj.com/doc/a92335114.html,); Console.WriteLine(" File type: {0}", d.DriveType); if (d.IsReady == true) { Console.WriteLine(" Volume label: {0}", d.VolumeLabel); Console.WriteLine(" File system: {0}", d.DriveFormat); Console.WriteLine(" Available space to current user:{0, 15} bytes",d.AvailableFreeSpace); Console.WriteLine("Total available space: {0, 15} bytes",d.TotalFreeSpace); Console.WriteLine( " Total size of drive: {0, 15} bytes ", d.TotalSize); } } Console.ReadKey();

实验报告(五)GUI程序设计(完整代码)

福建农林大学计算机与信息学院实验报告 实验(五)GUI程序设计 一、实验目的和要求 1.掌握简单GUI的设计和实现 2.理解并掌握GUI事件驱动的程序设计 3.理解网络程序设计 二、实验内容和原理 实现一个程序,用于浏览用户指定的文本文件。界面如图1所示: 图1 文本文件浏览的用户界面

2、界面实现 // Panel p to hold a label, a text field, and a button Panel p = new Panel(); p.setLayout(new BorderLayout()); p.add(new Label("Filename"), BorderLayout.WEST); p.add(jtfFilename, BorderLayout.CENTER); p.add(jbtView, BorderLayout.EAST); // Add jsp and p to the frame add(jsp, BorderLayout.CENTER); add(p, BorderLayout.SOUTH); 3、事件驱动 // Register listener jbtView.addActionListener(new ActionListener() { /**Handle the View button*/ public void actionPerformed(ActionEvent e) { if (e.getSource() == jbtView) showFile(); //自己实现这个方法,在textArea中浏览文本文件内容 } }); 4、网络程序设计(可选) 实现一个网络服务,用于把指定的文件内容传给客户端(见Exp_5_Server.java),在“事件驱动”中调用方法“showFileFromServer()” package com.fafu.training; import java.awt.BorderLayout; import java.awt.Panel; import java.awt.TextArea; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.io.Inputream; import java.io.Reader; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel;

opengl立方体的简单三维交互式几何变换实验报告+代码

立方体的简单三维交互式几何变换 这个学期对opengl的学习,使我对计算机图形学的一些算法过程有了更多的了解。因为对三维图形的显示比较感兴趣,就做了立方体的简单三维交互式几何变换。 功能:键盘的方向键实现立方体的上下左右平移;A键,S键分别实现向前,向后旋转;J键,K键分别实现放大,缩小;C键退出。 程序模块: 1.该模块为绘制一个立方体。 void DrawBox() { glBegin(GL_QUADS); //前面 glColor3f(1,0,0); glVertex3f(-1.0f, -1.0f, 1.0f); // 四边形的左下 glVertex3f( 1.0f, -1.0f, 1.0f); // 四边形的右下 glVertex3f( 1.0f, 1.0f, 1.0f); // 四边形的右上 glVertex3f(-1.0f, 1.0f, 1.0f); // 四边形的左上 // 后面 glColor3f(0,1,0); glVertex3f(-1.0f, -1.0f, -1.0f); // 四边形的右下 glVertex3f(-1.0f, 1.0f, -1.0f); // 四边形的右上

glVertex3f( 1.0f, -1.0f, -1.0f); // 四边形的左下 // 顶面 glColor3f(0,0,1); glVertex3f(-1.0f, 1.0f, -1.0f); // 四边形的左上glVertex3f(-1.0f, 1.0f, 1.0f); // 四边形的左下glVertex3f( 1.0f, 1.0f, 1.0f); // 四边形的右下glVertex3f( 1.0f, 1.0f, -1.0f); // 四边形的右上// 底面 glColor3f(1,1,0); glVertex3f(-1.0f, -1.0f, -1.0f); // 四边形的右上glVertex3f( 1.0f, -1.0f, -1.0f); // 四边形的左上glVertex3f( 1.0f, -1.0f, 1.0f); // 四边形的左下glVertex3f(-1.0f, -1.0f, 1.0f); // 四边形的右下// 右面 glColor3f(0,1,1); glVertex3f( 1.0f, -1.0f, -1.0f); // 四边形的右下glVertex3f( 1.0f, 1.0f, -1.0f); // 四边形的右上glVertex3f( 1.0f, 1.0f, 1.0f); // 四边形的左上glVertex3f( 1.0f, -1.0f, 1.0f); // 四边形的左下// 左面 glColor3f(1,0,1);

c程序设计实验报告参考答案

实验要求: 对大纲中列出的四个实验要求: 1.以面向对象的程序设计思想编程。 2.熟悉面向对象程序设计语言VC++编程环境。 3.在计算机上快速完成程序编写、调试、运行。 分别写出实验报告(三页以上),要求详尽描述根据实验内容要求,自己设计的上机编程源程序和结果,包括关键性截图。完成实验报告和上交源程序。 备注: 1.《计算机应用技术》(专)、《计算机应用基础》(专)、高级语言程序设计(一)(专)要求学生进行上机操作,保留上机操作原程序,每门课程每个学生形成一个文件夹,文件夹以学生准考证号+姓名命名,最后试点院校汇总,刻录光盘上交主考院校; 2.《口语》(专)、《口译与听力》(本)要求考生进行现场练习,由试点院校教师录制相关材料,每门课程每个学生形成一个文件夹,文件夹以学生准考证号+姓名命名,最后试点院校汇总,刻录光盘上交主考院校; 3. 论文,作业,实验报告,案例分析,前沿思考,学习报告等均要求A4 打印、复印; 4.试点院校按百分制录入成绩,录入后打印学生成绩单; 5.按照系统成绩单的顺序将上报的学习过程评价成绩材料排序并打捆; 6.实践课程考核评估记录表》也需按照成绩单顺序排序,单独上报; 7.有平时作业或测试试卷等可放入本人上报的材料中一并打捆上交。 交实验报告时间: 10月8日假期后第一天上课,务必把按照要求书写完成,并装订好的实验报告交给我,一定!一定!切记不要耽误! 实验一:简单类与对象 一、实验目的 1、熟悉VC++的编程环境,掌握VC++ 6.0的调试方法。 2、掌握简单的类与对象的定义。 二、实验内容 用类定义,输入半径和高,输出圆柱体的底面积和体积。 三、实验要求

词法分析报告设计实验报告材料(附代码)

实验一词法分析设计 实验学时:4 实验类型:综合 实验要求:必修 一、实验目的 通过本实验的编程实践,使学生了解词法分析的任务,掌握词法分析程序设计的原理和构造方法,使学生对编译的基本概念、原理和方法有完整的和清楚的理解,并能正确地、熟练地运用。 二、实验容 用VC++/VB/JAVA语言实现对C语言子集的源程序进行词法分析。通过输入源程序从左到右对字符串进行扫描和分解,依次输出各个单词的部编码及单词符号自身值;若遇到错误则显示“Error”,然后跳过错误部分继续显示;同时进行标识符登记符号表的管理。 以下是实现词法分析设计的主要工作: (1)从源程序文件中读入字符。 (2)统计行数和列数用于错误单词的定位。 (3)删除空格类字符,包括回车、制表符空格。 (4)按拼写单词,并用(码,属性)二元式表示。(属性值——token的机表示) (5)如果发现错误则报告出错 (6)根据需要是否填写标识符表供以后各阶段使用。 单词的基本分类: ◆关键字:由程序语言定义的具有固定意义的标识符。也称为保留字例如if、for、while、printf ;单词种别码为1。 ◆标识符:用以表示各种名字,如变量名、数组名、函数名; ◆常数:任何数值常数。如125, 1,0.5,3.1416; ◆运算符:+、-、*、/; ◆关系运算符:<、<=、= 、>、>=、<>; ◆分界符:;、,、(、)、[、]; 三、实验要求

1、编程时注意编程风格:空行的使用、注释的使用、缩进的使用等。 2、将标识符填写的相应符号表须提供给编译程序的以后各阶段使用。 3、根据测试数据进行测试。测试实例应包括以下三个部分: ◆全部合法的输入。 ◆各种组合的非法输入。 ◆由记号组成的句子。 4、词法分析程序设计要求输出形式: 例:输入VC++语言的实例程序: If i=0 then n++; a﹤= 3b %); 输出形式为: 单词二元序列类型位置(行,列)(单词种别,单词属性) for (1,for ) 关键字(1,1)i ( 6,i ) 标识符(1,2)= ( 4,= ) 关系运算符(1,3)0 ( 5,0 ) 常数(1,4)then ( 1,then) 关键字(1,5)n (6,n ) 标识符(1,6)++ Error Error (1,7);( 2, ; ) 分界符(1,8)a (6,a ) 标识符(2,1)

X-opengl立方体的简单三维交互式几何变换实验报告代码

立方体的简单三维交互式几何变换 立方体的简单三维交互式几何变换。 功能:键盘的方向键实现立方体的上下左右平移;A键,S键分别实现向前,向后旋转;J键,K键分别实现放大,缩小;C键退出。 程序模块: 1.重绘回调函数,在窗口首次创建或用户改变窗口尺寸时被调用。void reshape(int w, int h) { glViewport(0, 0, w, h);// 指定视口的位置和大小 glMatrixMode(GL_PROJECTION); glLoadIdentity(); //glFrustum(-1.0, 1.0, -1.0, 1.0, 3.1, 10.0); //gluPerspective(45,1,0.1,10.0); glOrtho(-2.0, 2.0, -2.0, 2.0, 2.0, 10.0); } 2.绘制一个立方体。 void DrawBox() { glBegin(GL_QUADS); //前面

glColor3f(1,0,0); glVertex3f(-1.0f, -1.0f, 1.0f); // 四边形的左下glVertex3f( 1.0f, -1.0f, 1.0f); // 四边形的右下glVertex3f( 1.0f, 1.0f, 1.0f); // 四边形的右上glVertex3f(-1.0f, 1.0f, 1.0f); // 四边形的左上// 后面 glColor3f(0,1,0); glVertex3f(-1.0f, -1.0f, -1.0f); // 四边形的右下glVertex3f(-1.0f, 1.0f, -1.0f); // 四边形的右上glVertex3f( 1.0f, 1.0f, -1.0f); // 四边形的左上glVertex3f( 1.0f, -1.0f, -1.0f); // 四边形的左下 // 顶面 glColor3f(0,0,1); glVertex3f(-1.0f, 1.0f, -1.0f); // 四边形的左上glVertex3f(-1.0f, 1.0f, 1.0f); // 四边形的左下glVertex3f( 1.0f, 1.0f, 1.0f); // 四边形的右下glVertex3f( 1.0f, 1.0f, -1.0f); // 四边形的右上// 底面 glColor3f(1,1,0); glVertex3f(-1.0f, -1.0f, -1.0f); // 四边形的右上glVertex3f( 1.0f, -1.0f, -1.0f); // 四边形的左上glVertex3f( 1.0f, -1.0f, 1.0f); // 四边形的左下

相关主题
文本预览
相关文档 最新文档