当前位置:文档之家› OpenGL 球面相机旋转算法

OpenGL 球面相机旋转算法

OpenGL 球面相机旋转算法
OpenGL 球面相机旋转算法

旋转作为三维开发的基本功能,在任何3D程序中都需要。用户通过旋转来实现对模型各个面的浏览,形成直观印象。

球面相机旋转

这种旋转方式用户体验方式要优于x轴y轴混合旋转方式,模型旋转的方向和鼠标移动方向保持一致。

下面给出一种“球面相机”实现旋转的方法。

原理:

移动鼠标时,通过gluLookAt来改变视点的位置(采用增量的方式),而模型保持不动。即:只进行视点变换,不进行模型变换。

下图是用户按下左键,在屏幕上移动的一段距离(从A移动到B)。

由于屏幕坐标y轴向下,为了与投影平面坐标系(传统笛卡尔坐标)保持一致。

AM = y1-y2; /*将消息代码描述*/

BM = x2-x1;

建立屏幕和投影变换近裁截面之间的对应关系(如下图)。

代码实现:

1 void setSphereCameraPos()

2 {

3 // 左键未按下,直接返回

4 if (!is_left_button_down)

5 return;

6

7 // 从聚焦点指向视点的向量 OA向量

8 vector3dd a(eye-target);

9

10 // 计算球面相机半径

11 radius = a.getLength();

12

13 // 将其单位化

14 a.normailize();

15

16 // 当前相机向上方向与a做叉乘,计算投影面水平向右方向向量u

17 vector3dd u = upvector.crossProduct(a);

18 // 将其单位化

19 u.normailize();

20

21 // 计算相机向上方向在投影面上的投影向量即垂直向上的方向向量v

22 vector3dd v = a.crossProduct(u);

23 // 将其单位化

24 v.normailize();

25

26 // 计算屏幕AB在投影面上对应的向量 AB向量

27 vector3dd m = u*delta_point.x + v*delta_point.y;

28

29 // 计算m向量的长度

30 double len = m.getLength();

31 // 降低灵敏度

32 len /= 20.0;

33

34 if (len>0.0)

35 {

36 // 角度AOB 弧度表示弧长/半径

37 double x = len/radius;

38 // 将AB向量单位化

39 m.normailize();

40

41 // 按相反方向转动视点到C 从而使得按与鼠标移动一致的方向转动模型

42 x = -1*x;

43 // 计算新的相机位置 C

44 eye = target+(a*cos(x) + m*sin(x))*radius;

45

46 // 计算新的相机向上方向

47 upvector = v;

48 }

49 }

消息代码

1 LRESULT CALLBACK WndProc( HWND hWnd, // Handle For This Window

2 UINT uMsg, // Message For This Window

3 WPARAM wParam, // Additional Message Information

4 LPARAM lParam) // Additional Message Information

5 {

6 switch (uMsg) // Check

For Windows Messages

7 {

8 case WM_LBUTTONDOWN:

9 {

10 is_left_button_down = true;

11 pre_point.x = LOWORD(lParam);

12 pre_point.y = HIWORD(lParam);

13

14 return 0;

15 }

16

17 case WM_MOUSEMOVE:

18 {

19 if (is_left_button_down)

20 {

21 cur_pt.x = LOWORD(lParam);

22 cur_pt.y = HIWORD(lParam);

// delta_point为增量点

23 delta_point.x = cur_pt.x-pre_point.x); // 保持屏幕坐标系和投影平面坐标系一致

24 delta_point.y = -1*(cur_pt.y-pre_point.y); // 将当前点赋值给前一个点

25 pre_point = cur_pt;

26

// 计算相机新的位置

27 setSphereCameraPos();

28 }

29

30 return 0;

31 }

32

33 case WM_LBUTTONUP:

34 {

35 is_left_button_down = false;

36 return 0;

37 }

38 }

39

40 // Pass All Unhandled Messages To DefWindowProc

41 return DefWindowProc(hWnd,uMsg,wParam,lParam);

42 }

43

vector3dd类

vector3dd

1 class vector3dd

2 {

3 private:

4 double x,y,z;

5

6 public:

7 vector3dd(){};

8 vector3dd(double a, double b, double c){x=a;y=b;z=c;}

9 vector3dd(const vector3dd& v){*this=v;}

10

11 public:

12 void operator=(const vector3dd& v){x=v.x;y=v.y;z=v.z;}

13 vector3dd operator*(double a)

14 {

15 return vector3dd(a*x,a*y,a*z);

16 }

17 vector3dd operator+(const vector3dd& v)

18 {

19 return vector3dd(x+v.x,y+v.y,z+v.z);

20 }

21 vector3dd operator-(const vector3dd& v)

22 {

23 return vector3dd(x-v.x,y-v.y,z-v.z);

24 }

25

26 public:

27 double getX(){return x;}

28 double getY(){return y;}

29 double getZ(){return z;}

30

31 void setValue(double a, double b, double c)

32 {

33 x = a;

34 y = b;

35 z = c;

36 }

37

38 double getLength()

39 {

40 return sqrt(x*x+y*y+z*z);

41 }

42

43 void normailize()

44 {

45 double length = getLength();

46 x/=length;

47 y/=length;

48 z/=length;

49 }

50

51 void invert()

52 {

53 x*=-1;

54 y*=-1;

55 z*=-1;

56 }

57

58 vector3dd crossProduct(const vector3dd& v)

59 {

60 return vector3dd(y*v.z-z*v.y,z*v.x-x*v.z,x*v.y-y*v.x);

61 }

62

63 double dotProduct(const vector3dd& v)

64 {

65 return (x*v.x+y*v.y+z*v.z);

66 }

67

68 void traceMsg()

69 {

70 fprintf(stdout, "%.7f, %.7f, %.7f\n", x, y, z);

71 }

72 };

效果图:

计算机图形学 实验 利用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()

MHDD使用方法以及图文教程

MHDD使用方法以及图文教程(附带MHDD4.6光盘版和DOS版下载) MHDD软件简介 MHDD 是一款由俄罗斯人所开发的免费硬盘实体扫描维护程序,比起一般的硬盘表层扫描,MHDD 有相当令人激赏的扫描速度,让使用者不再需要花费数个小时来除错,只需几十分钟,一颗 80G 大小的硬盘就可以扫瞄完成,且 MHDD 还能够帮使用者修复坏轨,让使用者能够继续延续该硬盘的生命余光。此外, MHDD 还能够对硬盘进行低阶清除的动作,让想要卖掉硬盘的你不必担心硬盘中的数据被接手的买家回复盗用的困扰喔!官方所提供的 MHDD 可分为磁盘版与光盘版两种,如果使用者需要光盘版的话,要用刻录机烧录成光盘后使用。 简洁教程:(MHDD详细图文教程地址 https://www.doczj.com/doc/8a15520669.html,/thread-1161-1-1.html) 1、进入MHDD后,按shift+F3扫描端口上的硬盘,制作的这个光盘版启动后自动扫描硬盘; 2、选择要检测硬盘的对应序号并回车; 3、按一下F4进入扫描设置,再按一下F4开始扫描。默认的只是扫描不修复. 4、扫描完毕之后,在/MHDD/LOG下有个MHDD.LOG,是扫描生成的日志文件。在光盘里,已经集成https://www.doczj.com/doc/8a15520669.html,在/MHDD目录里面,可以输入EDIT打开文本编辑器,然后定位到/MHDD/LOG/MHDD.LOG,查看扫描结果,并采取下一步措施; 5、如果在按下F4没有反应的时候,可以从新光盘启动,运行一次/MHDD目录下的FBDISK,按ESC退出返回到DOS再输入MHDD,启动MHDD 4.6,这时候MHDD就能正常扫描了,这应该是软件的一个BUG; 6、在MHDD里输入man en all可以查看详细的帮助,输入help只是简短的帮助。《MHDD》工具使用详解与命令解释 1、MHDD是俄罗斯Maysoft公司出品的专业硬盘工具软件,具有很多其他硬盘工具软件所无法比拟的强大功能。 2、MHDD无论以CHS还是以LBA模式,都可以访问到128G的超大容量硬盘(可访问的扇区范围从512到137438953472),即使你用的是286电脑,无需BIOS支持,也无需任何中断支持; 3、MHDD最好在纯DOS环境下运行;中国硬盘基地网 https://www.doczj.com/doc/8a15520669.html, 4、MHDD可以不依赖于主板BIOS直接访问IDE口,但要注意不要使用原装Intel品牌主板; 5、不要在要检测的硬盘中运行MHDD;中国硬盘基地网 https://www.doczj.com/doc/8a15520669.html, 6、MDD在运行时需要记录数据,因此不能在被写保护了的存储设备中运行(比如写保护的软盘、光盘等); MHDD命令详解 EXIT(热键Alt+X):退出到DOS。 ID:硬盘检测,包括硬盘容量、磁头数、扇区数、SN序列号、Firmware固件版本号、LBA 数值、支持的DMA级别、是否支持HPA、是否支持AAM、SMART开关状态、安全模式级别及

使用OpenGL画球体

(计算机图形学)实验报告 实验名称使用OpenGL画球体 实验时间年月日 专业班级学号姓名 成绩教师评语: 一、实验目的 1、了解并学习open GL的编程; 2、掌握在open GL生成图形的基本思想和基本步骤; 3、使用open GL具体生成简单的三维立体图形; 二、实验原理 简单的说,该实验就是使用数学函数与OpenGL库中的函数实现图形的生成,比如生成球的函数为x=sin(thetar)*cos(phir); y=cos(thetar)*cos(phir); z=sin(phir); 之后在对thetar的值进行定义,使其在某一范围内变化。然后面的集合就生成了我们所需要的球体,但是该实验没有进行光照和材质的设定,所以看起来并不像一个立体的球体形状。其间还需要对OpenGL的编程原理和其所包含的库比较了解。 OpenGL核心库:Windows: OpenGL32。大多数Unix/Linux系统:GL库(libGL.a) OpenGL实用库(Utility Library, GLU):利用OpenGL核心库提供一些功能,从而避免重复编写代码,与窗口系统的连接 OpenGL实用工具库(OpenGL Utility ToolkitLibrary, GLUT),提供所有窗口系统的共同功能,打开窗口,从鼠标和键盘获取输入,弹出菜单,事件驱动。代码可以在平台间移植,但是GLUT缺乏在特定平台上优秀工具包所具有的功能滚动条。 函数的功能glVertex3f(x, y, z),属于GL库参数个数,x, y, z为float。在glVertex3fv(p)中注意每部分的大小写,p为指向float的指针。 绝大多数常数采用#define在头文件gl.h, glu.h和glut.h中定义。注意#include 会自动包含其它两个头文件。例如:glBegin(GL_POLYGON);glClear(GL_COLOR_BUFFER_BIT);在头文件中也定义了OpenGL数据类型:GLfloat, GLdouble, … 关于最初建立文件的步骤 创建一个win32 console application类型的workspace文件,创建一个C/C++

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

洛阳理工学院实验报告用纸

(2)画理想圆流程图如图-1: 图-1:画理想圆流程图 (3)中点画圆法 图-2 中点画圆法当前象素与下一象素的候选者

数,将乘法运算改成加法运算,即仅用整数实现中点画圆法。 (4)Bresenham画圆法 Bresenham画线法与中点画线法相似,,它通过每列象素中确定与理想直线最近的象素来进行直线的扫描的转换的。通过各行,各列的象素中心构造一组虚拟网格线的交点,然后确定该列象素中与此交点最近的的象素。该算法的巧妙之处在于可以采用增量计算,使得对于每一列,只要检查一个误差项的符号,就可以确定该列的所求对象。 假设x列的象素已确定,其行下标为y。那么下一个象素的列坐标必为x+1。而行坐标要么不变,要么递增1。是否递增1取决于如图所示的误差项d的值。因为直线的起始点在象素中心,所以误差项d的初始值为0。X下标每增加1,d的值相应递增直线的斜率值,即d=d+k(k=y/x为直线斜率)。一旦d>=1时,就把它减去,这样保证d始终在0、1之间。当d>0.5时,直线与x+1垂直网络线交点最接近于当前象素(x,y)的右上方象素(x+1,y+1);而当d<0.5时,更接近于象素(x+1,y),当d=0。5时,与上述二象素一样接近,约定取(x+1,y+1)。令e=d-0。5。则当e>=0时,下一象素的y下标增加1,而当e〈0时,下一象素的y下标不增。E的初始值为-0.5. (二)实验设计 画填充点流程图,如图-3: 图-3:圆的像素填充过程NS图 画理想圆,记录圆心坐标,计算半径大小,并记录 是否开始填充 否 是 初始化计数器、标志变量,设置最大计数值 调用Bresenha m画圆算法 否 是 填充标记是否为真 (While)计数变量小于最大计数值 循环变量temp + 1 填充计算出来的temp个坐 标点 计算需要填充坐标数组的 前temp个坐标

基于OpenGL的3D旋转魔方实现汇总

华中科技大学电子科学与技术系 课程设计报告 ( 2010-- 2011年度第 2 学期) 名称:软件课程设计 题目:基于OpenGL的3D旋转魔方实现 院系: 班级: 学号: 学生姓名: 指导教师: 设计周数: 成绩: 日期:年月日

目录 1.课程设计介绍............................................................................................ (2) 1.1目的.............................................................................................................. (2) 1.2内容.............................................................................................................. (2) 1.3取得的成果 (2) 2.程序分析..................................................................................................... (3) 2.1 程序原理 (3) 2.2 程序流程 (4) 2.3 数据结构 (13) 2.4 重要函数 (13) 3.程序分析与结果演示 (16) 3.1 成果演示 (16) 3.2 程序分析 (17) 4.出现过的问题 (18) 5.心得和小节 (19)

GHOST使用教程(图解

GHOST使用教程(图解)人人都可“拥有”4GHz的CPU **** 本内容跟帖回复才可浏览***** 河北的刘宗元朋友打电话告诉董师傅,他在查看朋友电脑的系统属性时,发现系统属性里显示这台电脑采用的是Intel的4GHz的P4 CPU(图1)。他很是好奇,要知道去年因4GHz P4 CPU难产,Intel的首席执行官贝瑞特曾当众下跪祈求原谅。 董师傅自然也不相信Intel真的出了4GHz的P4 CPU,不过对这个显示结果还是非常感兴趣,经过一番摸索,发现只要略施小计,我们每一个人都可以“拥有”4GHz的P4 CPU。你也想有这样一颗“心”?别着急,且听师傅慢慢道来。 都是sysdm.cpl文件“惹的祸” 知道了问题的关键,下面要做的就是修改信息了。 首先将C:WindowsSystem32文件夹下的sysdm.cpl文件复制一份出来,然后用资源编辑工具EXESCOPE打开复制出的sysdm.cpl文件,展开“资源→对话框→101”分支。在右侧一共有9个“Link Window”。除了第4、5个外,把另外七个的“可见”属性去掉(即去掉右侧“可见”前的钩),目的是在检测系统属性时只显示第4、5个的内容。 选中第4个“Link window”,在“标题”栏输入文字“Intel(R) Pentium4(R)处理器”;在第5个“Link window”的“标题”栏中输入“4 GHz,2048 MB 的内存”等信息(连内存信息也一并改了。数字可随意输入,但不可过长,否则显示效果较别扭);再将第4个“Link window”的“Y”坐标值改为“149”,将第5个的调整为“170”,以占据原来第1、2个“Link Window”的位置。 修改好后保存该文件,接下来只要用该文件替换原始文件即可。不过,在替换过程中,董师傅又遇到了一个新问题: 文件保护功能会“作祟” 董师傅使用的是Windows XP+SP2系统,要把修改后的sysdm.cpl文件复制到C:WindowsSystem32中替换原文件有些麻烦——SP2强大的文件保护功能会自动还原原始文件。 师傅我并不想禁用文件保护功能,所以借助文件替换工具Replacer解决了这个问题。 将下载回来的文件解压到任一文件夹,双击“replace.cmd”出现命令提示符窗口,将 C:WindowsSystem32sysdm.cpl文件拖到其中,回车;再将修改过的sysdm.cpl文件拖入其中并回车,输入“Y”后按回车,这样就能替换掉系统文件了(在弹出的Windows文件保护时请点“取消”)。 至此,董师傅所想要的4GHz的P4 CPU终于“出现”!心动了吧?那就赶快动手吧。 以上软件下面有得下载 资源编辑工具EXESCOPE 文件替换工具Replacer 一、什么是Ghost? Ghost(幽灵)软件是美国赛门铁克公司推出的一款出色的硬盘备份还原工具,可以实现FAT16、FAT32、NTFS、OS2等多种硬盘分区格式的分区及硬盘的备份还原。俗称克隆软件。 1、特点:既然称之为克隆软件,说明其Ghost的备份还原是以硬盘的扇区为单位进行的,也就是说可以将一个硬盘上的物理信息完整复制,而不仅仅是数据的简单复制;克隆人只能克隆躯体,但这个Ghost却能克隆系统中所有的东东,包

Bresenham的直线生成算法和整圆生成算法完整代码

以下是Bresenham的直线生成算法和整圆生成算法,已调试过,没有任何问题。Bresenham直线生成算法 #include "stdio.h" #include "graphics.h" Bresenham_line(x0,y0,x1,y1,color) int x0,y0,x1,y1,color; { int x,y,dx,dy, i; float k,e; dx=x1-x0;dy=y1-y0; k=(dy*1.0)/dx; e=-0.5; x=x0; y=y0; for (x=x0; x<=x1; x++) { putpixel(x,y,color); e=e+k; if(e>=0) { y++;e=e-1;} } } int main() { int x0,y0,x1,y1,c; int driver=DETECT,mode=0; initgraph(&driver,&mode,"c:\\tc"); setbkcolor(BLUE); setcolor(YELLOW); printf("input x0,y0,x1,y1,c"); scanf("%d%d%d%d%d",&x0,&y0,&x1,&y1,&c); Bresenham_line(x0,y0,x1,y1,c); getch(); closegraph(); } 当取e=2*dy-dx时,可以消除浮点和除法运算 #include "stdio.h" #include "graphics.h" Bresenham_line(x0,y0,x1,y1,color)

int x0,y0,x1,y1,color; { int x,y,dx,dy, i,e; float k; dx=x1-x0;dy=y1-y0; k=(dy*1.0)/dx; e=2*dy-dx; x=x0; y=y0; for (x=x0; x<=x1; x++) { putpixel(x,y,color); e=e+2*dy; if(e>=0) { y++;e=e-2*dx;} } } int main() { int x0,y0,x1,y1,c; int driver=DETECT,mode=0; initgraph(&driver,&mode,"c:\\tc"); setbkcolor(BLUE); setcolor(YELLOW); printf("input x0,y0,x1,y1,c"); scanf("%d%d%d%d%d",&x0,&y0,&x1,&y1,&c); Bresenham_line(x0,y0,x1,y1,c); getch(); closegraph(); }

sniffer使用及图解教程

sniffer使用及图解 注:sniffer使用及图解sniffer pro 汉化注册版下载 黑白影院高清免费在线电影聚集网无聚集无生活,聚集网络经典资源下载 sniffer软件的安装还是比较简单的,我们只需要按照常规安装方法进行即可。需要说明的是: 在选择sniffer pro的安装目录时,默认是安装在c:\program files\nai\snifferNT目录中,我们可以通过旁边的Browse按钮修改路径,不过为了更好的使用还是建议各位用默认路径进行安装。 在注册用户时,随便输入注册信息即可,不过EMAIL一定要符合规范,需要带“@”。(如图1) 图1 点击放大 注册诸多数据后我们就来到设置网络连接状况了,一般对于企业用户只要不是通过“代理服务器”上网的都可以选择第一项——direct connection to the internet。(如图2) 图2 接下来才是真正的复制sniffer pro必需文件到本地硬盘,完成所有操作后出现setup complete提示,我们点finish按钮完成安装工作。 由于我们在使用sniffer pro时需要将网卡的监听模式切换为混杂,所以不重新启动计算机是无法实现切换功能的,因此在安装的最后,软件会提示重新启动计算机,我们按照提示操作即可。(如图3) 重新启动计算机后我们可以通过sniffer pro来监测网络中的数据包。我们通过“开始->所有程序->sniffer pro->sniffer”来启动该程序。 第一步:默认情况下sniffer pro会自动选择你的网卡进行监听,不过如果不能自动选择或者本地计算机有多个网卡的话,就需要我们手工指定网卡了。方法是通过软件的file菜单下的select settings来完成。 第二步:在settings窗口中我们选择准备监听的那块网卡,记得要把右下角的“LOG ON”前打上对勾才能生效,最后点“确定”按钮即可。(如图4) 图4 第三步:选择完毕后我们就进入了网卡监听模式,这种模式下将监视本机网卡流量和错误数据包的情况。首先我们能看到的是三个类似汽车仪表的图象,从左到右依次为“Utiliz ation%网络使用率”,“Packets/s 数据包传输率”,“Error/s错误数据情况”。其中红色区域是警戒区域,如果发现有指针到了红色区域我们就该引起一定的重视了,说明网络线路不好或者网络使用压力负荷太大。一般我们浏览网页的情况和我图11中显示的类似,使用率不高,传输情况也是9到30个数据包每秒,错误数基本没有。(如图5) 图5

(完整版)电脑简单使用说明书初学电脑实用教程

认知电脑 电脑的主要设备包括: 显示器 显示器开关,用来打开显示器,通常显示器打开状态下为开关指示灯(位于显示器开关旁边或显示器后方)亮着,显示器关闭状态开关指示灯则为熄灭。 电 脑 显示器 音箱 键盘 鼠标 主机 输出设备 输入设备 显示器开关

主机开关 主机重启开关 电脑主机如上图示主要有2个开关按钮,主机开关(通常为个头较大位于上方的开关按钮)用于作为电脑主机的开关,主机重启按钮(通常为个头较小位于较下方的开关按钮)用于作为电脑出现死机故障无法正常关机或重启的开关按钮,通常也叫短路开关。 键盘 键盘,电脑的重要输入设备之一,用于信息和操作录入的重要输入设备。

鼠标也作为电脑的重要输入设备,如上图所示,通常的鼠标主要有左键,滚动滑轮键, 右键这三个功能键组成。左右键的操作方式主要有:单击,双击,按住不放拖动鼠标等操作。 左键单击的作用:选中、连接、按钮的按入(像我们通常按电视遥控器按钮一样,打开了按钮显示的对应功能)。 左键双击的作用:打开windows 桌面的功能图标对应的功能。 注:通常2次敲击左键的间隔要尽可能小点,要快,否则电脑只认为你是做了2 次左键单击事件(只是对图标进行了2次选中操作),而不认为你是做1次左键双击事件,就不能达到你想要的打开这个功能的操作。如果出现上述的点击不够快的情况,只需重复回一次正确的双击操作就可以打开对应你所点击的图标功能。 右键单击的作用:打开你所点击的地方的高级菜单(高级功能菜单中有对你所点击的地方的大部分功能操作选项,通常有打开、改名即重命名、复制、删除、属性设置等功能)。右键单击弹出高级菜单后,将光标移进高级功能菜单里面,可以看见光标所在的菜单选项背景色改变为蓝色,这时你只要左键单击一下就可以进入这项功能。 注:如果失误右键点击弹出了高级菜单,只需将光标移到空白的地方(没文字,没图标,没按钮的地方)左键单击一次就可以退出并关闭高级菜单。 右键双击的作用:通常不使用右键双击,所以在不做详细介绍。 滚动滑轮的作用:通常文档或网页显示器不能一屏显示完,所以通常有部分在下方,这时我们想看下面的内容,就要将下面的内容拖上来看,这时就要使用滚动滑轮了。 滚轮向下滑动:页面向上拖动可以看到下面的内容。 滚轮向上滑动:页面向下拖动可以看到上面的内容。 左键 右键 滚动滑轮

图形学 用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 glVertex2f( 0.0, -0.2); glVertex2f( 0.2, 0.0); glVertex2f( 0.0, 0.0); glEnd(); glFlush(); } void dsp() { glClear( GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BI T); // Clear the frame buffer glColor3f( 0.0, 1.0, 1.0); // Set current color to green display(); //-------------------------- //平移 glPushMatrix(); glTranslatef(0.5,0.5,0.0); display();

GHOST使用教程(图解)

GHOST使用教程(图解) 收集者:小路发布于:https://www.doczj.com/doc/8a15520669.html, 发布时间:2007- 5-6 12:50:48 发布人:小路 减小字体增大字体 一、什么是Ghost? Ghost(幽灵)软件是美国赛门铁克公司推出的一款出色的硬盘备份还原工具,可以实现FAT16、FAT32、NTFS、O S2等多种硬盘分区格式的分区及硬盘的备份还原。俗称克隆软件。 1、特点:既然称之为克隆软件,说明其Ghost的备份还原是以硬盘的扇区为单位进行的,也就是说可以将一个硬盘上的物理信息完整复制,而不仅仅是数据的简单复制;克隆人只能克隆躯体,但这个Ghost却能克隆系统中所有的东东,包括声音动画图像,连磁盘碎片都可以帮你复制,比克隆人还厉害哟:)。Ghost支持将分区或硬盘直接备份到一个扩展名为.gho的文件里(赛门铁克把这种文件称为镜像文件),也支持直接备份到另一个分区或硬盘里。 2、运行ghost:至今为止,ghost只支持Dos的运行环境,这不能说不是一种遗憾:(。我们通常把ghost文件复制到启动软盘(U盘)里,也可将其刻录进启动光盘,用启动盘进入Dos环境后,在提示符下输入ghost,回车即可

运行ghost,首先出现的是关于界面,如图 按任意键进入ghost操作界面,出现ghost菜单,主菜单共有4项,从下至上分别为Quit(退出)、Options(选项)、Peer to Peer(点对对,主要用于网络中)、Loca l(本地)。一般情况下我们只用到Local菜单项,其下有三个子项:Disk(硬盘备份与还原)、Partition(磁盘分区备份与还原)、Check(硬盘检测),前两项功能是我们用得最多的,下面的操作讲解就是围绕这两项展开的。 3、由于Ghost在备份还原是按扇区来进行复制,所以在操作时一定要小心,不要把目标盘(分区)弄错了,要不

OpenGL实现3D模型的交互控制

第24卷第10期 计算机应用与软件 Vol 124No .10 2007年10月 Computer App licati ons and Soft w are Oct .2007 O penG L 实现3D 模型的交互控制 孙妮芳 杨志强 陈 诚 何 斌 龚佩曾 (同济大学计算机系 上海 200092) 收稿日期:2006-12-04。孙妮芳,硕士生,主研领域:虚拟现实技术。 摘 要 简述了3DS 文件的结构,以及在OpenG L 中如何读入和显示3DS 文件的模型,并着重讲述了利用OpenG L 编程接口对场 景中的这些模型进行选择、拾取,通过鼠标拖动对这些模型进行交互操作。关键词 OpenG L 选择 拾取 交互操作 CO NTROL THE 3D MOD EL S I NTERACT I VELY I N O PENGL Sun N ifang Yang Zhiqiang Chen Cheng He B in Gong Peizeng (D epart m ent of Co m puter ,Tongji U niversity,Shanghai 200092,China ) Abstract The structure of 3DS For mat File is outlined,and the way t o read and show the models of 3DS For mat File in OpenG L is p resen 2ted .It is exp lained in detail how the interactive contr ol of the models with the select mode and the feedback mode is realized .Keywords OpenG L Select Picking I nteractive 0 引 言 虚拟实验是当今教育改革比较热门的话题之一,通常意义上讲的虚拟实验建立在真实实验的基础之上,对实验所使用的元器件、,实验者通过鼠标点击与拖曳、键盘操作,可以像对真实元器件一样对虚拟实验设备进行操作,从而完成整个虚拟实验过程。 交互技术是建立虚拟实验要解决的最基本和最重要的问题,交互不仅可以向用户演示信息,同时允许用户向程序传递一些控制信息,比如用户可以通过键盘、鼠标等外设来控制程序的运行。OpenG L 作为一个三维工具软件包,在三维交互编程等方面提供了比较完善的机制。比如,通过OpenG L 的选择、反馈模式比较容易实现通过鼠标键盘进行交互。 目前,已经有不少论文和书籍比较详细地阐述了在OpenG L 中通过选择、拾取和反馈实现对三维物体的交互操作。但对读入和显示多个3DS 文件的模型的交互操作却介绍得比较少。本文根据这一情况并结合实际,在虚拟装机系统中,对场景中的多个元器件模型的交互操作进行详细介绍。 1 3D S 文件介绍 3DS 文件存储了模型的材质信息和几何信息,材质信息主 要包括材质的名称,材质的纹理贴图所对应的文件名以及材质 的颜色等;几何信息主要包括顶点的数目,每个顶点的坐标,三角面的数目,每个三角面上3个顶点的索引,此三角面是否可见等。 3DS 文件由许多块组成,每个块包括信息类别和下一个块的相对位置。块的信息类别用I D 表示,它描述了该块的数据信息。下一个块的相对位置指出了下一个块相对于该块起始位置 的偏移字节数。在块结构中,始终用前2个字节保存I D 号,接下来的4个字节保存块的长度,块的实际内容则用(块长度)6个字节保存。块的内容又可能包含子块。 在OpenG L 中读入3DS 文件的模型的方法有很多,由于本文的程序是在VC ++环境下开发的,所以采用了编写一个类来加载3DS 文件的方法。这样的类很多书籍和网站都有提供,只需进行简单的修改就可以使用,比如修改模型的位置信息以实现模型的移动,增加模型的旋转经度和纬度信息以实现模型的旋转。 2 O penGL 的交互技术 在虚拟装机系统中,要求与场景本身进行更多的交互操作,这种交互除了菜单和对话框实现外,在很多情况下是用鼠标来进行的。OpenG L 的一大功能就是提供了实现交互技术的机制。OpenG L 的交互技术是通过选择、拾取和反馈操作来实现的。 2.1 选 择 选择允许在窗口内部的某个位置用鼠标进行点击,并确定它所点击的是哪个物体。选择是OpenG L 的一种操作模式,选择模式不会改变帧缓存区的内容,退出选择模式时,OpenG L 返回与视景体相交的图元列表,它列出了位于视景体内或与视景体相交的图元,每个图元产生一个选择命中的记录,对应名称堆栈中的当前内容。 ?绘制模式 进入选择模式前,调用函数gl Render M ode (),其原型为:gl Render M ode (G Lenu m mode )。控制应用程序当前所处的模式,即绘图、选择和反馈模式,相应的mode 的取值为G L_RE NDER 、G L _SE LECT 或G L_FEE DBACK 。

OpenGL课程设计-三维球体的实现

游戏软件设计课程报告 (三维球体的实现) 院系: 专业: 学号: 姓名: 指导教师: 2010年10月10日

目录 目录 一、应用程序的最终界面----------------------------------------------------------------1 二、三维球体的绘制---------------------------------------------------------------------2 1、球体绘制方法研究 ----------------------------------------------------------------2 2、面分解法的实现----------------------------------------------------------------3 2.1面分解函数 ----------------------------------------------------------------3 2.2初值的选取 ----------------------------------------------------------------3 2.3 球体的实现----------------------------------------------------------------4 3、三角形绘制函数----------------------------------------------------------------4 4、三角面法向量函数 ----------------------------------------------------------------5 5、点的模长扩展函数 ----------------------------------------------------------------5 6、南北极法的实现----------------------------------------------------------------5 7、动画的实现-------------------------------------------------------------------10 三、二种绘制方法的比较---------------------------------------------------------------12

GHOST使用方法详细图解教程

GHOST使用方法详细图解教程 文章是转来的,也不知道人家是否原创,网上这类帖子很多,这个讲的比较细,列出来单独算一篇教程。正文开始: 很久以前就想做一个关于此类的网页,但一直找不到比较好的在纯DOS下抓图的软件,现在偶然在网上看见了图片,此处借鉴一下。由于是别人的图,或有小不同,但大体一样。 Ghost是一个备份软件,它能将一个分区内所有文件进行备份,通常我们是将系统盘C盘的所有文件制作成一个压缩文件,存放在电脑其它安全的分区内,在系统出现任意已知或未知的问题时候再

启动GHOST,提取此备份文件,还原到系统盘C盘以保证系统正常安全运行。GHOST适用于各种操作系统。名词解释 镜像文件:此处泛指GHOST软件制作成的压缩文件,以.gho为后缀,在ghost中显示为黄色 源盘:即将要备份的磁盘,一般情况下我们泛指操作系统盘如C盘 镜像盘:存放备份镜像的磁盘,一般情况下我们泛指文件存放盘D盘或 E F G 盘 打包、制作镜像文件:通常是指将操作系统盘如C盘经压缩后存放在其它盘,如D盘里面 解包、还原镜像文件:通常在系统盘如C盘出现错误或病毒木马后,将存放在其它盘里面的镜像文件还原到系统盘内,以求能恢复干净、良好的操作系统 我写这个网页是在一个前题下的: 1.针对没有软驱、没有光驱、没有引导光盘,也不会用光盘启动的人,能够在本地硬盘上简单操作就可维护好的 2.针对对电脑不是太懂或十分不懂的朋友所写的,我不能要求到他们了解到各种分区格式、内存交换文件、休眠文件;故而GHOST的相当多的其它功能都没有讲到,仅仅只讲到了最基本最实用的部分,一下要求他们了解到许多,他们或者说会望而却步的,只有当他们了解到了初步再在实用阶段,慢慢的一步一步熟悉,他们或才会一通百通的 3.个人主张:如无特别必要,不要在系统上安装限制性的软件或系统优化软件,通常都没有实际用处,而通常有副作用的通常只有RMB能够真正优化到电脑 一、使用GHOST之前必定要注意到的事 1.在备份系统时单个的备份文件最好不要超过 2GB 如果超过了2GB 程序会自动产生一个后缀名为如00100001.GHS 的文件请您一定要保证此文件与镜像文件在同一文件夹内没有此文件是不能还原成功的建议您新建一个文件夹名为 001 (如果您不断备份您可以依次新建文件夹名为 002 003 004 依此类推) 将镜像放置在里面GHOST 建议您选用选用最新的版本号需要最少 GHOST8.0版本或以上的版本

计算机图形学画圆算法源程序

#include void CirclePoint(int x, int y, int color, int m ) { putpixel(x+m, y+m, color); putpixel(y+m, x+m, color); putpixel(-y+m, x+m, color); putpixel(-x+m, y+m, color); putpixel(-x+m, -y+m, color); putpixel(-y+m, -x+m, color); putpixel(y+m, -x+m, color); putpixel(x+m, -y+m, color); } void MidBresenhamCircle(int r,int color, int m) { int x, y, d; x=0; y=r; d=1-r; while(x<=y) { CirclePoint(x, y, color, m); if(d<0) d+=2*x+3; else { d+=2*(x-y)+5; y--; } x++; } } void main() { int gdriver,gmode,a,b,c; gdriver=DETECT; initgraph(&gdriver,&gmode,"C:\\TC20\\BGI"); printf("qing shu ru\n"); scanf("%d,%d,%d",&a,&b,&c) setbkcolor(0); MidBresenhamCircle(a, b, c); getch(); closegraph(); }

BT3使用方法-图文教程

下载U盘版bt3的文件 地址为:http://cesium.di.uminho.pt/pub/backtrack/bt3final_usb.iso 文件大概为 783MB 2.将此ISO文件加载到虚拟光驱中,在虚拟光驱中,得到如下文件: 当然,你也可以用winrar解压到目录中,估计应该没啥问题,因为空间问题,我就不想解压了我是直接加栽到虚拟光驱来用的,省空间,无需解压 3.将虚拟光驱中的文件也就是BT3,BOOT这两件文件夹copy到U盘中去 4.点击开始-运行,输入CMD, 然后回车,进入命令行模式 输入U盘的盘符,我的为I:,然后 回车 输入 cd boot 回车输入bootinst.bat回车,就会开始制作BT3 开始制作时,会出现这样的画面,大概意思就是,此操作将会重写U盘的 MBR(即引导区),如果此分区是您的一个硬盘上的分区,那您的Windows系统 将会启动不了,请小心,按X键中止操作,按其他任意键继续制作 我就是在U盘上操作的,所以不用理会,按任意键就可以了。

上面的图,是制作完成后的提示,设置引导记录成功,按任意键退出制作 制作的过程很快,大概不到十秒,其他,他只是重新写了一下U盘的引导区 就OK了 到此为止,此U盘就可以引导系统进去bt3了 ----------------------------------------------------我是下流的分割线----------------------------------- 破解:引导系统进入BT3的选择画面,选择后面带有KDE的BT3即可 1.进入bt3桌面后,需要用到的就是命令行模式,其实也不难,注意,我们要启动 bt3的命令行状态,点击下面这个图标就会启动bt3的命令行状态 2.点击图标,进入命令行状态,输入命令:ifconfig –a此命令,就是列出你电脑中的网卡,如果没有列出,那说明是不支持了,如果列出了,说明支持,也不一定能抓包

Bresenham直线算法与画圆算法

Bresenham直线算法与画圆算法 文章分类:Java编程 计算机是如何画直线的?简单来说,如下图所示,真实的直线是连续的,但我们的计算机显示的精度有限,不可能真正显示连续的直线,于是我们用一系列离散化后的点(像素)来近似表现这条直线。 (上图来自于互联网络,《计算机图形学的概念与方法》柳朝阳,郑州大学数学系) 接下来的问题就是如何尽可能高效地找到这些离散的点,Bresenham直线算法就是一个非常不错的算法。 Bresenham直线算法是用来描绘由两点所决定的直线的算法,它会算出一条线段在 n 维光栅上最接近的点。这个算法只会用到较为快速的整数加法、减法和位元移位,常用于绘制电脑画面中的直线。是计算机图形学中最先发展出来的算法。 (引自wiki百科布雷森漢姆直線演算法) 这个算法的流程图如下:

可以看到,算法其实只考虑了斜率在 0 ~ 1 之间的直线,也就是与 x 轴夹角在 0 度到 45 度的直线。只要解决了这类直线的画法,其它角度的直线的绘制全部可以通过简单的坐标变换来实现。 下面是一个C语言实现版本。 Java代码 1.view sourceprint? 2. // 交换整数 a 、b 的值 3. 4.inline void swap_int(int *a, int *b) 5.{ 6. *a ^= *b; 7. *b ^= *a; 8. *a ^= *b;

9.} 10. 11.// Bresenham's line algorithm 12. 13.void draw_line(IMAGE *img, int x1, int y1, int x2, int y2, unsi gned long c) 14.{ 15. // 参数 c 为颜色值 16. int dx = abs(x2 - x1), 17. dy = abs(y2 - y1), 18. yy = 0; 19. 20. if(dx < dy) 21. { 22. yy = 1; 23. swap_int(&x1, &y1); 24. swap_int(&x2, &y2); 25. swap_int(&dx, &dy); 26. } 27. 28. int ix = (x2 - x1) > 0 ? 1 : -1, 29. iy = (y2 - y1) > 0 ? 1 : -1, 30. cx = x1, 31. cy = y1, 32. n2dy = dy * 2, 33. n2dydx = (dy - dx) * 2, 34. d = dy * 2 - dx; 35. 36.// 如果直线与 x 轴的夹角大于45度 37. if(yy) 38. { 39. while(cx != x2) 40. { 41. if(d < 0) 42. { 43. d += n2dy; 44. } 45. else 46. { 47. cy += iy; 48. d += n2dydx; 49. } 50. 51. putpixel(img, cy, cx, c);

Bresenham画圆算法

GIS专业实验报告(计算机图形学) 实验2 使用Bresenham画圆算法,绘制一个圆 姓名系别班级学号实验日期指导教师实验成绩 殷悦10级4班2010203482 2013.06.20肖燕 一.实验目的及要求 根据Bresenham画圆算法,掌握绘制圆的程序设计方法。在绘制时应利用圆的对称性。注意,不能使用语言库中的画圆函数。 二.理论基础 1.Bresenham画圆算法: 在Bresenham画线算法的基础之上,根据输入的圆心点坐标和半径,每次绘制出八分之一圆弧,进而逐步绘制出整个圆形。 三.算法设计与分析 算法代码: void drawcircle(int xc,int yc,int radius) { int x,y,p; x=0; y=radius; p=3-2*radius; glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_POINTS); while(x

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