关于计算机图形学上机考试雪崩的反思。。

那么我首先要说一些技术之外的事情。。

那就是我拿了笔记本但是却没有拿鼠标。。以前上图形学实验也犯过这个错误。。离开了鼠标。。

我工作效率基本要降一大半。。

然后就是上机。。

那么由于没有鼠标。。我总是在犹豫使用触摸板。。

而且也没有打开老师授课的PPT。。。

忘记说题目了。。题目很简单。。照着书上画一个Bezier曲线

那么书上是有代码的。。但是书上是opengl+DOS,而题目要求是opengl+MFC

那么两者是怎么转化的呢。。

我的理解是利用wgl系列函数绑定当前pdc然后在onDraw里用画笔pdc画就好了。。

但是此处并不是显式调用pdc而是隐式地绑定了device context pointer

那么你最后要记得释放pdc..,然后呢。。如果有一些onSize消息需要我们进行

重绘的话。。那我们也可以进行这个消息的处理。。但是一个逻辑是。。。。

如果不发生该事件则。。该消息就不会发送。。不发送我们就不需要处理

但是我在出错的过程中。。老想着改它。。这样肯定是蠢的

那么有了我以前做工程上述的经验以后。。

我分析了一下书上程序的结构,将专门绘图的一段代码copy到onDraw

但是呢。。此时我用的是之前做过的一个MFC 3D的工程去改。。。

所以前面的初始化我都没管。。事实上呢。。从这一步开始就崩了。。

那么你的代码能正常显示的话。。要依赖于你的投影模式。。在显示屏上

就需要投影,并且我们知道有一个很重要的概念叫做视区。。就是用户要看的区域大小?

当时其实还是有考虑的?

我看到了这个函数。。以为稳了。。谁知道它不能执行我们想要的功能。。

那么实际上是少了这个函数

那么原来那个3D的工程是说。。。

用了这样的投影方式和投影参数。。那么。。这里并没有2D,3D的关键词。。。

我在做的时候并没有意识到2D到3D工程到底在哪些地方敏感。。。

我没有抓到关键的地方。。实际上当时的情况是这样。。如果使用了3D的投影方式和参数

那么你的所有绘图语句不会报错。。但是呢。。结果是。。啥都不显示。。

那么当时我看到这个结果第一反应是懵逼。。觉得自己哪里写错了。。。

奥对。。中间还有一个错误。。和书上一模一样的函数。。书上没事。。我的出事了。。

然后我很慌。。然后clean rebuild确认不是工程问题后。。发现。。我抄错了。。

各种删。。各种改。。onSize都改了。。太蠢。。

不过到后来都没有显示。。完全没有想法该怎么解决。。

那么当时发生了这个问题。。即使我们的姿势水平不够。。但我们依然能够得到一些结论

首先。。这个工程成功运行起来了。。

那么说明我的绘图语句应该都没有太大的问题。。

那么很明显的一个矛盾是。。执行了绘图语句却看不到绘图。。

那么我的一个想法是。。绘图太细。。颜色和背景色一样。。

但是我的后续操作排除了这个可能性

那我们怎么办。。后来我就gg了。。。

那么我们再次关注这个主要矛盾。。已绘和看不到。。可能由哪些原因造成

首先我们要有一个前提。。保证已绘。。

那么有两个问题我们并没有关心。。那就是绘到哪里。。结果显示到哪里

那么这里有一个非常显然的逻辑。。我绘图到A区域。。没有擦除操作。。

我再次观察A区域。。A区域必定有绘图痕迹(假设颜色和大小正常)

那么我们现在观察到的区域并没有痕迹。。那么说明。。要么我们观察的并不是A区域

要么我们的绘图操作确实不正确。。

但是呢。。按照这个逻辑。。我们需要调整一下区域?在哪里调整?ViewPort?还是雪崩

那么还是不行。。

那么后面这个问题我们考虑了之后先放着。。

我们来关心一下更为基础的问题。。MFC可能的大概工作流程。。。

绘制-显示

那么这个绘制操作到底意味着什么呢。。我们肯定把它想成了一个拿着笔直接在屏幕上

画的操作。。但是如果说能画的话为什么不显示?仍然可以怀疑区域不对。。

但是我们要知道。。opengl用到了投影矩阵。。这意味着什么。。它有一个已经处理好的矩阵

然后将这个处理好的矩阵再投影到屏幕上的视窗区域

那么绘制的过程就是不断地处理这个矩阵。。显示的过程就是投影。。

那么绘制的过程是书上给的。。但是呢书也不能保证一定对。。

但是如果一旦我们的绘制过程没错。。我们就应该怀疑我们的显示过程

显示过程显然在前面是设置了状态。。由于还是缺乏这方面的知识。。我们可以选择搜索

每个函数都是什么意思,那么考试之后我来模拟一下这个过程

---glViewport():
glOrtho函数只是负责使用什么样的视景体来截取图像,并不负责使用某种规则把图像呈现在屏幕上。
glViewport主要完成这样的功能。它负责把视景体截取的图像按照怎样的高和宽显示到屏幕上。

那么最后这个函数是一个透视函数。。

然而前面的orth函数我们并没有。。有关投影的函数。。

那么我们想到。。PPT上是怎么处理MFC二维工程的呢。。

那么其实我们可以一下子找到不同点。。但是当时我鼠标不好使。。

那么其实不打开PPT我们把glOrtho复制进去就可以发现

只显示了一部分。。那么我们一个很自然的想法是这个视区?开小了。。

改大了之后

那是因为这里少了一个符号。。

改成上面这样的话。。

就会出现结果。。大功告成。。

分析会对结果有影响的因素。。带着对这个因素的思考去

查每一个函数都是什么意思。。是否都执行了你所期望的功能。。

如果说。。你不先分析。。缩小我们关注的范围。。我们很难直接找到投影函数。。并且关于视窗的知识也是很重要的

那么如果问题还没有解决。。一方面还可以缩小问题规模。。缩小到1之后。。我们再去考虑扩大我们考虑的因素

那么这个是分析工程问题的一个常见的思路吧。。

时间: 2024-12-23 17:59:19

关于计算机图形学上机考试雪崩的反思。。的相关文章

HDU 1234 (浙大计算机研究生复试上机考试-2005年) 开门人和关门人 (水)

开门人和关门人 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 11133    Accepted Submission(s): 5667 Problem Description 每天第一个到机房的人要把门打开,最后一个离开的人要把门关好.现有一堆杂乱的机房签 到.签离记录,请根据记录找出当天开门和关门的人. Input 测试输入的第一

hdu 4416 水题 浙大计算机研究生复试上机考试-2005年 可是发现自己写代码有问题

Spring3与Hibernate4整合时出现了nested exception is java.lang.NoClassDefFoundError: Lorg/hibernate/cache/CacheProvider. hibernate3的时候,用spring来控制sessionfactory用的可以是org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean,因为用的是hibernate4所以照猫画

浙大计算机研究生复试上机考试-2010年 zoj问题

ZOJ问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2984 Accepted Submission(s): 906 Problem Description 对给定的字符串(只包含'z','o','j'三种字符),判断他是否能AC. 是否AC的规则如下: 1. zoj能AC: 2. 若字符串形式为xzojx,则也能AC,其中x可以是N

浙大计算机研究生复试上机考试-2010年 最短路径问题

最短路径问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 14405 Accepted Submission(s): 4408 Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的. Input 输入n,m

3D计算机图形学零起点全攻略(转)

3D计算机图形学零起点全攻略 这篇文章不包含任何技术知识,但我的希望它能指明一条从零开始通往3D领域的成功之路.我将罗列我看过的相关经典书籍作为学习文献,阅读规则是每进入下个内容,我都会假设已经完成前面全部的文献研习内容.相信若能按照这条路走到最后,会有所进益. 完成整部分内容需要具备基础: 英语:CET4以上 数学:精通数字加减乘除法. 物理:基本力学. 计算机:了解电脑的基本知识,熟练使用Windows. 电脑配置: CPU:双核1.5以上 显卡:NVIDIA GeForce8400G MS

分享:计算机图形学期末作业!!利用WebGL的第三方库three.js写一个简单的网页版“我的世界小游戏”

这几天一直在忙着期末考试,所以一直没有更新我的博客,今天刚把我的期末作业完成了,心情澎湃,所以晚上不管怎么样,我也要写一篇博客纪念一下我上课都没有听,还是通过强大的度娘完成了我的作业的经历.(当然作业不是百度来的,我只是百度了一些示例代码的意思,怎么用!算了,越解释万一越黑呢!哈哈O(∩_∩)O哈哈~) ----------------------------------------------------------------分界线------------------------------

计算机图形学研究领域分哪些

计算机图形学各个领域的目标或许不同,但最终的形式都是渲染(即绘制)在二维的显示设备上的图像.下面是一个简单(可能并不完全)的分类: ?计算机图形学-领域及分支: ?1 绘制1.1 真实感绘制(非实时)1.1.1 光线追踪(Ray-tracing)1.1.2 全局光照(Global Illumination)......1.2 实时绘制1.2.1 Shading(BRDF, Programmable Shading等)1.2.2 纹理(Texture Synthesis, 反走样, 采样等)1.2

【转载】计算机图形学框架

原文: 计算机图形学框架 应用 基本图形生成算法 图元光栅化标准 直线要直 图元终点要准 图元生成的亮度.色泽粗细要均匀 快速计算 直线光栅化算法 逐点比较法 数值微分法 中点Bresenham算法 圆的光栅化算法 简单方程产生圆弧 Bresenham算法产生圆弧 多边形填充 扫描线填充 宽图元 复制像素画宽图元 移动画笔画宽图元 3D数学基础 坐标系 向量 矩阵 空间集合运算 集合形体的表达 几何体之间的关系 图形变换 二维及三维图形几何变换 二维图形几何变换 平移变换 比例变换 旋转变换 错

计算机图形学和OpenGL(二)坐标系和绘制点线函数

这节开始前我们先了解一下图元的概念.图形软件包中用来描述各种图形元素的函数称为图形输出原语,也称图元(primitive).而描述对象几何要素的输出图元一般称为几何图元.点和线是最简单的几何图元,本节就会简单介绍点和线段的绘制方法. 一.坐标系统. 坐标系统一般分为屏幕坐标和OpenGL中的绘图坐标. 在上一节中我们简单的写了个示例程序,程序中介绍了gluOrtho2D命令.我们可以利用该命令设定一个二维笛卡尔坐标系.该函数的四个变量制定的是显示图形x和y坐标范围.所以我们可以使用下面代码制定一