【OpenGL】计算机图形学-练习题1

一、题目一

1.1 作业题目

考虑三个不同的光栅系统,分辨率依次为 800x600、1280x960、1680x1050。
如果每个像素存储 16 位,那么这些系统各需要多大的帧缓存(字节数)?
如果每个像素存储 32 位,这些系统各需要多大的存储量?

1.2 作业解答

在这里插入图片描述

Q:如果每个像素存储 16 位,那么这些系统各需要多大的帧缓存(字节数)?
A:

光栅系统分辨率像素存储(位)计算公式帧缓存(B)帧缓存(KB)
800x60016800 * 600 * 16 / 8960000960
1280x960161280 * 960 * 16 / 824576002457.6
1680x1050161680 * 1050 * 16 / 835280003528

Q:如果每个像素存储 32 位,这些系统各需要多大的存储量?
A:

光栅系统分辨率像素存储(位)计算公式帧缓存(MB)
800x60032800 * 600* 32 / 8 / 1000 / 10001.92
1280x960321280 * 960 * 32 / 8 / 1000 / 10004.9152
1680x1050321680 * 1050 * 32 / 8 / 1000 / 10007.056

二、题目二

2.1 作业题目

考虑分辨率为 800x600 和 1680x1050 的两个光栅系统。若显示控制器刷新屏幕的速率为每秒 60 帧,那么在各个系统中,每秒应访问多少像素?各个系统访问每个像素的时间是多少?

2.2 作业解答

在这里插入图片描述

Q:在各个系统中,每秒应访问多少像素?
A:

光栅系统分辨率刷新速率(s^-1)计算公式访问像素(个)
800x60060800 * 600 * 6028800000
1680x1050601680 * 1050 * 60105840000

Q:各个系统访问每个像素的时间是多少?
A:

访问像素(个)计算公式时间(s)
288000001 / 288000003.47 * 10^-8
1058400001 / 1058400009.45 * 10^-9

三、题目三

3.1 作业题目

显示窗口的宽度为 150,高度为 250,请列出从窗口右上角到左下角绘制一根线段的 OpenGL 语句。

3.2 作业解答

glClear(GL_COLOR_BUFFER_BIT);   //当前可写的颜色缓冲  
glColor3f(0.f, 0.f, 0.f);       //设置RGB  
glBegin(GL_LINES);              //画直线  
	glVertex2f(0.0f, 250.0f);  
	glVertex2f(150.0f, 0.0f);  
glEnd();  
glutSwapBuffers();  

四、题目四

4.1 作业题目

请说明 OpenGL 基本库、OpenGL 实用库(GLU)及 OpenGL 实用函数工具包(GLUT)之间的差别。

4.2 作业解答

库名区别内容
OpenGL 基本库核心包含与硬件无关的函数,例如用于描述图元、属性、几何变换、观察变换和许多其他操作的函数。函数以gl为前缀
OpenGL 实用库(GLU)对OpenGL 基本库的部分封装包含一些其他更专业的操作的函数,例如二次曲面生成、B样条曲面生成、表面纹理映射、二维查看和一些三维查看操作。函数以glu为前缀
OpenGL 实用函数工具包(GLUT)OpenGL的跨平台工具库主要提供与硬件相关的功能,如用于显示窗口管理和与输入设备交互的功能,也包含用于生成各种平面、二次曲面和三次曲面实体(如立方体、球体、圆锥体或茶壶)的功能。函数以glut为前缀

五、题目五

5.1作业题目

请说明术语“OpenGL 显示回调函数”的含义。

5.2作业解答

显示回调函数是程序员自己编写的关于显示窗口内容的函数,由glutDisplayFunc作为显示窗口需要重新显示时引入的函数来注册。当一个窗口的图像层需要重新绘制时,GLUT将调用该窗口的显示回调函数。

六、题目六

6.1作业题目

请说明物体坐标系和世界坐标系的差别。

6.2作业解答

要分清模型坐标系与世界坐标系,物体的旋转平移变换是以模型坐标系为基础来进行的。
模型开始加载视图中,此时模型坐标系是与世界坐标系重合的。

在这里插入图片描述

在模型通过平移变换后,其模型坐标系也进行相应的变换,此时模型坐标系就会与世界坐标系进行分离。

在这里插入图片描述

而随后的拼接物体的旋转平移变换都是以平移或者旋转后的模型坐标系为基础变换的。

建模坐标系:在构建单独对象时参照的坐标系
世界坐标系:系统的绝对坐标系

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
实验一 OpenGL+GLUT开发平台搭建 5 小实验1: 开发环境设置 5 小实验2: 控制窗口位置和大小 6 小实验3:默认的可视化范围 6 小实验4:自定义可视化范围 7 小实验5: 几何对象变形的原因 8 小实验6: 视口坐标系及视口定义 8 小实验7:动态调整长宽比例,保证几何对象不变形 9 实验二 动画和交互 10 小实验1: 单缓冲动画技术 10 小实验2: 双缓冲动画技术 11 小实验3:键盘控制 13 小实验4:鼠标控制【试着单击鼠标左键或者右键,试着按下鼠标左键后再移动】 14 实验三 几何变换、观察变换、三维对象 16 小实验1:二维几何变换 16 小实验2:建模观察(MODELVIEW)矩阵堆栈 17 小实验3:正平行投影1 19 小实验4:正平行投影2 19 小实验5:正平行投影3 20 小实验6:透射投影1 21 小实验6:透射投影2 22 小实验7:三维对象 24 实验四 光照模型和纹理映射 26 小实验1:光照模型1----OpenGL简单光照效果的关键步骤。 26 小实验2:光照模型2----光源位置的问题 28 小实验3:光照模型3----光源位置的问题 31 小实验4:光照模型4----光源位置的问题 33 小实验5:光照模型5----光源位置的问题 35 小实验6:光照模型6----光源位置的问题 38 小实验7:光照模型7----光源位置的动态变化 40 小实验8:光照模型8----光源位置的动态变化 43 小实验9:光照模型9---光源位置的动态变化 45 小实验10:光照模型10---聚光灯效果模拟 48 小实验11:光照模型11---多光源效果模拟 50 小实验12:光照效果和雾效果的结合 53 小实验13:纹理映射初步—掌握OpenGL纹理映射的一般步骤 56 小实验13:纹理映射—纹理坐标的自动生成(基于参数的曲面映射) 59 小实验14:纹理映射—纹理坐标的自动生成(基于参考面距离) 61
使用OpenGL绘制国旗可以通过以下步骤实现: 1. 创建OpenGL上下文和窗口。 2. 设置绘制区域和视口。 3. 设置绘制颜色和深度缓冲区。 4. 绘制国旗的红色背景。 5. 绘制五颗黄色的五角星。可以使用OpenGL的绘制多边形功能来绘制五角星,也可以使用纹理映射来贴上五角星的图案。 6. 交换前后缓冲区,显示绘制结果。 以下是一个简单的OpenGL绘制国旗的示例代码: ``` #include <GL/glut.h> void display() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glColor3f(1.0, 0.0, 0.0); // 设置绘制颜色为红色 glBegin(GL_QUADS); glVertex2f(-1.0, 1.0); glVertex2f(-1.0, -1.0); glVertex2f(1.0, -1.0); glVertex2f(1.0, 1.0); // 绘制国旗的红色背景 glEnd(); glColor3f(1.0, 1.0, 0.0); // 设置绘制颜色为黄色 glBegin(GL_POLYGON); glVertex2f(-0.5, 0.5); glVertex2f(-0.25, 0.25); glVertex2f(0.0, 0.5); glVertex2f(0.25, 0.25); glVertex2f(0.5, 0.5); glVertex2f(0.375, 0.25); glVertex2f(0.5, 0.0); glVertex2f(0.375, -0.25); glVertex2f(0.5, -0.5); glVertex2f(0.25, -0.375); glVertex2f(0.0, -0.5); glVertex2f(-0.25, -0.375); glVertex2f(-0.5, -0.5); glVertex2f(-0.375, -0.25); glVertex2f(-0.5, 0.0); glVertex2f(-0.375, 0.25); // 绘制五角星 glEnd(); glutSwapBuffers(); } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH); glutInitWindowSize(800, 600); glutInitWindowPosition(100, 100); glutCreateWindow("OpenGL Flag"); glutDisplayFunc(display); glutMainLoop(); return 0; } ``` 该示例代码使用了OpenGL的基本绘图功能,通过绘制红色背景和黄色五角星实现了绘制国旗的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲代码两年半的练习生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值