计算机图形学课程实验
qq_40272523
这个作者很懒,什么都没留下…
展开
-
局部坐标系基础上变换
事实上从局部坐标系变到世界坐标系 你可以这样想象 一个立方体 正中间是它的几何中心也就是局部坐标系原点事实上几何体某一顶点A 是 跟随着物体局部坐标中心的移动的 可以说是被带着动了 因为是刚体吗所以 即物体几何中心怎么动 你顺序着也做一遍就可以了而至于为什么物体几何中心每次在局部坐标系基础上变换用左乘而不是右乘是因为你先旋转 在平移 ,即便是让物体几何中心做 它也只能先平移在旋转 也...原创 2020-01-02 10:57:32 · 578 阅读 · 0 评论 -
SetCursorPos()一些注意
MouseKeySetCursorPos()为什么这是一个系统级API而不是封装好的CViw类的 一会可以说说哈因为鼠标位置 并不独属于某个窗口 通过鼠标点击可以控制某窗口有焦点 但不能是属于某个窗口所有它属于整个屏幕全局的 所以SetCursorPos()也是相对于屏幕坐标系来说的caole1 巨坑 this->setWindowPos(int x int y int wid...原创 2019-12-16 21:24:47 · 3284 阅读 · 0 评论 -
5
1.border:边界Slider静态控件边界设置在这里2.下面有一个讲动态控件和静态控件的文章 说的挺详细的https://www.cnblogs.com/wengzilin/archive/2013/05/08/3067477.html主要有以下几个问题1.动态控件的映射变量不能是一个栈区对象 要是一个堆区对象即CButton *buttoncCtrl=new CB...原创 2019-12-15 23:11:22 · 130 阅读 · 0 评论 -
MFC入口函数以及程序执行流程
MFC 程序入口和执行流程一 MFC程序执行过程剖析1)我们知道在WIN32API程序当中,程序的入口为WinMain函数,在这个函数当中我们完成注册窗口类,创建窗口,进入消息循环,最后由操作系统根据发送到程序窗口的消息调用程序的窗口函数。而在MFC程序当中我们不在能找到类似WinMain这样的程序入口,取而代之的是一系列派生类的声明和定义以及一个冲CWinApp类派生而来的类的全局对象。...原创 2019-12-15 23:11:07 · 2155 阅读 · 0 评论 -
4
1.突然想到一点 如果每帧的计算都放在onDraw()函数 或者说Render()函数 即便有后台缓冲区也吃不消能不能像定时器一样自动计算着 onDraw()函数就不算了 就用计算好的那些数据 但是即便是DX也是在每一帧 重新设置三个矩阵也就是说 他那里也是每一帧重新计算 世界变换 观察变换 投影变换 视口变换 等等2.我发现了 如果类声明中有未非静态变量设初始值 在进入构造函...原创 2019-12-12 23:12:31 · 98 阅读 · 0 评论 -
22
createwindow()是一个windowsAPI函数 很多时候我们用不到它 可能是一个dll用到时候才会把那个obj文件载入内存2. C实验报告一6View *a = new C实验报告一6View();刚才犯了一个错误在构造函数中我想构造另一个窗口实例 吗 但忽略一个问题 用的还是该构造函数 然后就会一直递归构造实例下去 知道内存耗尽。3.原来如此 我一直想找MF...原创 2019-12-08 23:20:25 · 90 阅读 · 0 评论 -
Tanks-6发射子弹
1.点scene右上角小方块可以变正交视图2.其实我们Rigidbody都是组件的映射对象就像MFC中的CSlider CButton一样3.子对象应该不是继承父对象就是两个GameObject实例 然后有相对的父子关系位置相对的话 那么子对象肯定会跟着父对象跑...原创 2019-12-02 16:50:50 · 97 阅读 · 0 评论 -
C#方法中的 隐式ref
1.C#应该默认 方法的参数是ref了 传this引用时也是ref this.a这样 所以这样就可以比较好的解释为什么 在类的方法中时用的那些引用可以改变字段值而调用别的类方法时必须加ref因为传到自身方法也加ref了或者可以说类方法中对自己的字段用了隐式ref 除自己之外的参数用显示ref...原创 2019-12-02 13:18:05 · 146 阅读 · 0 评论 -
Tanks-4 UI
1.或T键 切换到UI Canvas设置22。所以你如果想将一个物体以相对于父物体坐标系不变的位置同步移动最好的办法就是作为他的子对象,像刚体关节一样3.哦Canvas 相当于 UI控件的一个设备环境4.C#很奇怪哈 虽然本身Vector3 vecor=new Vector3(); vector变量已经是一个引用变量了但是在作为函数实参时 不加ref仍然不是引用形式 仍然是...原创 2019-11-29 22:59:44 · 97 阅读 · 0 评论 -
计算机图形学8
We Did 我做到了!!!!之前也用双缓冲但是一直 老是原来那个空白绿色屏幕 可以明显看到闪到新画面 一直不知道咋回事后来一直试 发现了罪魁祸首是 Invalidate(true);它会将 窗口实例对应的显存给全部清空(也就是全部用背景色填充)那么即便说我们是双缓存,也要到最后有一个Bit()操作 一个位块赋值操作。而且最重要的 你用Invalidate(true)它...原创 2019-11-28 22:31:02 · 107 阅读 · 0 评论 -
图形学7
GetAsyncKeyState是一个用来判断函数调用时指定虚拟键的状态,确定用户当前是否按下了键盘上的一个键的函数。如果按下,则返回值最高位为1。 [1]所以&8000就很有必要了 返回值应该是32位的所以注意他说的 是调用GetAsyncKeyState函数时 指定虚拟键是否被按下 所以 该函数调用的时机就一个很有意思的问题我方在OnKeyDown里感觉不太好 那个是一个...原创 2019-11-28 12:43:07 · 93 阅读 · 0 评论 -
计算机图形学7
1.他有时候就很那啥的自己加一些ID的宏定义 然后后系统文件的一些定义重复了就会报错 莫名其妙啊 不过找到注释掉就好了2.(temp2.code&LEFTTransboundary) == LEFTTransboundary这个小括号一定要加要不有问题3.还有一个很有意思的事我们知道栈区空间是比较小的因此不能int a[10000]这样同理如果是外部传入...原创 2019-11-27 18:50:46 · 150 阅读 · 0 评论 -
计算机图形学6
1.动画 OS 回调函数22我意识到缩放并不应该设那么多按钮一个就可以了因为我们变换属性设置里已经设置XY分量缩放值是0.0到2.0了 也就是可以整体或分量的增大或减少所以只需要一个“缩放”按钮即可 我弄多了3.我意识到需要一个回退操作按钮,,,。。 我觉得像一般软件的回退,是存着一个操作顺序序列,回退时像数据库的滚回一样反着并且做逆操作,而不是存储着一路过来的结果,应为存操作的话...原创 2019-11-25 23:03:38 · 118 阅读 · 0 评论 -
计算机图形学2
BitBlt:按字面意思也很好想,就是位块传送,起点和终点是两个设备环境memDC和HDC是内存?是显存应该原创 2019-11-20 11:42:11 · 90 阅读 · 0 评论 -
二维变换基础
估计明天也要学不过先说一下1.用齐次坐标描述的话 不管h为几 平移多少量,矩阵里就是多少量就可以哈,因为会自动运算的。2.平移和旋转复合运算 你不要想 反正平移和旋转占的矩阵位置不同就可以放一个矩阵里相安无事了,首先结果不同-Tx*cosa的 值不一样的 其次既然操作顺序不同矩阵不同,那那个矩阵是先进行平移在旋转 还是先旋转在平移呢,从几何上也很容易想到结果不同,所以逻辑上也不行的...原创 2019-11-11 21:08:57 · 129 阅读 · 0 评论 -
画面闪烁和关于缓存的问题
刚才用 直线反走样算法 当然我的是负优化版本就鼠标拖着一直实时绘制着吗 然后每次都清空缓冲区那钟 都是整个窗口区域无效,有个很好玩的就是那个直线在鼠标连续移动过程中一直闪烁 而如果用OS提供的函数的话就不会闪烁了 这是因为我们那个算法 每次都要计算很多,然后就是还没计算完该帧的鼠标移动又要计算下一帧了 所以我记得张老师也说过游戏要有后台缓冲区,也是为了防止只在一个缓冲区运算 ...原创 2019-11-08 19:43:43 · 179 阅读 · 0 评论 -
二维坐标系坐标转换
二维的坐标变化的话 特别是那种将设备坐标转换成逻辑坐标原点在中心的用向量投影而非向量旋转解决比较好先做一个平移的逆操作 再在新坐标系轴方向单位向量做投影就好了不管是不是十字叉还是斜着的十字叉都是在两个轴向量上投影比较好 那样很简单、、、、角色动画就是各关节旋转和平移的近似连续离散值...原创 2019-11-08 17:53:24 · 533 阅读 · 0 评论 -
颜色差值
MFC中CORCOLORREF 如何做线性颜色差值就ei*RGB1+(1-ei)*RGB2;那种但是哈 CORLORREF 是双字节的也就是十六位颜色所以其实花里胡哨的GetRValue()啊啥的 都是对位的操作哈 左移右移啥的。然后对这些颜色分量差值 然后判断一下 八位颜色的越界就可以了你不要想直接ei*corlorref1+(1-ei)*cor...原创 2019-11-07 23:08:19 · 607 阅读 · 1 评论 -
头文件中引用别类需要包含头文件
谁给我说C 与C++引用同工程别的类不需要包含头文件的可恶啊 需要的 不知道之前咋想的CPen这些事系统类 自动在配置环境里就包含头文件和.cpp了 所以不用显示包含...原创 2019-11-05 16:56:35 · 1376 阅读 · 0 评论 -
GetDC()和BeginPaint()的不同以及适用处
BeginPaint和GetDC有什么区别?2013年08月14日 ⁄ 综合 ⁄ 共 1212字 ⁄ 字号 小 中 大 ⁄ 评论关闭 1, 为什么WINDOWS要提出无效区域的概念呢?这是为了加速。因为BeginPaint和EndPaint用到的设备描述符只会在当前的无效区域内绘画,在有效区域内的绘画会自动被过滤,大家都知道,WINGDI的绘画速度是比较慢的,所以能节省一个...原创 2019-11-04 12:21:44 · 432 阅读 · 0 评论 -
MFC,4SetPixelV函数画实心圆为什么这么慢
刚才就一个一个画点把园给填充了 但是速度很慢甚至能看见绘制过程我本来觉得画线函数应该也是一个一个点绘制的应该没区别啊但是不对我想了 一下 不说多次函数进栈 这个消耗是异常大的最重要的是我感觉画线应该是直接在一个函数过程里对缓冲特点位置直接填充颜色值可能用memcpy那样 所以还是差挺多的这个速度...原创 2019-10-13 20:00:47 · 306 阅读 · 0 评论 -
MFC.3 static CDC *pMainDC = new CClientDC(this)
我刚才想到一个问题利用HDC 或其子类构造函数在堆区实例了一个对象是可以但是窗口表面位置是会变的 也就是说如果一直用哪一个堆区DeviceContent对象是不行的然后我看了一下我的程序有点问题CDC *pMainDC = new CClientDC(this)是在OnPaint()函数里每次都执行了这个 是可以和窗口的数据同步但是会有很多堆区对象浪费什么时候释放呢pM...原创 2019-10-13 10:29:06 · 221 阅读 · 0 评论 -
在只有变量名的情况下 内存如何做到对每一个Data都是按地址访问的
是这样的 如果是int a,这种因为在函数栈里。所以只要知道函数栈首地址,会知道的然后根据数据类型一个占几个字节结合计算机组成原理我们知道程序语言 会编译成 汇编语言汇编语言 就是一条一条指令指令执行分为寻址周期(间指周期)执行周期PC先进入代码区的该函数首地址然后取指 然后自加一取得的指令放在IR里IR由操作码 和地址码组成如果是在函数栈区 一般是...原创 2019-10-01 17:34:50 · 168 阅读 · 0 评论 -
全局对象的一个好处
就像这样 哈 你可以 在函数内通过调用该全局对象的析构函数,来让该全局对象消失,而不是像全局变量只能在程序结束后才消失不过他的析构顺序仍像在函数栈一样 先调用子类析构函数 在析构基类析构函数,注意如果成员有堆区指针 要在析构函数里将它做掉哦然后注意该层次指针指向空。还有一件事 析构函数函数名可以是对象名字 也可以是类名一样的都是调用了一个函数参数默...原创 2019-10-02 13:04:43 · 174 阅读 · 0 评论 -
为什么windows 比DOS 更适合游戏的运行
首先 单用户单任务和多用户多任务 是一点在一个 DOS是顺序的一条一条指令顺序执行windows是事件驱动型OS就是有问题了再叫我 没问题了 你该干啥干啥 异步做的比较好给应用程序更多自由的空间 以及并发的空间...原创 2019-10-02 13:06:46 · 140 阅读 · 0 评论 -
OnPaint()和Ondraw()
OnPaint()是消息WM_PAINT的事件函数,当窗口无效时 OS会发现并向应用程序发WM_PAINT为标识的完整的消息数据结构会做绘制的初始化工作 包括BeginPaint()和EndPaint() 而在这两个函数中要做的就是调用OnDraw()函数也就是说 OnPaint()函数等价于普通winAPI程序的这个部分再来说一下 UpdateWindow()和In...原创 2019-10-02 15:38:07 · 141 阅读 · 0 评论 -
extern的作用
我们知道C和C++是用的按文件编译的方式 也就是一个cpp是一个整体那么他们互相之间 对彼此文件之间的状况是完全透明的 因此你即便在两个.cpp文件里 定义一个名字的全局变量各自编译各自的文件都是没问题的,但是我们知道全局变量本意是作用于整个程序的 即作用于程序中所有文件的所以它不应该重名 因此在编译后链接成一个.exe文件 时 就会发现一个程序有两个同名的全局变量 这样就会出问题...原创 2019-10-02 16:16:21 · 113 阅读 · 0 评论 -
初始映射
映射有很多 最基本的能用到的是MFC的消息映射机制 就是在消息处理函数里面把根据不同的消息ID 和 处理函数地址相关联起来 的就是这个。映射的概念是:设有一个集合D,若存在一个规则f:使得对任意x属于D根据规则f在Y集合中都有一个唯一确定的元素与之对应那么称 f:由D到Y为映射,那么MFC中的映射,中集合D就是消息集合,而Y集合就是消息处理程序比如WM_PAINT,对应 OnPai...原创 2019-10-06 10:49:23 · 186 阅读 · 0 评论 -
映射2
afx_msg 是一个宏 标识是消息映射函数,增加可读性。 在MSDN里是这样定义的: AFX_MSGremarks ClassWizard and AppWizard insert specially formatted comment delimiters ...原创 2019-10-06 11:09:06 · 85 阅读 · 0 评论 -
MFC计算机图形学 二
果然哈我在OnDraw()函数的最后加一个这个代码InvalidateRect(&pc, true);//他就会一直使窗口pc区域无效,然后一直触发 窗口无效事件 然后OS总是检测到总是发送消息给窗口消息队列 总是调用OnPaint()函数 OnPaint()函数里总是调用OnDraw()函数果然哈 我自己手动将View类的WM_PAINT消息关联的那个映射函...原创 2019-10-06 11:33:54 · 363 阅读 · 0 评论 -
MFC计算机图形学三-----
一.MFC中简单的数据类型(1):CPoint(2):CRect(3)CSize主要是CRect的构造函数形式二.坐标(1)逻辑坐标 对应Window对应窗口(2)设备坐标 (内存pixel物理坐标) 对应View 对应视区三.GDI之Pen设备(1)属性<1>:线形<2>宽度<3>颜色四PS:注意宏定义有两...原创 2019-10-06 12:03:35 · 339 阅读 · 0 评论 -
stdafx.h里应该放哪些头文件
当前工程的头文件都不适合一般标准库,系统,第三方.等不会修改内容的头文件.一般基本不会怎么改动的头文件放到里面,而不要把频繁修改的放到里面,这样每次修改都要去重新编译这些文件,就失去了预编译头文件的意义了我今天将自己定义的类的头文件放进去 但是出了很多莫名其妙的问题可以问一下老师为什么...原创 2019-10-07 13:35:41 · 282 阅读 · 0 评论 -
MFC.2
突然想到那些Dialog的static的 东西 如静态文本既然是静态变量吗 表示是属于对话框类的表示是对话框类的唯一变量可以通过XXDialog::staticText访问 我猜 如果是public的话啊 有一个好傻 就是头文件是可以 跨文件看的比如我们A类的头文件不用包含B类的头文件就可以用B类声明的东西 但是.cpp不行 必须要声明C#一个文件一般哈一般是一个类 ...原创 2019-10-09 17:51:38 · 370 阅读 · 0 评论 -
MFF.3
今天做MFC 对话框里控件变量作为输入参数时 想到能不能用一个数据类型的一个变量存多个点值 比如存一个点 因为那个绘制圆弧参数 要6个坐标如果一个一个做太麻烦了 一开始想用一个数存一个点(两个坐标)然后用移位的方式前几位存一个坐标 后几位存几个坐标然后突然想到RGBA啊 还有msgProc()里后两个参数都是这样 很多都用了 一个变量存多个意义 感觉都是因为懒。。。懒是第一动力。。。...原创 2019-10-09 23:14:29 · 154 阅读 · 0 评论 -
关于DDA算法 斜率大于一 时的现象
一.在斜率斜率小于一 时 他的直线是光滑的可以看到 运算没有问题但是斜率越接近于一 锯齿越明显二 在当斜率大于一时别问我斜率怎么确定的 开始点与终止点特别是斜率越来越大 时 割裂现象越明显这是因为x到y的映射 x每加一 Y集合中跨越越多接下来要用UI控件接受输入...原创 2019-09-25 11:00:13 · 3552 阅读 · 0 评论