计算机图形学 opengl 文字显示

计算机图形学 opengl 文字显示
计算机图形学 opengl 文字显示

#include

#include

#include

#pragma comment(linker, "/subsystem:console")

using namespace std;

void myReshape(GLsizei w,GLsizei h)

{

glViewport(0,0,w,h);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

if(w<=h)

glOrtho(-20.0,20.0,-20.0*(GLfloat)h/(GLfloat)w, 20.0*(GLfloat)h/(GLfloat)w,-50.0,50.0); else

glOrtho(-20.0*(GLfloat)h/(GLfloat)w, 20.0*(GLfloat)h/(GLfloat)w,-20.0,20.0,-50.0,50.0); glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

}

void drawCNString(const char* str)

{

int len=0, i;

wchar_t* wstring;

HDC hDC = wglGetCurrentDC();

GLuint list = glGenLists(1);

for(i=0; str[i]!='\0'; ++i)

{

if( IsDBCSLeadByte(str[i]) )

++i;

++len;

}

wstring = (wchar_t*)malloc((len+1) * sizeof(wchar_t));

MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, str, -1, wstring, len);

wstring[len] = L'\0';

for(i=0; i

{

wglUseFontBitmapsW(hDC, wstring[i], 1, list);

glCallList(list);

}

free(wstring);

glDeleteLists(list, 1);

}

void display(void)

{

glClear(GL_COLOR_BUFFER_BIT);

glColor3f(1.0f, 0.0f, 0.0f);

glRasterPos2f(-0.5f, -0.6f);

drawCNString(" ");

glutSwapBuffers();

}

int main(int argc, char** argv)

{

cout<<" "<

glutInit(&argc, argv);

glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); glutInitWindowSize (500, 500); glutInitWindowPosition (0, 0); glutCreateWindow ("显示信息");

glClearColor(0.0,0.0,0.0,0.0);

glClear(GL_COLOR_BUFFER_BIT); glutReshapeFunc(myReshape);

glutDisplayFunc(display);

glutMainLoop();

return 0;

}

OpenGL一个简单的例子

先编译运行一个简单的例子,这样我们可以有一个直观的印象。从这个例子我们可以看到OpenGL可以做什么,当然这个例子只做了很简单的一件事--绘制一个彩色的三角形。除此以外,我们还可以看到典型的OpenGL程序结构及openGL的运行顺序。 例1:本例在黑色的背景下绘制一个彩色的三角形,如图一所示。

图一:一个彩色的三角形首先创建工程,其步骤如下:

1)创建一个Win32 Console Application。 2)链接OpenGL libraries。在Visual C++中先单击Project,再单击Settings,再找到Link单击,最后在Object/library modules 的最前面加上OpenGL32.lib GLu32.lib GLaux.lib 3)单击Project Settings中的C/C++标签,将Preprocessor definitions 中的_CONSOLE改为__WINDOWS。最后单击OK。 现在你可以把下面的例子拷贝到工程中去,编译运行。你可以看到一个彩色的三角形。 我们先看看main函数。函数中以glut开头的函数都包含在glut.h中。GLUT库的函数主要执行如处理多窗口绘制、处理回调驱动事件、生成层叠式弹出菜单、绘制位图字体和笔画字体,以及各种窗口管理等任务。 ·glutInit用来初始化GLUT库并同窗口系统对话协商。 ·glutInitDisplayMode用来确定所创建窗口的显示模式。本例中的参数GLUT_SINGLE 指定单缓存窗口,这也是缺省模式,对应的模式为GLUT_DOUBLE 双缓存窗口。参数GLUT_RGB指定颜色RGBA模式,这也是缺省模式,对应的模式为GLUT_INDEX 颜色索引模式窗口。 ·glutInitWindowSize初始化窗口的大小,第一个参数为窗口的宽度,第二个参数为窗口的高度,以像素为单位。 ·glutInitWindowPosition设置初始窗口的位置,第一个参数为窗口左上角x的坐标,第二个参数为窗口左上角y的坐标,以像素为单位。屏幕的左上角的坐标为(0,0),横坐标向右逐渐增加,纵坐标向下逐渐增加。 ·glutCreateWindow创建顶层窗口,窗口的名字为扩号中的参数。 ·background() 这是自己写的函数,设置背景。其实这个函数中的语句可以写在display 函数中,但为了使功能块更加清晰,所以把背景这一部分单独提出来。 ·glutReshapeFunc注册当前窗口的形状变化回调函数。当改变窗口大小时,该窗口的形状改变回调函数将被调用。在此例中就是myReshape指定形状变化函数。 ·glutDisplayFunc注册当前窗口的显示回调函数。当一个窗口的图像层需要重新绘制时,GLUT将调用该窗口的的显示回调函数。在此例中的mydisplay就是显示回调函数,显示回调函数不带任何参数,它负责整个图像层的绘制。我们的大部分工作将集中在这个函数中。 ·glutMainLoop进入GLUT事件处理循环。glutMainLoop函数在GLUT程序中最多只能调用一次,它一旦被调用就不再返回,并且调用注册过的回调函数。所以这个函数必须放在注册回调函数的后面,此例中为glutReshapeFunc,glutDisplayFunc。

计算机图形学OpenGL中绘制太阳_地球_月亮的运动模型源代码

#include static int day = 148; // day的变化:从0到359 void myDisplay(void) { glEnable(GL_DEPTH_TEST); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(75, 1, 1, 400000000); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(0, -200000000, 200000000, 0, 0, 0, 0, 0, 1); // 红色的“太阳” glColor3f(1.0, 0.0, 0.0); glutSolidSphere(69600000, 100, 100); // 蓝色的“地球” glColor3f(0.0, 0.0, 1.0); glRotatef(day/360.0*360.0, 0.0, 0.0, -1.0); glTranslatef(150000000, 0.0, 0.0); glutSolidSphere(15945000, 100, 100); // 黄色的“月亮” glColor3f(1.0, 1.0, 0.0); glRotatef(day/30.0*360.0 - day/360.0*360.0, 0.0, 0.0, -1.0); glTranslatef(38000000, 0.0, 0.0); glutSolidSphere(4345000, 100, 100); glFlush(); glutSwapBuffers(); } void myIdle(void) { ++day; if( day >= 360 ) day = 0; myDisplay(); } int main(int argc, char *argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); glutInitWindowPosition(100, 100); glutInitWindowSize(450, 450);

研究生计算机图形学课程室内场景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.360docs.net/doc/6f1322909.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)

计算机图形学基础期末考试试题

一、填空题 1.将多边形外部一点A与某一点B用线段连接,若此线段与多边形边界相交的次数为??????????,则点B在多边形外部。若此线段与多边形边界相交的次数为??????????,则点B在多边形内部。 2.生成直线的四点要求是_______________________,____________________________,____________________________________,速度要快。 3.由5个控制顶点Pi(i=0,1,…4)所决定的3次B样条曲线,由??????????段3次B样条曲线段光滑连接而成。 4.用于减少或克服在“光栅图形显示器上绘制直线、多边形等连续图形时,由离散量表示连续量引起的失真”的技术叫??????????。 5.图形的数学表示法一般有??????????,??????????,??????????。 1.一个交互性的计算机图形系统应具有、、、、 输入等五方面的功能。 2.阴极射线管从结构上可以分为、和。 3.常用的图形绘制设备有和,其中支持矢量格式。 4.PHIGS和GKS将各种图形输入设备从逻辑上分为六种:定位设备、笔划设 备、、、和。 5.通常可以采用和处理线宽。 6.齐次坐标表示就是用维向量表示n维向量。 7.平行投影根据可以分为投影和投影。 8.一个交互式计算机图形处理系统包括图形软件和_____________,图形软件又分为 _____________、_____________和三部分。 9.构成图形的要素包括和,在计算机中通常用采用两种方法来表示 图形,他们是和。 10.荫罩式彩色显像管的结构包括、、和。 11.目前常用的PC图形显示子系统主要由3个部件组成:、和一 个ROM BIOS芯片。 12.在交互输入过程中,图形系统中有_____________、、和其组 合形式等几种输入(控制)模式。 13.填充一个特定区域,其属性选择包括、和。 14.计算机中表示带有颜色及形状信息的图和形常用和参数法,其中用参数法描 述的图形称为,用描述的图形称为。 15.在显示技术中,我们常常采用提高总的光强等级。 16.常用的交互式绘图技术有、、和。

秋双学位计算机图形学

2006年秋双学位计算机图形学作业题目 教材计算机图形学(第二版) 第一次P105 3.17 利用中点算法并考虑对称性,推导在区间-10<=x<=10上,对下列曲线进行扫描转换的有效算法:y=(1/12)*x3 3.20 考虑对称性,建立中点算法对形式为y=ax2-b的任意抛物线进行扫描转换,参数a,b及x的范围从输入值获得。 第二次P106 3.34 利用circle函数,编写一个程序,显示具有合适标记的饼图。程序的输入包括:在某些区间上给定数据分布的数据组,饼图的名称和区间的名称。每部分的标记将是显示在饼图边界外靠近对应饼图部分的地方。 第三次10.7 P139 4.20 编写一个程序,使用指定的图案对给定的椭圆内部进行填充。 第四次10.14 P168 5.12 确定对于任何直线y=mx+b的反射变换矩阵的形式。 第四次10.22 比较若干条相对于裁剪窗口的不同方向的线段的Cohen-Sutherland和梁友栋-Barsky裁剪算法的算术运算次数。 第五次10.29 6.18 将梁友栋-Barsky算法改称多边形裁剪算法。 第六次11.4 8.13 设计一个程序,该程序允许用户使用一个笔画设备交互式地画图。 第七次11.11 10.9 建立一个将给定的球、椭球或圆柱体变成多边形网格的一个算法。 第八次11.18 10.20 给出d=5的均匀周期性B-样条曲线的混合函数。 第九次11.25 11.13 设计关于任选平面反射的例程。 第十次 12.8 编写一个将透视投影棱台变换到规则平行六面体的程序。 上机 1.实现Cohen-Sutherland多边形裁剪算法,要求显示多边形被每一条窗口边裁剪后的结果。 2.编写一个程序,允许用户通过一个基本形状菜单并使用一个拾取设备,将每一个选取的 形状拖曳到指定位置,并提供保存和载入的功能。 3.. 写一篇综述性的调研报告,要求不少于3000字,独立完成。内容可以是计算机图形学理论或算法的研究。如:曲线、曲面拟合算法;几何造型方法的研究。如:分形树、分形山、树木、花草、云、瀑布、粒子系统等等。或任何你感兴趣的领域。 4.2006年秋双学位计算机图形学作业参考答案 P105 3.17 利用中点算法并考虑对称性,推导在区间-10<=x<=10上,对下列曲线进行扫描转换的有效算法:y=(1/12)*x3 解答:第一象限和第三象限中心对称

OpenGL编程指南

? ? OpenGL基础图形编程- 总目录 出处:中国游戏开发者 [ 2001-09-20 ] 作者: 总目录 第一章OpenGL与三维图形世界 1.1 OpenGL使人们进入三维图形世界 1.2 OpenGL提供直观的三维图形开发环境 1.3 OpenGL称为目前三维图形开发标准 第二章OpenGL概念建立 2.1 OpenGL基本理解 2.2 OpenGL工作流程 2.3 OpenGL图形操作步骤 第三章Windows NT环境下的OpenGL 3.1 Windows NT下的OpenGL函数 3.2 OpenGL基本功能 3.3 Windows NT下OpenGL结构 第四章OpenGL基本程序结构 第五章OpenGL数据类型和函数名 第六章OpenGL辅助库的基本使用 6.1 辅助库函数分类 6.2 辅助库应用示例 第七章OpenGL建模 7.1 描述图元 7.1.1 齐次坐标

7.1.2 点 7.1.3 线 7.1.4 多边形 7.2 绘制图元 7.2.1 定义顶点 7.2.2 构造几何图元 第八章OpenGL变换 8.1 从三维空间到二维平面 8.1.1 相机模拟 8.1.2 三维图形显示流程 8.1.3 基本变换简单分析 8.2 几何变换 8.2.1 两个矩阵函数解释 8.2.2 平移 8.2.3 旋转 8.2.4 缩放和反射 8.2.5 几何变换举例 8.3 投影变换 8.3.1 正射投影 8.3.2 透视投影 8.4 裁剪变换 8.5 视口变换 8.6 堆栈操作 第九章OpenGL颜色 9.1 计算机颜色 9.1.1 颜色生成原理 9.1.2 RGB色立体 9.2 颜色模式 9.2.1 RGBA模式 9.2.2 颜色表模式 9.2.3 两种模式应用场合 9.3 颜色应用举例 第十章OpenGL光照 10.1 真实感图形基本概念 10.2 光照模型 10.2.1 简单光照模型 10.2.2 OpenGL光组成 10.2.3 创建光源 10.2.4 启动光照 10.3 明暗处理 10.4 材质

计算机图形学 实验 利用OpenGL实现图形的平移、旋转、缩放

XXXXXXXX大学(计算机图形学)实验报告 实验名称利用OpenGL实现图形的平移、旋转、缩放 实验时间年月日 专业姓名学号 预习操作座位号 教师签名总评 一、实验目的: 1.了解OpenGL下简单图形的平移、旋转、缩放变换的编程的基本思想; 2.掌握OpenGL下简单图形的平移、旋转、缩放变换的编程的基本步骤; 二、实验原理: 在OpenGL中,可以使用下面三个函数便捷地实现简单图形平移、旋转、缩放变换的功能: glRotatef(theta, vx, vy, vz); glTranslatef(dx, dy, dz); glScalef(sx,sy,sz); 三、实验内容: // 1.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "glut.h" #include "math.h" void display() { glClear( GL_COLOR_BUFFER_BIT); // Clear the frame buffer glColor3f( 0.0, 1.0, 1.0); // Set current color to green glBegin( GL_POLYGON); // Draw the triangle glV ertex2f( 0.0, -0.2); glV ertex2f( 0.2, 0.0); glV ertex2f( 0.0, 0.0); glEnd(); glFlush(); } void dsp()

安徽中医学院 计算机图形学试卷

安徽中医学院2010~2011学年第二学期《计算机图形学》课程 期末考试试卷 命题教师: 沈同平 试卷编号:H0602 审核人: 王世好 适用专业 计算机科学与技术 考试班级 08医软 考生姓名 学号 班级 一、选择题(每小题1分,共20分) 1.计算机图形学与计算机图像处理的关系是( ) A 、计算机图形学是基础,计算机图像处理是其发展 B 、不同的学科,研究对象和数学基础不同,但它们之间也有可转换部分 C 、同一学科在不同场合的不同称呼而已 D 、完全不同的学科,两者毫不相干 2.下列不属于计算机图形学的应用的是( ) A 、计算机辅助绘图及设计 B 、事务管理中的交互式绘图 C 、科学计算可视化 D 、人工智能 3.下列不属于计算机图形软件国际标准的是( ) A 、GKS B 、PHIGS C 、国标码 D 、 IGES 4.计算机图形显示器一般使用什么颜色模型 ( ) A 、 RG B B 、 CMY C 、 HSV D 、 HLS 5.分辨率为1024×1024的显示器各需要多少字节位平面数为24的帧缓存 ( ) A 、512K B B 、1MB C 、2MB D 、3MB ; 6.触摸屏是( )设备. A 、输入 B 、输出 C 、输入输出 D 、既不是输入也不是输出 7.下述用数值微分法(DDA)画斜率的绝对值小于1的直线的C 语言子程序中哪一 行有错 ( ) Void drawLineWithDDA (int x1, int y1, int x2, int y2, int color) { A 、int x, y; B 、float k = (float)(y2-y1)/(x2-x1); C 、for(x=x1,y=y1;x<=x2;x++) { drawPixel(x,y,color);

计算机图形学第二版课后习题答案

第一章绪论 概念:计算机图形学、图形、图像、点阵法、参数法、 图形的几何要素、非几何要素、数字图像处理; 计算机图形学和计算机视觉的概念及三者之间的关系; 计算机图形系统的功能、计算机图形系统的总体结构。 第二章图形设备 图形输入设备:有哪些。 图形显示设备:CRT的结构、原理和工作方式。 彩色CRT:结构、原理。 随机扫描和光栅扫描的图形显示器的结构和工作原理。 图形显示子系统:分辨率、像素与帧缓存、颜色查找表等基本概念,分辨率的计算 第三章交互式技术 什么是输入模式的问题,有哪几种输入模式。 第四章图形的表示与数据结构 自学,建议至少阅读一遍 第五章基本图形生成算法 概念:点阵字符和矢量字符; 直线和圆的扫描转换算法; 多边形的扫描转换:有效边表算法; 区域填充:4/8连通的边界/泛填充算法;

内外测试:奇偶规则,非零环绕数规则; 反走样:反走样和走样的概念,过取样和区域取样。 5.1.2 中点 Bresenham 算法(P109) 5.1.2 改进 Bresenham 算法(P112) 习题答案

习题5(P144) 5.3 试用中点Bresenham算法画直线段的原理推导斜率为负且大于1的直线段绘制过程(要求写清原理、误差函数、递推公式及最终画图过程)。(P111) 解: k<=-1 |△y|/|△x|>=1 y为最大位移方向 故有 构造判别式: 推导d各种情况的方法(设理想直线与y=yi+1的交点为Q): 所以有: y Q-kx Q-b=0 且y M=y Q d=f(x M-kx M-b-(y Q-kx Q-b)=k(x Q-x M) 所以,当k<0, d>0时,M点在Q点右侧(Q在M左),取左点 P l(x i-1,y i+1)。 d<0时,M点在Q点左侧(Q在M右),取右点 Pr(x i,y i+1)。 d=0时,M点与Q点重合(Q在M点),约定取右点 Pr(x i,y i+1) 。 所以有 递推公式的推导: d2=f(x i-1.5,y i+2) 当d>0时, d2=y i+2-k(x i-1.5)-b 增量为1+k =d1+1+k

_OpenGL入门教程

OpenGL入门教程 1.第一课: 说起编程作图,大概还有很多人想起TC的#include 吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640*480分辨率、16色来做吗?显然是不行的。 本帖的目的是让大家放弃TC的老旧图形接口,让大家接触一些新事物。 OpenGL作为当前主流的图形API之一,它在一些场合具有比DirectX更优越的特性。 1、与C语言紧密结合。 OpenGL命令最初就是用C语言函数来进行描述的,对于学习过C语言的人来讲,OpenGL是容易理解和学习的。如果你曾经接触过TC的graphics.h,你会发现,使用OpenGL作图甚至比TC更加简单。 2、强大的可移植性。 微软的Direct3D虽然也是十分优秀的图形API,但它只用于Windows系统(现在还要加上一个XBOX游戏机)。而OpenGL不仅用于Windows,还可以用于Unix/Linux等其它系统,它甚至在大型计算机、各种专业计算机(如:医疗用显示设备)上都有应用。并且,OpenGL的基本命令都做到了硬件无关,甚至是平台无关。 3、高性能的图形渲染。 OpenGL是一个工业标准,它的技术紧跟时代,现今各个显卡厂家无一不对OpenGL提供强力支持,激烈的竞争中使得OpenGL性能一直领先。 总之,OpenGL是一个很NB的图形软件接口。至于究竟有多NB,去看看DOOM3和QUAKE4等专业游戏就知道了。 OpenGL官方网站(英文) https://www.360docs.net/doc/6f1322909.html, 下面我将对Windows下的OpenGL编程进行简单介绍。 学习OpenGL前的准备工作 第一步,选择一个编译环境 现在Windows系统的主流编译环境有Visual Studio,Broland C++ Builder,Dev-C++等,它们都是支持OpenGL 的。但这里我们选择Visual Studio 2005作为学习OpenGL的环境。 第二步,安装GLUT工具包 GLUT不是OpenGL所必须的,但它会给我们的学习带来一定的方便,推荐安装。 Windows环境下的GLUT下载地址:(大小约为150k) https://www.360docs.net/doc/6f1322909.html,/resources/libraries/glut/glutdlls37beta.zip 无法从以上地址下载的话请使用下面的连接: https://www.360docs.net/doc/6f1322909.html,/upfile/200607311626279.zip Windows环境下安装GLUT的步骤: 1、将下载的压缩包解开,将得到5个文件

计算机图形学试验指导一–OpenGL基础

计算机图形学实验指导(一) –OpenGL基础 1.综述 这次试验的目的主要是使大家初步熟悉OpenGL这一图形系统的用法,编程平台是Visual C++,它对OpenGL提供了完备的支持。 尽管OpenGL包括渲染命令,但却独立于任何窗口系统和操作系统。因此,OpenGL并不包括用来打开窗口以及从键盘或鼠标读取事件的命令。在这里,我们应用GLUT库简化Windows窗口操作。 2.准备GLUT库 下载glut压缩包后,解压,把glut32.dll放在Windows的system32目录下,将glut32.lib 放在C:\program files\Microsoft Visual Studio\VC98\Lib目录中,将glut.h放在C:\program files\Microsoft Visual Studio\VC98\Include\GL目录中 2.在VC中新建项目 新建一个项目。 选择菜单File中的New选项,弹出一个分页的对话框,选中页Projects中的Win32 Console Application项,然后填入你自己的Project name,回车即可。VC为你创建一个工作区(WorkSpace),你的项目就放在这个工作区里。 为项目添加文件 为了使用OpenGL,我们需要在项目中加入相关的Lib文件:glut32.lib 选中菜单Project->Settings项,在link选项卡中的Object/Library modules栏中加入glut32.lib。 选择菜单File中的New选项,弹出一个分页的对话框,选中页Files中的C++sourcefile,填入文件名,钩选添加到刚才建的那个工程里,然后就可以开始编程了。 3.一个OpenGL的例子 #include //初始化OpenGL void init(void) { glClearColor(0.0f, 0.0f, 0.0f, 0.0f);//设置背景颜色 glShadeModel(GL_FLAT);//设置明暗处理 } //主要的绘制过程 void display(void) { glClear(GL_COLOR_BUFFER_BIT);//清除颜色缓存 glBegin(GL_LINES);//开始画直线 glColor3f(1.0f, 1.0f, 1.0f);//设置颜色为白色 glVertex2f(30.0f, 30.0f);//第一根线的两个端点 glVertex2f(200.0f, 400.0f);

计算机图形学期末考试题库

一、单项选择题 1. 计算机图形显示器一般使用什么颜色模型?(B) A)RGB;B) CMY;C) H SV ;D) HLS 2. 哪一个不是国际标准化组织( ISO)批准的图形标准?(D) A)GKS;B) PHIGS;C) C GM ;D) DXF 3.下述用数值微分法(DDA画斜率的绝对值小于1的直线的C语言子程序中哪一行有错? (A) Void drawLineWithDDA(int x1, int y1, int x2, int y2, int color) { A) int x, y; B ) float k = (float)(y2-y1)(x2-x1); C ) for(x=x1,y=y1;x<=x2;x++) { drawPixel(x,y,color); } D ) y+=k; } } 4. 下述绕坐标原点旋转a 角的坐标变换矩阵中哪一项是错误的?(B) | A B | | C D | A) cos a; B)sin a; C)sin a; D)cos a 5. 下述哪一条边不是非均匀有理B样条(NURBS的优点?(D) B)对于间距不等的数据点,用NURBS以合的曲线比用均匀B样条拟合的曲线更光滑 C)NURB醍供的权控制方法比用控制点更能有效的控制曲线的形状 D)使用NURB呦以提高对曲面的显示效率 A) NURBSL均匀B样条能表示更多的曲面

6. 透视投影中主灭点最多可以有几个?(D) A)0; B)1; C)2; D)3 7. 在用扫描线法进行点与多边形之间的包含性检测时,下述哪一个操作不正确?(D) A)当射线与多边形交于某顶点时且该点的两个邻边在射线的一侧时,计数0次 B)当射线与多边形交于某顶点时且该点的两个邻边在射线的一侧时,计数2次 C)当射线与多边形交于某顶点时且该点的两个邻边在射线的两侧时,计数1次 D)当射线与多边形的某边重合时,计数1次 &在简单光反射模型中,由物体表面上点反射到视点的光强下述哪几项之和?(C)(1)环境光的反射光强;(2)理想漫反射光强;(3)镜面反射光强;(4)物体间的反射光强。 A(1)和(2) B)(1)和(3) C)(1)(2)和(3) D)(1)(2 )(3 )和(4 ) 9. 下面关于NURBS的论述,哪个是错误的? ( B) A. 可通过控制顶点和权因子来改变形状; B. 仅具有仿射不变性,但不具有透射不变性; C. 非有理B样条、有理及非有理Bezier曲线、曲面是NURBS的特例; D. 可表示标准解析形状和自由曲线、曲面; 10. 下述关于Bezier 曲线P1(t), P2(t)t [0,1]的论述,哪个是错误的?() A. P1(1)= P2(0) = P,在P处P1(1), P2(0)的切矢量方向相同,大小相等, 则 P1(t), P2(t)在P处具有G1连续;

计算机图形学基础教程习题课1(第二版)(孙家广-胡事民编著)

1.列举计算机图形学的主要研究内容。 计算机中图形的表示方法、图形的计算、图形的处理和图形的显示。 图形硬件、图形标准、图形交互技术、光栅图形生成算法、曲线曲面造型、实体造型、真实感图形计算与显示算法,以及科学计算可视化、计算机动画、自然景物仿真、虚拟现实等。 2.常用的图形输出设备是什么? 显示器(CRT、LCD、等离子)、打印机、绘图仪等。 2.常用的图形输入设备是什么? 键盘、鼠标、跟踪球、空间球、数据手套、光笔、触摸屏、扫描仪等。 3.列出3种图形软件工具。 AutoCAD、SolidWorks、UG、ProEngineer、CorelDraw、Photoshop、PaintShop、Visio、3DMAX、MAYA、Alias、Softimage等。 错误:CAD 4.写出|k|>1的直线Bresenham画线算法。 d d d d 设直线方程为:y=kx+b,即x=(y-b)/k,有x i+1=x i+(y i+1-y i)/k=x i+1/k,其中k=dy/dx。因为直线的起始点在象素中心,所以误差项d的初值d0=0。y下标每增加1,d的值相应递增1/k,即d=d+1/k。一旦d≥1,就把它减去1,这样保证d在0、1之间。 ●当d≥0.5时,最接近于当前象素的右上方象素(xi+1,y i+1),x方向加1,d减 去1; ●而当d<0.5时,更接近于上方象素(x i,yi+1)。

为方便计算,令e=d-0.5,e的初值为-0.5,增量为1/k。 ●当e≥0时,取当前象素(x i,y i)的右上方象素(xi+1,y i+1),e减小1; ●而当e<0时,更接近于上方象素(xi,yi+1)。 voidBresenhamline (int x0,int y0,intx1, inty1,int color) { int x,y,dx,dy; float k,e; dx= x1-x0, dy = y1-y0,k=dy/dx; e=-0.5, x=x0, y=y0; for (i=0; i≤dy; i++) {drawpixel(x, y,color); y=y+1,e=e+1/k; if (e≥0) { x++, e=e-1;} } } 4.写出|k|>1的直线中点画线算法。 构造判别式:d=F(M)=F(xp+0.5,y p+1)=a(x p+0.5)+b(yp+1)+c ●当d<0,M在Q点左侧,取右上方P2为下一个象素; ●当d>0,M在Q点右侧,取上方P1为下一个象素; ●当d=0,选P1或P2均可,约定取P1为下一个象素;

06-OpenGL字体显示

OpenGL 字体显示 在OpenGL中,提供了预定义的字库,可以满足一般的需求,用户也可以自定义字库,OpenGL红宝书中有自定义字库的详细过程。OpenGL预定义字库中提供了位图字符和矢量字符两种显示方式 V oid glutBitmapCharacter(void *font,int character); //位图字符 其中font是GLUT常量,指定点阵字库,如: GLUT_BITMAP_8_BY_13,GLUT_BITMAP_9_BY_15, V oid glutStrokeCharacter(void *font,int character); //矢量字符 Font 的取值有glut_stroke_roman 等间距Roman Simplex 字体,glut_stroke_mono_roman 单一间距Roman Simplex 字体。 本例演示了矢量字符的两种间距以及24磅位图字符的显示。 显示效果: 代码: #include #include #include int width = 200,height = 100; void init(){ glClearColor(0,0,0,0); } void Reshape(int w,int h){ width=w; height=h; glViewport(0,0,w,h); glMatrixMode(GL_PROJECTION); glLoadIdentity();

gluOrtho2D(0.0,width,0.0,height); } void display(){ glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0f,1.0f,0.0f); glLineWidth(2.0); //设置笔画的大小 glTranslatef(0,250,0); //设置字符显示的位置,否则贴底显示不能完全显示部分字符 glutStrokeCharacter(GLUT_STROKE_ROMAN,79); //输出字体为 GLUT_STROKE_ROMAN的OpenGL,从大写O开始,ASSCI码为79 glutStrokeCharacter(GLUT_STROKE_ROMAN,112); glutStrokeCharacter(GLUT_STROKE_ROMAN,101); glutStrokeCharacter(GLUT_STROKE_ROMAN,110); glutStrokeCharacter(GLUT_STROKE_ROMAN,71); glutStrokeCharacter(GLUT_STROKE_ROMAN,76); glTranslatef(-460,-150,0); //调整下一行显示的位置 glutStrokeCharacter(GLUT_STROKE_MONO_ROMAN,79); //输出字体为 GLUT_STROKE_MONO_ROMAN的OpenGL,从大写O开始,ASSCI码为79 glutStrokeCharacter(GLUT_STROKE_MONO_ROMAN,112); glutStrokeCharacter(GLUT_STROKE_MONO_ROMAN,101); glutStrokeCharacter(GLUT_STROKE_MONO_ROMAN,110); glutStrokeCharacter(GLUT_STROKE_MONO_ROMAN,71); glutStrokeCharacter(GLUT_STROKE_MONO_ROMAN,76); glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24,'O'); //显示24磅的times Roman 点阵字体 glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24,'p'); glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24,'e'); glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24,'n'); glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24,'G'); glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24,'L'); glutSwapBuffers(); } int main(int argc, char* argv[]) { glutInit(&argc,argv); glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGB ); glutInitWindowSize( 650, 400 ); glutInitWindowPosition( 100,100 ); glutCreateWindow("show OpenGL"); //′°?ú???a"rectangle" init(); glutDisplayFunc(display); glutReshapeFunc(Reshape);

计算机图形学期末考试试卷

计算机图形学期末考试试卷(C卷) 一、判断题(本大题共 10 小题,每小题 1 分,共 10 分) 1.计算机图形生成的基本单位是线段。 ( F ) 2.构成图形的要素除了点、线、面、体等几何要素外,还应该包括 灰度、色彩、线型、线宽等非几何要素。 ( N ) 3.在齐次坐标系中,若用矩阵来表示各种运算,则比例和旋转变换 是矩阵F乘法运算,而平移变换是矩阵加法运算。 ( F ) 4.Z-Buffer消隐算法有利于硬件实现,并且不需要排序。 ( N ) 5.二次Bezier曲线和二次B样条曲线都通过控制多边形的首末端 点。 ( F ) 6.一个向量的齐次坐标的表示形式是唯一的。 ( F ) 7.计算机图形技术是随着图形硬件设备的发展而发展起来的。 ( N ) 8.Phong算法的计算量要比Gouraud算法小得多。

( F ) 9. 将某二维图形整体放大2倍,其变换矩阵可写为。 ( F ) 10. 图形软件标准是为提高图形软件的易用性而提出的。 ( F ) 二、填空题(本大题共 10 空,每空 1 分, 共 10 分) 1. 在多边形填充过程中,常采用、 左闭右开 和 下闭上开 的原则对边界像素进行处理。 2. 基本几何变换指 平移 、 比例 和 旋转 三种变换。 3. 屏幕上最小的发光单元叫作 像素 ,它的多少叫做 分辨率 。 ??????????200010001

4.ISO批准的第一个图形软件标准是GKS ,进入20 世纪90年代后,存在的事实上的图形软件标准主要是 OpenGL 和Direct x。 5.图形的表示方法有两种:参数法和点阵 法。 6.多边形的表示方法有顶点表示法和点阵表 示法两种。 7.计算机三维模型的描述有线框模型、表面模 型和实体模型。 8.颜色包含3个要素:色调、饱和度和 亮度。 三、简答题(本大题共 5 小题,每小题 5 分,共 25 分) 1.计算机图形学研究的主要内容是什么 2.什么是齐次坐标齐次空间点 P(X、Y、W) 对应的笛卡尔坐标

OpenGL进行文字显示的方法

任何一个DEMO、仿真项目、游戏,都少不了文字这种媒体。这不可不说是对图形视觉媒体的补充——我们还有一些无法超越文字来向观众表达的心事,或是补充说明,或是感悟,或是感激。——https://www.360docs.net/doc/6f1322909.html, 一般的文字不属于图形渲染部分,而属于用户界面部分,这在游戏引擎中看或许一目了然,但是在底层的图形渲染API——OPENGL或D3D中,文字的显示“并不是必须”,但它是多么深深地被需要着口牙。所以,把字体设置、文字显示作为一种图形学技术而非单纯的完全我属或他属,我是这么想的。(同样,拾取也算是这样吧?[乱弹OpenGL选择-拾取机制Ⅰ]) 本文来源于ZwqXin(https://www.360docs.net/doc/6f1322909.html,/), 转载请注明 原文地址:https://www.360docs.net/doc/6f1322909.html,/archives/opengl/opengl-font-setting-showing.html 怎么表达文字呢?在OpenGL中,我们没有什么现成的东西可用,但确实有办法让我们“得到这种技术”。让我最记忆深刻的是NEHE的两三篇教程(貌似都是十几课吧),讲述的就是今天的这个主题。可以到NEHE网站或者在DANCINGWIND的中文翻译(见[搜集的优良OpenG L教程] )看看~。 而我所知道的这三种方法,前两种应该就是来自那里吧(记得~~),当时要努力完成课程DEMO,于是胡胡混混地就把相应的那两三课学了,而且把它的文字显示方法应用到自己的程序中(还经历了一段艰辛的探索史...连我当时的MyFont类也记录了这份小辛酸,现在看来,是因为当时的知识水平不够理解吧)。然后后来又一个课程DEMO,老师后来觉得我应该“写中文”,于是我又去探索中文字体显示方法了,并在一个开源DEMO中找到,分析代码段后就拿来主义了,至昨不曾好好考究——这就是我所知的第三种方法。 三种方法都是三步曲:在初始化的时候“创建字体”[Build],在渲染阶段“应用字体”(显示文字)[Print],在程序结束或不再需要文字显示的时候“销毁字体”[kill]。其中前两步比较重要,着重讨论讨论哈~ 1. 常规的屏幕字体打印(NormalFont) 应用得比较广,大名鼎鼎的AZURE以前的DEMO就是用这个的。NEHE教程中作为首次出现的字体显示方法,介绍应该比较全面,大家想仔细了解的话请务必从上面网址进入学习(当然还有因为我理解不透不敢乱讲的缘由)。 1. /////////一般的英语字体打印 2.void MyFont::BuildGLFont(int fontHeight) 3.{ 4. HDC hDC =::GetDC(HWND_DESKTOP); //////就是这里搞晕了半晚 5. 6. int tFontHeight = -1 * fontHeight; 7. 8. NormalFontBase = glGenLists(96); // Storage For 96 Characters 9. HFONT font = CreateFont( -tFontHeight, // Height Of Font 10. 0, // Width Of Font 11. 0, // Angle Of Escapement 12. 0, // Orientation Angle 13. FW_BOLD, // Font Weight 14. TRUE, // Italic 15. FALSE, // Underline

最新计算机图形学期末考试试卷

最新计算机图形学期末考试试卷 一、判断题(本大题共 10 小题,每小题 1 分,共 10 分) 1. 计算机图形生成的基本单位是线段. ( F ) 2. 构成图形的要素除了点、线、面、体等几何要素外,还应该包括灰度、色彩、线型、 线宽等非几何要素. ( N ) 3. 在齐次坐标系中,若用矩阵来表示各种运算,则比例和旋转变换是矩阵F 乘法运算, 而平移变换是矩阵加法运算. ( F ) 4. Z-Buffer 消隐算法有利于硬件实现,并且不需要排序. ( N ) 5. 二次Bezier 曲线和二次B 样条曲线都通过控制多边形的首末端点. ( F ) 6. 一个向量的齐次坐标的表示形式是唯一的. ( F ) 7. 计算机图形技术是随着图形硬件设备的发展而发展起来的. ( N ) 8. Phong 算法的计算量要比Gouraud 算法小得多. ( F ) 9. 将某二维图形整体放大2倍,其变换矩阵可写为. ( F ) 10. 图形软件标准是为提高图形软件的易用性而提出的. ( F ) 二、填空题(本大题共 10 空,每空 1 分,共 10 分) 1. 在多边形填充过程中,常采用、 左闭右开 和 下闭上开 的原则 对边界像素进行处理. 2. 基本几何变换指 平移 、 比例 和 旋转 三种变换. 3. 屏幕上最小的发光单元叫作 像素 ,它的多少叫做 分辨率 . 4. ISO 批准的第一个图形软件标准是 GKS ,进入20世纪90年代后,存 在的事实上的图形软件标准主要是 OpenGL 和 Direct x . ?? ?? ? ?????200010001

5.图形的表示方法有两种:参数法和点阵法. 6.多边形的表示方法有顶点表示法和点阵表示法两种. 7.计算机三维模型的描述有线框模型、表面模型和实体 模型. 8.颜色包含3个要素:色调、饱和度和亮度 . 三、简答题(本大题共5 小题,每小题5 分,共25 分) 1.计算机图形学研究的主要内容是什么? 2.什么是齐次坐标?齐次空间点 P(X、Y、W) 对应的笛卡尔坐标是什么? 3.帧缓存的容量与什么有关?假定一个光栅扫描系统,分辨率800×600,要求可显示颜色256种,请问帧缓存的容量需要多少字节? 4.什么是走样?什么是反走样?常用的反走样技术有哪些? 5.简单光照模型的反射光由哪几部分组成,光照计算时有哪两种明暗处理技术?

相关文档
最新文档