计算机图形学动画编程实验报告

合集下载

计算机图形学动画实验报告

计算机图形学动画实验报告

计算机图形学动画实验报告计算机图形学动画实验报告引言:计算机图形学是一门研究如何利用计算机生成、处理和显示图像的学科。

而图形学动画则是图形学领域中的一个重要分支,它致力于通过计算机技术创造出具有运动效果的图像。

本实验旨在探索计算机图形学动画的基本原理和实现方法,并通过实践来加深对其理论知识的理解。

实验目的:1. 学习和掌握计算机图形学动画的基本原理和概念。

2. 熟悉使用图形学动画软件进行实验操作,并能够根据需要进行图像的生成、编辑和渲染。

3. 设计和实现一个简单的计算机图形学动画项目,展示所学知识的应用。

实验步骤:1. 实验准备:安装和配置图形学动画软件。

在本次实验中,我们选择了常用的图形学动画软件Blender进行实验。

首先,我们需要下载并安装Blender软件,并对其进行基本配置,如选择适合的渲染引擎、设置分辨率等。

2. 学习基本概念:了解计算机图形学动画的基本概念和术语。

在开始实验之前,我们需要了解一些基本概念,如3D建模、材质、动画关键帧等。

这些概念将在后续实验中发挥重要作用。

3. 创建场景:使用Blender创建一个简单的场景。

在Blender中,我们可以通过添加各种几何体、光源和相机来创建一个虚拟的3D场景。

我们可以使用鼠标和键盘来进行场景的编辑和调整,使其符合我们的需求。

4. 设计模型:使用Blender进行3D建模。

3D建模是图形学动画的基础,它涉及到对物体形状、纹理、材质等方面的设计。

在Blender中,我们可以使用各种建模工具来创建和编辑模型,如平面建模、多边形建模等。

5. 添加材质和纹理:为模型添加材质和纹理。

材质和纹理是赋予模型真实感的重要因素。

在Blender中,我们可以为模型添加各种材质和纹理,并对其进行调整和编辑,以达到想要的效果。

6. 设置动画关键帧:为模型添加动画效果。

动画关键帧是实现图形学动画的关键。

在Blender中,我们可以通过设置关键帧来控制模型的运动、旋转和缩放等动画效果。

计算机图形学 实验报告(3)

计算机图形学 实验报告(3)

(2)绘制一个由上述顶点所描绘的三角形,实现该三角形进行下列 的几何变化:首先使三角形沿着其中心的x轴,y轴方向缩小50%;然后沿 着初始中心旋转90度;最后沿着y轴平移100个单位。 四、实验结果与数据处理
1、矩形在窗口内沿着水平线匀速移动
代码如下:
实验结果如图示:
2、对一个三角形分别实现平移、缩放、旋转等变化 代码如下:
三、实验内容与步骤 本实验要求完成: 1、实现矩形在窗口内沿着水平线匀速移动; 2、已知某三角形的三顶点坐标为{50.0,25.0},{150.0,25.0},
{100.0,100.0}。 要求:(1)创建一个长宽分别为600、600的窗口,窗口的左上角位于 屏幕坐标(100,100)处。(提示:请试着修改gluOrtho2D函数参数, 使得绘制的三角形尽可能居中显示)
怀化学院数学实验中心
《计算机图形学》 实验报告
学 号实验Biblioteka 点姓 名指导教 师
年级、班 实验时间
实验三 二维图形的几何变换
一、实验目的 1、掌握二维图形的基本几何变换,如平移、旋转、缩放、对称、错
切变换; 2、掌握OpenGL中模型变换函数,实现简单的动画技术。
二、实验设备(环境)及要求 硬件:普通PC386以上微机; 软件:操作系统:Windows XP,Window7; 开发语言: Turbo C 、Visual C++ 6.0、OpenGl,或其它学生掌握 的高级语言。
结果如图示:
五、分析与讨论 通过本实验的学习,我了解了二维图形的基本几何变换,如平移、
旋转、缩放、对称、错切变换;了解了OpenGL中模型变换函数,实现
简单的动画技术,在老师同学的帮助下运用OpenGL实现了矩形在窗口 内沿着水平线匀速移动。

计算机图形学实验报告_2

计算机图形学实验报告_2

计算机图形学实验报告学号:********姓名:班级:计算机 2班指导老师:***2010.6.19实验一、Windows 图形程序设计基础1、实验目的1)学习理解Win32 应用程序设计的基本知识(SDK 编程);2)掌握Win32 应用程序的基本结构(消息循环与消息处理等); 3)学习使用VC++编写Win32 Application 的方法。

4)学习MFC 类库的概念与结构;5)学习使用VC++编写Win32 应用的方法(单文档、多文档、对话框);6)学习使用MFC 的图形编程。

2、实验内容1)使用WindowsAPI 编写一个简单的Win32 程序,调用绘图API 函数绘制若干图形。

(可选任务)2 )使用MFC AppWizard 建立一个SDI 程序,窗口内显示"Hello,Thisis my first SDI Application"。

(必选任务)3)利用MFC AppWizard(exe)建立一个SDI 程序,在文档视口内绘制基本图形(直线、圆、椭圆、矩形、多边形、曲线、圆弧、椭圆弧、填充、文字等),练习图形属性的编程(修改线型、线宽、颜色、填充样式、文字样式等)。

定义图形数据结构Point\Line\Circle 等保存一些简单图形数据(在文档类中),并在视图类OnDraw 中绘制。

3、实验过程1)使用MFC AppWizard(exe)建立一个SDI 程序,选择单文档;2)在View类的OnDraw()函数中添加图形绘制代码,说出字符串“Hello,Thisis my first SDI Application”,另外实现各种颜色、各种边框的线、圆、方形、多边形以及圆弧的绘制;3)在类视图中添加图形数据point_pp,pp_circle的类,保存简单图形数据,通过在OnDraw()函数中调用,实现线、圆的绘制。

4、实验结果正确地在指定位置显示了"Hello,This is my first SDI Application"字符串,成功绘制了圆,椭圆,方形,多边形以及曲线圆弧、椭圆弧,同时按指定属性改绘了圆、方形和直线。

《计算机动画技术》上机实验报告(3)

《计算机动画技术》上机实验报告(3)
按钮,进入元件编辑模式;
6、打开“库面板”,将“深水鱼头”从库面板拖动到舞台上。单击时间轴上的第30帧,选择“插入”>“时间轴”>“帧”,将帧延长至30帧;
7、增加图层“深水鱼身层”,“深水鱼身”元件拖动到舞台第1帧(关键帧)和第30帧(关键帧),“深水鱼身1”元件拖动到舞台第15帧(关键帧);
8、分别右击第1个关键帧和第2个关键帧,选择“创建补间形状”;
3、创建图形元件“深水鱼身”:复制“深水鱼身”,新建元件“深水鱼身1”,在元件编辑区击右键粘帖“深水鱼身”,
选择“修改”>“任意变形”>“垂直翻转”,将“深水鱼身”垂直翻转得到“深水鱼身1”;
4、创建图形元件“石头ห้องสมุดไป่ตู้、“海螺”和“海草”,可以通过导入外部文件来创建;
5、选择“插入”>“新元件”,在“创建新元件”对话框中输入名称为“深水鱼”,行为是“影片剪辑”,按“确定”
成绩
学号
031201206
实验名称
创建补间形状动画
实验目的和求
通过实验,掌握FLASH的形状补间功能,利用形状补间创建变形动画。
实验任务
利用形状补间,创建鱼在水中游动的动画
关键在于实现游动时鱼的身体的变形效果
实验步骤
1、新建大小为800×600文档,背景色为蓝色;
2、创建图形元件“深水鱼头”:选择“插入”>“新元件”,在“创建新元件”对话框中输入名称为“深水鱼头”,行为是“图形”,按“确定”按钮,进入元件编辑模式。在元件编辑去利用绘图工具绘制鱼头;
9、单击右上方的场景按钮,进入场景编辑区。将“石头”、“海螺”和“海草”从“库”面板拖到舞台的适当位置,并调整大小;将图层1命名为“海底”;
10、新建一图层,命名为“鱼”。将“深水鱼”从“库”面板中拖到舞台的“鱼”图层,并调整大小和位置,按Ctrl+Enter键观看效果。

图形学实验报告四

图形学实验报告四

《计算机图形学》实验报告详细代码:3414028995@使用的一些函数:glShadeModel(GL_FLAT);GL_FLAT 则只是以指定的某一点的单一色绘制其他所有点glPushMatrix();//进栈gluLookAt(0.0, 0.0, 5, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);//观察角度glRotatef((GLfloat)year, 0.0, 1.0, 0.0);//旋转,(GLfloat)year角度设置,0.0, 1.0, 0.0坐标设置glTranslatef(2.0, 0.0, 0.0);//平移,后面代表坐标,沿着x正方向平移glPopMatrix();//出栈glutSwapBuffers();//实现双缓冲glViewport(0, 0, (GLsizei)w, (GLsizei)h);//矩形大小的调整运行截图:完整代码:#include"stdafx.h"#include<stdio.h>#define GLUT_DISABLE_ATEXIT_HACK#include<gl/GLUT.H>static float year = 0, day = 0;void init(void){glClearColor(0.0, 0.0, 0.0, 0.0);glShadeModel(GL_FLAT);//设定着色模式,使用图元中某个顶点的颜色来渲染整个图元。

}void display(void){glClear(GL_COLOR_BUFFER_BIT);glColor3f(0.0, 1.0, 0.0);}void Idle(){spin = (spin + 5) % 360;glutPostRedisplay();Sleep(20);}void keyboard(unsigned char key, int x, int y) {switch (key) {case 27:exit(0);break;}}圆环代替箱子,小球上下运动作为光源五、实验分析与讨论1.了解了简单的动画制作过程;2. 窗口放大之后旋转的速度变慢;解释:最大化之后因为需要渲染的像素变多了,如果没锁帧的话帧数就会变少,于是就变慢了……就像工作量变多了完成时间要变长一样的。

南邮计算机图形学实验报告(修正版)

南邮计算机图形学实验报告(修正版)

实验报告实验名称指导教师实验类型综合实验学时 2 实验时间一、实验目的和要求能够灵活的运用OpenGL图形API函数,基于C++程序语言,结合操作系统交互接口实现交互式3D动画。

基于实验1的基本内容,设计增加键盘及鼠标输入的互动,实现三维物体交互式运动效果。

(物体的旋转或平移);1.所有图形(例如球体,正方体)有清晰的轮廓,实现3D交互动画效果。

2.学会导入Vertex的其他属性,如normal,texture,实现纹理映射。

二、实验环境(实验设备)硬件:微机软件:vs2012实验报告三、实验过程描述与结果分析实验代码:#include<stdlib.h>#include<GL/glut.h>#include<windows.h>float ratX = 60;float ratY = 60;float ratZ = 60;float tx=0;float ty=0;float sf=0;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); // 四边形的左下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);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);// 四边形的左上glEnd();}void display(){glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);//清空颜色和深度缓存glMatrixMode(GL_MODELVIEW);glLoadIdentity();//gluLookAt(2.0, 2.0, 2.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);glTranslatef(0.0f+tx,0.0f+ty,-4.0f);//平移变换glScalef(1+sf,1+sf,1+sf);//缩放变换glRotatef(ratX, 1.0f, 0.0f, 0.0f);//绕X轴的旋转变换glRotatef(ratY, 0.0f, 1.0f, 0.0f);//绕Y轴的旋转变换glRotatef(ratZ, 0.0f, 0.0f, 1.0f);//绕Z轴的旋转变换DrawBox();glFlush();glutSwapBuffers();}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);}void init(){glClearColor (1.0, 1.0, 1.0, 1.0);glEnable(GL_DEPTH_TEST);//启动深度测试模式}void myKeyboard(unsigned char key, int x, int y) {if(key == 'a' || key == 'A')ratX += 2;ratY += 2;ratZ += 2;if(key == 's' || key == 'S')ratX -= 2;ratY -= 2;ratZ -= 2;if(key == 'j' || key == 'J')sf+=0.1;if(key == 'k' || key == 'K')sf-=0.1;if(key == 'c' || key == 'C')exit(0);glutPostRedisplay(); //重新调用绘制函数}void myspecialKeyboard(int key,int x,int y){if(key == GLUT_KEY_UP )ty+=0.1;if(key == GLUT_KEY_DOWN)ty-=0.1;if(key ==GLUT_KEY_LEFT)tx-=0.1;if(key==GLUT_KEY_RIGHT)tx+=0.1;glutPostRedisplay();}int main(int argc, char** argv){glutInit(&argc,argv); // 初始GLUT.glutInitDisplayMode(GLUT_DEPTH|GLUT_DOUBLE|GLUT_RGB); //设定显示模式glutInitWindowSize(400,400); // 设定窗口大小glutInitWindowPosition(50,100); // 设定窗口位置glutCreateWindow("立方体的简单三维交互式几何变换"); // 用前面指定参数创建glutReshapeFunc(reshape); //指定重绘回调函数glutDisplayFunc(display); // 进行一些初始化工作glutKeyboardFunc( myKeyboard); //指定键盘回调函数glutSpecialFunc(myspecialKeyboard); //指定键盘回调函数init();glutMainLoop();// 进入无穷循环,等待事件处理}实验结果图:实验报告四、实验小结(包括问题和解决方法、心得体会、意见与建议等)通过此次实验灵活的运用OpenGL图形API函数,基于C++程序语言,结合操作系统交互接口实现了交互式3D动画。

计算机图形学实验报告

计算机图形学实验报告

实验结果与结论
• 在本次实验中,我们成功地实现了复杂场景的渲染,得到了具有较高真实感和视觉效果的图像。通过对比 实验前后的效果,我们发现光线追踪和着色器的运用对于提高渲染质量和效率具有重要作用。同时,我们 也发现场景图的构建和渲染脚本的编写对于实现复杂场景的渲染至关重要。此次实验不仅提高了我们对计 算机图形学原理的理解和实践能力,也为我们后续深入研究渲染引擎的实现提供了宝贵经验。
2. 通过属性设置和变换操作,实现了对图形的定 制和调整,加深了对图形属性的理解。
4. 实验的不足之处:由于时间限制,实验只涉及 了基本图形的绘制和变换,未涉及更复杂的图形 处理算法和技术,如光照、纹理映射等。需要在 后续实验中进一步学习和探索。
02
实验二:实现动画效果
实验目的
掌握动画的基本原 理和实现方法
04
实验四:渲染复杂场景
实验目的
掌握渲染复杂场景的基本流程和方法 理解光线追踪和着色器在渲染过程中的作用
熟悉渲染引擎的实现原理和技巧 提高解决实际问题的能力
实验步骤
• 准备场景文件 • 使用3D建模软件(如Blender)创建或导入场景模型,导出为常用的3D格式(如.obj或.fbx)。 • 导入场景文件 • 在渲染引擎(如Unity或Unreal Engine)中导入准备好的场景文件。 • 构建场景图 • 根据场景的层次结构和光照需求,构建场景图(Scene Graph)。 • 设置光照和材质属性 • 为场景中的物体设置光照和材质属性(如漫反射、镜面反射、透明度等)。 • 编写渲染脚本 • 使用编程语言(如C或JavaScript)编写渲染脚本,控制场景中物体的渲染顺序和逻辑。 • 运行渲染程序 • 运行渲染程序,观察渲染结果。根据效果调整光照、材质和渲染逻辑。 • 导出渲染图像 • 将渲染结果导出为图像文件(如JPEG或PNG),进行后续分析和展示。

-计算机图形学实验报告

-计算机图形学实验报告

计算机图形学实验报告姓名:_____________学号:_____________班级:_____________时间:_____2016年12月_________实验一OpenGL编程与图形绘制1.实验目的了解OpenGL编程,并熟悉OpenGL的主要功能、绘制流程和基本语法。

学会配置OpenGL环境,并在该环境中编程绘图。

2.实验内容OpenGL的主要功能:模型绘制、模型观察、颜色模式、光照应用、图像效果增强、位图和图像处理、纹理映射、实时动画和交互技术。

OpenGL的绘制流程分为两个方面:一个完整的窗口系统的OpenGL图形处理系统的结构为:最底层为图形硬件,第二层为操作系统,第三层为窗口系统,第四层为OpenGL,最上面的层为应用软件;OpenGL命令将被放在一个命令缓冲区中,这样命令缓冲区中包含了大量的命令、顶点数据和纹理数据。

当缓冲区被清空时,缓冲区中的命令和数据都将传递给流水线的下一个阶段。

OpenGL的基本语法中相关库有:OpenGL核心库:gl、OpenGL实用程序库:glu、OpenG 编程辅助库:aux、OpenGL实用程序工具包(OpenGL utility toolkit,GLUT):glut、Windows 专用库:wgl。

OpenGL的基本语法中命名规则为:OpenGL函数都遵循一个命名约定,即采用以下格式:<库前缀><根命令〉〈可选的参数个数><可选的参数类型〉。

了解了上述基础知识后,配置好OpenGL环境,然后在该环境中编程练习图形的绘制,本次实验主要是对点的绘制、直线的绘制和多边形面的绘制。

3.实验代码及结果3。

1点的绘制:#include〈gl/glut。

h>void Initial(void){glClearColor(1.0f,1.0f,1。

0f,1.0f);//设置窗口背景颜色为白色glMatrixMode(GL_PROJECTION); //指定设置投影参数gluOrtho2D(0。

《计算机图形学》课内实验报告(实验一)

《计算机图形学》课内实验报告(实验一)
PFNGLGETINFOLOGARBPROC glGetInfoLogARB;
PFNGLUNIFORM1FARBPROC glUniform1fARB;
PFNGLGETUNIFORMLOCATIONARBPROC glGetUniformLocationARB;
#ifndef __APPLE__
PFNGLSECONDARYCOLOR3FPROC glSecondaryColor3f;
{
GLbyte infoLog[MAX_INFO_LOG_SIZE];
glGetInfoLogARB(progObj, MAX_INFO_LOG_SIZE, NULL, infoLog);
fprintf(stderr, "Error in program linkage!\n");
fprintf(stderr, "Info log: %s\n", infoLog);
// Demonstrates high-level shaders
// Program by Benjamin Lipchak
#include "../../Common/OpenGLSB.h" // System and OpenGL Stuff
#include "../../Common/GLTools.h" // System and OpenGL Stuff
// Initially set the blink parameter to 1 (no flicker)
if (flickerLocation != -1)
glUniform1fARB(flickerLocation,1.0f);
// Program object has changed, so we should revalidate

计算机图形学作业实验报告

计算机图形学作业实验报告

计算机图形学实验报告班级:学号:姓名:指导教师:完成日期:实验一:多边形填充一、实验目的了解多边形属性,熟悉相关函数的调用。

二、实验内容步骤和实现:首先进行初始化工作,进行显示模式(单缓冲区)和窗口等设定,主要实现根据两个函数,一个是指定场景绘制函数,glutDisplayFunc(Paint),paint函数中设置了两个三角形,一个填充,一个不填充。

用到了启用多边形点画模式glEnable(GL_POL YGON_STIPPLE)的函数,和指定多边形点画模式(填充) glPolygonStipple(fly)的函数。

另外一个就是循环执行OpenGl命令的glutMainLoop()函数。

三、实验结果四、源程序// POL Y_STIPPLE.C#include <gl/glut.h>void makeObject() // 定义一个三角形{ glBegin(GL_TRIANGLES); // 开始定义三角形// 按逆时针方向指定三角形的顶点坐标glVertex2f(-0.95, -0.95);glVertex2f(0.95, -0.95);glVertex2f(0, 0.95);glEnd(); // 三角形定义结束}void display(){ GLsizei w = glutGet(GLUT_WINDOW_WIDTH); // 程序窗口宽度GLsizei h = glutGet(GLUT_WINDOW_HEIGHT); // 程序窗口高度GLubyte fly[] = // 第二个三角形点画模式的mask值{ 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, // 0X03, 0X80, 0X01, 0XC0, 0X06, 0XC0, 0X03, 0X60, //0X04, 0X60, 0X06, 0X20, 0X04, 0X30, 0X0C, 0X20, //0X04, 0X18, 0X18, 0X20, 0X04, 0X0C, 0X30, 0X20, //0X04, 0X06, 0X60, 0X20, 0X44, 0X03, 0XC0, 0X22, //0X44, 0X01, 0X80, 0X22, 0X44, 0X01, 0X80, 0X22, //0X44, 0X01, 0X80, 0X22, 0X44, 0X01, 0X80, 0X22, //0X44, 0X01, 0X80, 0X22, 0X44, 0X01, 0X80, 0X22, //0X66, 0X01, 0X80, 0X66, 0X33, 0X01, 0X80, 0XCC, //0X19, 0X81, 0X81, 0X98, 0X0C, 0XC1, 0X83, 0X30, //0X07, 0XE1, 0X87, 0XE0, 0X03, 0X3F, 0XFC, 0XC0, //0X03, 0X31, 0X8C, 0XC0, 0X03, 0X33, 0XCC, 0XC0, //0X06, 0X64, 0X26, 0X60, 0X0C, 0XCC, 0X33, 0X30, //0X18, 0XCC, 0X33, 0X18, 0X10, 0XC4, 0X23, 0X08, //0X10, 0X63, 0XC6, 0X08, 0X10, 0X30, 0X0C, 0X08, //0X10, 0X18, 0X18, 0X08, 0X10, 0X00, 0X00, 0X08 };glClear(GL_COLOR_BUFFER_BIT); // 清除颜色缓冲区glViewport(0, 0, w / 2, h); // 第一个视口,显示第一个三角形glColor3f(1, 1, 1); // 设置颜色,白色,默认值makeObject(); // 第一个三角形glViewport(w / 2, 0, w / 2, h); // 第二个视口,显示第二个三角形glColor3f(1, 0, 0); // 设置颜色,红色glEnable(GL_POL YGON_STIPPLE); // 启用多边形点画模式glPolygonStipple(fly); // 指定多边形点画模式(填充)makeObject(); // 第二个三角形glDisable(GL_POL YGON_STIPPLE); // 关闭多边形点画模式glFlush(); // 强制OpenGL命令序列在有限的时间内完成执行}int main(){ glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);// 设置程序窗口的显示模式(单缓冲区、RGBA颜色模型)glutInitWindowPosition(100, 100); // 程序窗口的位置glutInitWindowSize(300, 150); // 程序窗口的大小glutCreateWindow("一个填充多边形的例子!"); // 窗口的标题glutDisplayFunc(display); // 指定场景绘制函数glutMainLoop(); // 开始循环执行OpenGL命令}实验二:基本图元绘制二、实验目的了解OpenGL图形软件包绘制图形的基本过程及其程序框架,并在已有的程序框架中添加代码实现直线和圆的生成算法,演示直线和圆的生成过程,从而加深对直线和圆等基本图形生成算法的理解。

计算机图形学实验报告

计算机图形学实验报告

实验一 Window图形编程基础一、实验类型:验证型实验二、实验目的1、熟练使用实验主要开发平台;2、掌握如何在编译平台下编辑、编译、连接和运行一个简单的Windows图形应用程序;3、掌握Window图形编程的基本方法;4、学会使用基本绘图函数和Window GDI对象;三、实验内容创建基于MFC的Single Document应用程序(Win32应用程序也可,同学们可根据自己的喜好决定),程序可以实现以下要求:1、用户可以通过菜单选择绘图颜色;2、用户点击菜单选择绘图形状时,能在视图中绘制指定形状的图形;四、实验要求与指导1、建立名为“颜色”的菜单,该菜单下有四个菜单项:红、绿、蓝、黄。

用户通过点击不同的菜单项,可以选择不同的颜色进行绘图。

2、建立名为“绘图”的菜单,该菜单下有三个菜单项:直线、曲线、矩形其中“曲线”项有级联菜单,包括:圆、椭圆。

3、用户通过点击“绘图”中不同的菜单项,弹出对话框,让用户输入绘图位置,在指定位置进行绘图。

五、实验结果:六、实验主要代码1、画直线:CClientDC *m_pDC;再在OnDraw函数里给变量初始化m_pDC=new CClientDC(this);在OnDraw函数中添加:m_pDC=new CClientDC(this);m_pDC->MoveTo(10,10);m_pDC->LineTo(100,100);m_pDC->SetPixel(100,200,RGB(0,0,0));m_pDC->TextOut(100,100);2、画圆:void CMyCG::LineDDA2(int xa, int ya, int xb, int yb, CDC *pDC){int dx = xb - xa;int dy = yb - ya;int Steps, k;float xIncrement,yIncrement;float x = xa,y= ya;if(abs(dx)>abs(dy))Steps = abs(dx);elseSteps = abs(dy);xIncrement = dx/(float)Steps;yIncrement = dy/(float)Steps;pDC->SetPixel(ROUND(x),ROUND(y),RGB(0,0,0));for(k=0;k<Steps;k++){x +=xIncrement;y +=yIncrement;sleep(10);pDC->SetPixel(ROUND(x),ROUND(y),RGB(0,0,0));3、画矩形void CRectangleDlg::OnLButtonDown(UINT nFlags, CPoint point){lButtonDownNotUp = TRUE;RECT rect;m_showRectangle. GetClientRect( &rect ) ;if( (point. x<rect. right) && (point. x>rect. left) && (point. y<rect. bottom) && (point. y>rect. top) ){regionLeftTopTemp = point;}CDialog::OnLButtonDown(nFlags, point);}void CRectangleDlg::OnMouseMove(UINT nFlags, CPoint point){RECT rect;m_showRectangle. GetClientRect( &rect );if( ( < ) && ( > ) && ( < ) && ( > ) ){if( ( lButtonDownNotUp == TRUE ){regionRightBottomTemp = point;CDC * pDC = m_showRectangle. GetWindowDC ();pDC -> Rectangle( CRect( regionLeftTopTemp, regionRightBottomTemp ) ) ; }}CDialog::OnMouseMove(nFlags, point);}void CRectangleDlg::OnLButtonUp(UINT nFlags, CPoint point){lButtonDownNotUp=FALSE;CDialog::OnLButtonUp(nFlags, point);}实验二基本图形生成算法一、实验类型:验证型实验二、实验目的1、掌握DDA、Bresenham直线生成算法;2、掌握Bresenham或中点圆生成算法;3、掌握Bresenham或中点椭圆生成算法;三、实验内容1、实现DDA、Bresenham直线生成算法;2、实现Bresenham画圆法或中点画圆法;3、实现Bresenham或中点法椭圆生成算法;4、利用1、2、3实现的直线、圆、椭圆图形生成函数进行图形绘制;四、实验要求与指导1、按照实验指导书节创建一个基于MFC的Single Document应用程序。

计算机图形学实验报告(一).doc

计算机图形学实验报告(一).doc

实验一OpenGL开发环境及扫描转换算法1、实验目的与要求1.通过实验掌握OpenGL中编程环境的设置,了解相关函数用途及设置步骤;2.通过实验掌握基本图形元素的生成,给出相关代码和运行结果;3.用WINDOWS GDI函数编写生成直线或区域填充的程序(选DDA或Bresenham直线算法,活性边表算法填充多边形),演示算法过程。

4.画矩形,调用一个函数画一个矩形。

画椭圆,调用一个函数画一个椭圆。

画Bezier 曲线。

2、实验方案请描述为达到实验的需要完成哪些方面的实验,列举出实验的基本要点和重点。

在工程WinAPIEX加入void createLine(HDC tmpDC)和void Polyline (tmpDC)在void createLine(HDC tmpDC)用DDA直线算法或Bresenham直线算法生成直线在void Polyline (tmpDC)添加活泩边表填充算法,生成填充四边形和八边形加入Rectangle(tmpDC,x0,y0,x1,y1);加入Ellipse (tmpDC, x0,y0,a,b) ;加入PolyBezier(tmpDC,arr_vertex,4) ;3、实验结果和数据处理1)生成直线的DDA直线算法在createLine(tmpDC)中加入以下代码int x0,y0,x1,y1,color; //自定义直线的起点(x0,y0)和终点(x1,y1),及颜色colorfloat dx,dy,x,y;int length,i;x0=50;y0=160;x1=900;y1=200;//此处修改了color=1000; color=1;if(abs(x1-x0)>=abs(y1-y0))length=abs(x1-x0);elselength=abs(y1-y0);dx=(x1-x0)/(float)length;dy=(y1-y0)/(float)length;i=1;x=(float)x0;y=(float)y0;while(i<=length){SetPixel(tmpDC,int(x+0.5),int(y+0.5),color);x+=dx;y+=dy;i++;}2)区域填充的程序在void Polyline (tmpDC) 添加活性边表填充void Polyline (HDC tmpDC) //多边形边数.{const int POINTNUM=4;//或者是八边形8/******定义结构体用于活性边表AET和新边表NET***************************** ******/typedef struct XET{float x;float dx,ymax;XET* next;}AET,NET;/******定义点结构体point**************************** **************************/struct point{float x;float y;}polypoint[POINTNUM]={100,10 0,400,100,400,400,100,400};//正方形//polypoint[POINTNUM]={600,10 0,700,100,800,200,800,300,700,400,600, 400,500,300,500,200};//八边形顶点/******计算最高点的y坐标(扫描到此结束)****************************** **********/int MaxY=0;int i;for(i=0;i<POINTNUM;i++)if(polypoint[i].y>MaxY) MaxY=(int)polypoint[i].y;/*******初始化AET表********************************* **************************/AET *pAET=new AET;pAET->next=NULL;/******初始化NET表********************************* ***************************/NET *pNET[1024];for(i=0;i<=MaxY;i++){pNET[i]=new NET;pNET[i]->next=NULL;}/******扫描并建立NET表********************************* ************************/for(i=0;i<=MaxY;i++){for(intj=0;j<POINTNUM;j++)if(polypoint[j].y==i){if(polypoint[(j-1+POINTNUM)%POINT NUM].y>polypoint[j].y){NET*p=new NET;p->x=polypoint[j].x;p->ymax=polypoint[(j-1+POINTNUM) %POINTNUM].y;p->dx=(polypoint[(j-1+POINTNUM)%P OINTNUM].x-polypoint[j].x)/(polypoint [(j-1+POINTNUM)%POINTNUM].y-po lypoint[j].y);p->next=pNET[i]->next;pNET[i]->next=p;}if(polypoint[(j+1+POINTNUM)%POIN TNUM].y>polypoint[j].y){NET*p=new NET;p->x=polypoint[j].x;p->ymax=polypoint[(j+1+POINTNUM) %POINTNUM].y;p->dx=(polypoint[(j+1+POINTNUM)% POINTNUM].x-polypoint[j].x)/(polypoint[(j+1+POINTNUM)%POINTNUM].y-polypoint[j].y);p->next=pNET[i]->next;pNET[i]->next=p;}}}/******建立并更新活性边表AET***************************** ************************/for(i=0;i<=MaxY;i++){//计算新的交点x,更新AET***************************** ***************************/NET *p=pAET->next;while(p){p->x=p->x + p->dx;p=p->next;}//更新后新AET先排序********************************* ****************************///断表排序,不再开辟空间AET *tq=pAET;p=pAET->next;tq->next=NULL;while(p){while(tq->next && p->x >= tq->next->x)tq=tq->next;NET *s=p->next;p->next=tq->next;tq->next=p;p=s;tq=pAET;}//(改进算法)先从AET表中删除ymax==i的结点********************************* *******/AET *q=pAET;p=q->next;while(p){if(p->ymax==i){q->next=p->next;delete p;p=q->next;}else{q=q->next;p=q->next;}}//将NET中的新点加入AET,并用插入法按X值递增排序********************************* */p=pNET[i]->next;q=pAET;while(p){while(q->next && p->x >= q->next->x)q=q->next;NET *s=p->next;p->next=q->next;q->next=p;p=s;q=pAET;}/******配对填充颜色********************************* ******************************/p=pAET->next;while(p && p->next){for(floatj=p->x;j<=p->next->x;j++){SetPixel(tmpDC,static_cast<int>(j),i,RG B(255,200,0));//此处我改变了颜色,八边形的为黄色//SetPixel(tmpDC,static_cast<int>(j),i,RG B(255,0,0));//还有四边形的红色}p=p->next->next;//考虑端点情况}} }//画矩形Rectangle(tmpDC,20,20,80,80); //左上顶点,右下顶点//画椭圆Ellipse (tmpDC, 20,20,160,360) ;//画Bezier 曲线,利用已有的顶点数据PolyBezier(tmpDC,arr_vertex,4) ;实验截图:1.DDA算法的直线2.四边形和八边形3.正方形4.椭行5.Bezier 曲线实习总结:通过本次实验,我掌握了opengl绘图的一些基本知识,会在vc里面加入opengl的基本库。

计算机图形学实验报告

计算机图形学实验报告

计算机图形学实验报告计算机图形学实验报告引言计算机图形学是研究计算机生成和处理图像的学科,它在现代科技和娱乐产业中扮演着重要的角色。

本实验报告旨在总结和分享我在计算机图形学实验中的经验和收获。

一、实验背景计算机图形学实验是计算机科学与技术专业的一门重要课程,通过实践操作和编程,学生可以深入了解图形学的基本原理和算法。

本次实验主要涉及三维图形的建模、渲染和动画。

二、实验内容1. 三维图形建模在实验中,我们学习了三维图形的表示和建模方法。

通过使用OpenGL或其他图形库,我们可以创建基本的几何体,如立方体、球体和圆柱体,并进行变换操作,如平移、旋转和缩放。

这些基本操作为后续的图形处理和渲染打下了基础。

2. 光照和着色光照和着色是图形学中重要的概念。

我们学习了不同的光照模型,如环境光、漫反射和镜面反射,并了解了如何在三维场景中模拟光照效果。

通过设置材质属性和光源参数,我们可以实现逼真的光照效果,使物体看起来更加真实。

3. 纹理映射纹理映射是一种将二维图像映射到三维物体表面的技术。

通过将纹理图像与物体的顶点坐标相对应,我们可以实现更加细致的渲染效果。

在实验中,我们学习了纹理坐标的计算和纹理映射的应用,使物体表面呈现出具有纹理和细节的效果。

4. 动画和交互动画和交互是计算机图形学的重要应用领域。

在实验中,我们学习了基本的动画原理和算法,如关键帧动画和插值技术。

通过设置动画参数和交互控制,我们可以实现物体的平滑移动和变形效果,提升用户体验。

三、实验过程在实验过程中,我们首先熟悉了图形库的使用和基本的编程技巧。

然后,我们按照实验指导书的要求,逐步完成了三维图形建模、光照和着色、纹理映射以及动画和交互等任务。

在实验过程中,我们遇到了许多挑战和问题,但通过不断的尝试和调试,最终成功实现了预期的效果。

四、实验结果通过实验,我们成功实现了三维图形的建模、渲染和动画效果。

我们可以通过键盘和鼠标控制物体的移动和变形,同时观察到真实的光照效果和纹理映射效果。

哈工大计算机图形学Flash实验报告

哈工大计算机图形学Flash实验报告

H a r b i n I n s t i t u t e o f T e c h n o l o g y课程研究报告课程名称:计算机图形学报告类型: Flash动画设计报告设计题目:基于Flash的动画设计所在院系:软件学院所在学科:软件工程学生类别:研究生指导教师:苏小红学生姓名:学生学号:选课时间: 2016年秋季学期教师批阅成绩:哈尔滨工业大学一、软硬件环境本程序运行在Windows7下,主要设计工具为Adobe Flash CS6,辅助设计工具为Adobe Photoshop CS6。

查看计算机属性得到软硬件环境:处理器为Intel Core i5-3210M CPU 2.50GHz,内存4GB,64位操作系统。

其中Flash版本为12.0.0.0,官方下载地址为/support/flash/downloads.html#flashCS6。

二、设计内容和设计思路动画的背景音乐来自于英国歌手詹姆斯·布朗特《不安于室》专辑中的You Are Beautiful。

詹姆斯·布朗特这首歌曲是写给其前女友迪希·崔西的,迪希·崔西和新任男友在一起的消息令詹姆斯·布朗特十分伤心。

一次,詹姆斯·布朗特与女友相见,两人只是眼神对视了一下,之后两人再也没有见过面。

那一次的对视让的邂逅:男生在地铁站偶遇了一位纯真动人的女生,然而女生已经名花有主,虽然仅仅是匆匆一瞥,但女生的形象已在男生心中留下了难以磨灭的痕迹,只可惜有缘无分,只能“虽不能至,心向往之”,这是对“一见倾心”的浪漫书写。

詹姆斯·布朗特通过这首歌曲简单的结构有效地向人们传达了现实的痛苦、不能与心爱的人在一起的痛苦。

这首歌曲令人心碎却动人耐听。

像是记录着难以忘情、怦然心动的情感小品。

You Are Beautiful把爱情世界里的偶然、巧合与失落表达得十分动人。

在整个Flash制作过程中,我根据每句歌词的含义设计出场景,参考时间轴,让场景与歌词对应起来。

计算机图形学上机实验报告模板

计算机图形学上机实验报告模板

计算机图形学上机实验报告实验名称:线画图元生成中国石油大学(北京)信息学院计算机科学与技术系班级:计算机08-2班学号:2008082207姓名:周新完成日期:2011-10-23实验一:基本图元绘制一、实验目的与要求(1)理解glut程序框架(2)理解窗口到视区的变换(3)理解OpenGL实现动画的原理(5)添加代码实现“Bresenham算法画直线”(6)添加代码实现圆的绘制(可以适当对框架坐标系进行修改)(7)适当修改代码实现具有宽度的图形(线刷子或方刷子)二、实验内容(算法设计)1.算法流程图和主要数据结构:(1)中点椭圆算法的程序流程图(2)主要数据结构:vector<CPoint>作为存储计算出的点2.关键代码实现(1)DDA算法//DDA算法//参数:bePoint为起点坐标,endPoint为终点坐标void CGraphicsView::DDACreateLine(CPoint bePoint,CPoint endPoint){//画线算法的实现int dx,dy,epsl,k;float x,y,xIncre,yIncre;int bptx=(int)bePoint.x;int bpty=(int)bePoint.y;int eptx=(int)endPoint.x;int epty=(int)endPoint.y;dx = eptx-bptx;dy = epty-bpty;x = bptx;y = bpty;if(abs(dx) > abs(dy)){epsl = abs(dx);}else {epsl = abs(dy);}xIncre = (float)dx /epsl;//x增加步长yIncre = (float)dy /epsl;//y增加步长for(k = 0; k<=epsl; k++){ptList.push_back(CPoint((int)x,(int)y));//将算出的点坐标取整并加入ptList尾部x += xIncre;y += yIncre;}}(2)Bresenham画线算法//中点Bresenham算法画直线(0<=k<=1)//参数:bePoint为起点,endPoint为终点void CGraphicsView::BresenhamLine(CPoint bePoint, CPoint endPoint){int dx,dy,d,upIncre,downIncre,x,y,k=0;int bptx=(int)bePoint.x;int bpty=(int)bePoint.y;int eptx=(int)endPoint.x;int epty=(int)endPoint.y;if(bptx>eptx){x=eptx;eptx=bptx;bptx=x;y=epty;epty=bpty;bpty=y;}x=bptx;y=bpty;dx=eptx-bptx;dy=epty-bpty;d=dx-2*dy;upIncre=2*dx-2*dy;downIncre=-2*dy;//算法实现while(x<eptx){ptList.push_back(CPoint(x,y));//将算出的点坐标取整并加入ptList尾部x++;if(d<0){y++;d+=upIncre;}elsed+=downIncre;}}(3)改进Bresenham画线算法//改进的Bresenham算法画直线(0<=k<=1)//参数:bePoint为起点,endPoint为终点void CGraphicsView::BresenhamImpro(CPoint bePoint, CPoint endPoint) {int x,y,dx,dy,e,k=0;int bptx=(int)bePoint.x;int bpty=(int)bePoint.y;int eptx=(int)endPoint.x;int epty=(int)endPoint.y;dx=eptx-bptx;dy=epty-bpty;e=-dx;x=bptx;y=bpty;while(x<=eptx){ptList.push_back(CPoint(x,y));k++;x++;e=e+2*dy;if(e>0){y++;e=e-2*dx;}}}(4)Bresenham画中点圆//中点圆算法//参数:cirCenter为圆心点,cirEdge为圆周上一点void CGraphicsView::BCircle(CPoint cirCenter, CPoint cirEdge){int d,k=0,xa,ya;int bptx=(int)cirCenter.x;int bpty=(int)cirCenter.y;int eptx=(int)cirEdge.x;int epty=(int)cirEdge.y;int R=sqrt(pow((bptx-eptx),2)+pow((bpty-epty),2));xa=0;ya=R;d=1-R;while(xa<=ya){ptList.push_back(CPoint(xa+bptx,ya+bpty));ptList.push_back(CPoint(ya+bptx,xa+bpty));ptList.push_back(CPoint(-ya+bptx,xa+bpty));ptList.push_back(CPoint(-xa+bptx,ya+bpty));ptList.push_back(CPoint(-xa+bptx,-ya+bpty));ptList.push_back(CPoint(-ya+bptx,-xa+bpty));ptList.push_back(CPoint(ya+bptx,-xa+bpty));ptList.push_back(CPoint(xa+bptx,-ya+bpty));if(d<0)d+=2*xa+3;else{d+=2*(xa-ya)+5;ya--;}xa++;}}(5)Bresenham画中点椭圆while(pow(rb,2)*x<=pow(ra,2)*y){ptList.push_back(CPoint(x+cx,y+cy));ptList.push_back(CPoint(-x+cx,y+cy));ptList.push_back(CPoint(x+cx,-y+cy));ptList.push_back(CPoint(-x+cx,-y+cy));double temp1=2*pow(rb,2)*x+2*pow(rb,2);//定义临时变量,以方便p1的计算double temp2=2*pow(ra,2)*y-2*pow(ra,2);if(p1<0){p1+=temp1+pow(rb,2);}else{p1+=temp1-temp2+pow(rb,2);y--;}x++;}//计算第二区域内点p2=pow(rb,2)*pow((x+(double)1/2),2)+pow(ra,2)*(y-1)-pow(ra,2)*pow(rb,2);while(x<=ra&&y>=0){ptList.push_back(CPoint(x+cx,y+cy));ptList.push_back(CPoint(-x+cx,y+cy));ptList.push_back(CPoint(x+cx,-y+cy));ptList.push_back(CPoint(-x+cx,-y+cy));if(p2>0){y--;p2=p2-2*pow(ra,2)*y+pow(ra,2);}else{y--;x++;p2=p2+2*pow(rb,2)*x-2*pow(ra,2)*y+pow(ra,2);}(6)时钟控制器OnTimerCMainFrame *mainframe=(CMainFrame *)(AfxGetApp()->m_pMainWnd);//定义获取主窗口的指针int mode=mainframe->algoMode;//将从主窗口获取的算法选择变量赋值给临时变量if(4==mode||5==mode)//根据算法选择决定画点的顺序,4或5时为圆或椭圆{for(int i=0;i<8;i++)//画圆或椭圆时,每次画8个点{if(po intID<=(ptList.size()-1)){if(10>=abs(ptList[pointID].x)&&10>=abs(ptList[pointID].y)){DrawPoint(ptList[pointID]);//画一个点的函数pointID++;//定义好的全局变量,记录画点的个数}}else{KillTimer(nIDEvent);//杀掉计时器}}}else//画线时,每次只画一个点{if(pointID<=(ptList.size()-1)){DrawPoint(ptList[pointID]);pointID++;}else{KillTimer(nIDEvent);}}(7)通过点击鼠标左键来获取点坐标OnLButtonDown pDC->DPtoLP(&point);//设备坐标转化为逻辑坐标switch(lButtonDown) {case 0:ptBegin=point;//将获取到的逻辑坐标赋值给已定义的起点lButtonDown+=1;//定义的类的成员变量,左键次数加1break;case 1:ptEnd=point; //将获取到的逻辑坐标赋值给已定义的终点lButtonDown+=1;break;case 2:radiumpt=point;//该点为画椭圆是特有的点,作为椭圆的右顶点lButtonDown+=1;default:break;}(8)窗口视图的模式映射CRect rectClient;GetClientRect(rectClient);//获得当前窗口的客户区大小pDC->SetMapMode(MM_ISOTROPIC);//设置映射模式pDC->SetWindowExt(21,21);//设置窗口范围pDC->SetViewportExt(rectClient.right,-rectClient.bottom);//设置视口范围pDC->SetViewportOrg(rectClient.right/2,rectClient.bottom/2);//设置视口原点三、实验结果1.DDA算法画直线2、Bresenham画线3、改进Bresenham画线4 Bresenham画中点圆5 Bresenham画中点椭圆(1)画刷为正方形(2)画刷为圆形四、实验讨论与体会体会:通过本次实验,让我了解到了上文提到的几种算法实现的具体过程,并且通过动态画线,对几种算法生成线的过程和特点也有个更进一步的学习和掌握。

工作报告之计算机图形学实验报告

工作报告之计算机图形学实验报告

工作报告之计算机图形学实验报告计算机图形学实验报告【篇一:计算机图形学实验报告及代码】第1 章概述一、教学目标通过本章的学习,使学生能够了解计算机图形学的基本概念、研究内容;当前的发展概况;本门课程的特点和应用。

二、教学要求1. 了解计算机图形学的概念和研究内容;2. 了解本门课程的发展概况。

三、教学内容提要1. 计算机图形学的研究内容2. 计算机图形学发展概况3. 计算机图形学特点和应用4. 计算机图形学当前研究的课题5. 计算机图形生成和输出的流水线四、教学重点、难点及解决方法本章将主要围绕计算机图形学的基本概念进行介绍,介绍研究内容;当前的发展概况;本门课程的特点和应用等等。

五、课时安排2学时六、教学设备多媒体七、检测教学目标实现程度的具体措施和要求通过课堂提问的方式来检测学生对基本概念的掌握程度。

八、教学内容1.1 计算机图形学的研究内容计算机图形学(computer graphics): 研究通过计算机将数据转换为图形,并在专用显示设备上显示的原理、方法和技术的学科。

计算机图形表现形式(1).线条式(线框架图)用线段来表现图形,容易反映客观实体的内部结构,如各类工程技术中结构图的表示,机械设计中零件结构图及电路设计中的电路原理图等。

具有面模型、色彩、浓淡和明暗层次效应,适合表现客观实体的外形或外貌,如汽车、飞机、轮船等的外形设计以及各种艺术品造型设计等。

(2).真实感面模型图形跑车靓照计算机图形分类(空间)(1).二维图形(2d):在平面坐标系中定义的图形(2).三维图形(3d):在三维坐标系中定义的图形计算机图形产生方法(1).矢量法(短折线法)任何形状的曲线都用许多首尾相连的短直线(矢量)逼近。

(2).描点法(像素点串接法)每一曲线都是由一定大小的像素点组成计算机绘图方式:(1)交互式绘图允许操作者以某种方式(对话方式或命令方式)来控制和操纵图形生成过程,使得图形可以边生成、边显示、边修改,直至符合要求为止。

计算机图形学报告1

计算机图形学报告1
姓名
专业:
班级:
学号:
科目:计算机图形学基础
实验日期:2010-09-03
实验题目:实验一简单计算机动画
【实验内容】
给出两幅图片,编写程序生成由图片1渐变至图片2的动画视频。
【实验要求】
1、实验程序
2、说明该动画生成原理
3、实验结果及分析
【实验过程】
(1)实验程序
%两幅图片生成一个动画视频
L1=imread('tiger.bmp');
(3)实验结果及分析
运行程序,运行结果如下所示(图1~图6)。
(图1)(图2)
(图3)(图4)
(图5)(图6)
【实验体会】
通过本次实验,让我们能够更加清楚地认识到了图像在计算机中的存储的方式,RGB的各分量值对一幅图像的描述。同时,也让我们认识到了,图像和视频之间的关系。这次实验也是挺有趣的。
【教师评语和成绩】
成绩:指导教师:日期:
在此,利用在MATLAB中图形是以矩阵的形式存储的,所以利用矩阵之间的差异来把两幅图像生成一个视频文件。首先,求得两幅图像的差异值m。然后,把这个差异值处于所要插入的帧数,以求得每两帧的差异值n。最后,一幅原图像以n为步长相加得到另一幅图像,从而得到一个两幅图像之间变化的视频文件。
为了使得两幅图像的变化过程,在此选取六个帧来描述其变化情况,以长为m/6为步长进行剪切,从而得到六幅图像,以反映视频文件的生成过程。
figure:imshow(L2+0.41*uint8(L));
figure:imshow(L2+0.61*uint8(L));
figure:imshow(L2+0.81*uint8(L));
figure:imshow(L2+1*uint8(L));

计算机图形学动画编程实验报告

计算机图形学动画编程实验报告

本科学生综合性、设计性实验报告姓名:邓文佳学号:124130704 专业:测绘工程班级:12实验课程名称:计算机图形学指导教师:沈盈佳老师开课学期2014 至2015 学年上学期云南师范大学旅游与地理科学学院计算机动画编程一、实验内容:基于 TurboC环境编写模拟自由落体的动画。

二、实验目的1)掌握图形基于 TurboC环境生成的基本原理2)学习使用cleardevice()、cleanviewdevice()、getimage()与putimage()的配合使用。

3)学习利用数学函数或数学方程式,跟据自变量和因变量的关系,让自变量在一个允许范围内以一步长逐渐增值或减值,进行连续循环,获得连续变化的动画。

三、使用软件模块TurboC 2.0四、编程源代码#include<graphics.h>#include<dos.h>#define g 10main( ){int x=320,y,t;int gdriver=DETECT,gmode;initgraph(&gdriver,&gmode,"");cleardevice();setcolor(15);do{for(t=0;t<10;t++){ y=0.5*g*t*t;circle(x,y,20);delay(50000);cleardevice(); }for(t=0;t<10;t++){y=405-(90*t-0.5*g*t*t);circle(x,y,20);delay(50000);cleardevice();}}while(!kbhit());closegraph();}五、实验结果(自由落体)六、实验体会了解了图形基于 TurboC环境生成的基本原理,会使用cleardevice()、cleanviewdevice()、getimage()与putimage()的方法来进行简单的动画编程。

计算机图形学实验报告三

计算机图形学实验报告三

《计算机图形学》实验报告glClear(GL_COLOR_BUFFER_BIT);//glEnable(GL_SCISSOR_TEST);//glScissor(0.0f,0.0f,500,300);glutWireTeapot(0.4);glFlush();}//窗口调整子程序void myReshape(int w, int h){glViewport(500, -300, (GLsizei)w, (GLsizei)h);glMatrixMode(GL_PROJECTION);glLoadIdentity();if (w <= h)glOrtho(-1, 1, -(float)h / w, (float)h / w, -1, 1);elseglOrtho(-(float)w / h, (float)w / h, -1, 1, -1, 0.5);}2,使用opengl函数写一个图形程序,要求分别使用三个光源从一个茶壶的前右上方(偏红色),正左侧(偏绿色)和前左下方(偏蓝色)对于其进行照射,完成程序并观察效果。

}//绘图子程序void display(void){glColor3f(1.0, 1.0, 0.0);glClear(GL_COLOR_BUFFER_BIT);//glMatrixMode(GL_MODELVIEW);//glLoadIdentity();//设置光源的属性1GLfloat LightAmbient1[] = { 1.0f, 0.0f, 0.0f, 1.0f }; //环境光参数 ( 新增 )GLfloat LightDiffuse1[] = { 1.0f, 0.0f, 0.0f, 1.0f }; // 漫射光参数 ( 新增 )GLfloat Lightspecular1[] = { 1.0f, 0.0f, 0.0f, 1.0f }; // 镜面反射GLfloat LightPosition1[] = { 500.0f, 500.0f, 500.0f, 1.0f }; // 光源位置 ( 新增 ) glLightfv(GL_LIGHT0, GL_POSITION, LightPosition1);glViewport(0, 0, (GLsizei)w, (GLsizei)h);glMatrixMode(GL_PROJECTION);glLoadIdentity();3,使用opengl函数完成一个图形动画程序,显示一个球沿正弦曲线运动的过程,同时显示一个立方体沿抛物线运动过程。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

本科学生综合性、设计性
实验报告
姓名:邓文佳学号:124130704 专业:测绘工程班级:12
实验课程名称:计算机图形学
指导教师:沈盈佳老师
开课学期2014 至2015 学年上学期云南师范大学旅游与地理科学学院
计算机动画编程
一、实验内容:
基于 TurboC环境编写模拟自由落体的动画。

二、实验目的
1)掌握图形基于 TurboC环境生成的基本原理
2)学习使用cleardevice()、cleanviewdevice()、getimage()与putimage()的配合使用。

3)学习利用数学函数或数学方程式,跟据自变量和因变量的关系,让自变量在一个允许范围内以一步长逐渐增值或减值,进行连续循环,获得连续变化的动画。

三、使用软件模块
TurboC 2.0
四、编程源代码
#include<graphics.h>
#include<dos.h>
#define g 10
main( )
{
int x=320,y,t;
int gdriver=DETECT,gmode;
initgraph(&gdriver,&gmode,"");
cleardevice();
setcolor(15);
do{
for(t=0;t<10;t++)
{ y=0.5*g*t*t;
circle(x,y,20);
delay(50000);
cleardevice(); }
for(t=0;t<10;t++)
{y=405-(90*t-0.5*g*t*t);
circle(x,y,20);
delay(50000);
cleardevice();}
}
while(!kbhit());
closegraph();
}
五、实验结果(自由落体)
六、实验体会
了解了图形基于 TurboC环境生成的基本原理,会使用cleardevice()、cleanviewdevice()、getimage()与putimage()的方法来进行简单的动画编程。

相关文档
最新文档