- 博客(44)
- 收藏
- 关注
原创 OpenGL的学习之路 -5
人眼看世界,有一个可见范围。范围内可见,范围外不可见。在OGL中,有两种投影方式,对应两种视景体。,矩阵A变化,太阳自转,地球跟着太阳转;透视投影(可见,从视觉效果上,透视投影更符合人眼),地球自转的同时绕着太阳公转,同时,太阳也在自转。2.几个代码示例(主要目的:弄明白 变换栈),矩阵C变化,地球实现自转的效果;‘D’或者‘d’以及‘Y’或者‘y’(4)月亮绕着地球转、地球绕着太阳转。(2)键盘控制的自转和公转。1.视景体 正交投影。(上图仅学习记录用)透视投影(替换代码)(1)三个球绕红球转。
2023-11-26 22:37:54
454
1
原创 OpenGL 的学习之路-4(变换)
9个参数,三个一组,前三个是相机的位置,中间三个是相机看向的方向,后三个是相机的top方向。这里,一开始,相机位于原点位置,相机看向z轴负半轴(也就是屏幕里),相机的top方向是y轴的正方向。拍摄受相机的影响,影响相机的三个因素:相机的位置、相机的指向、相机的top方向。如果把相机比作人的眼睛的话,眼睛的位置、眼睛看向哪里、头的歪头。所有的变换操作是放在一个栈中的,在施加一个新变化上,该语句的作用是向栈中压入一个I(单位阵),也就是现在还无变换。3.如果有多个变换的函数,先施行的是最下面的,然后往上进行。
2023-11-18 21:58:56
207
原创 OpenGL的学习之路-3
令点A代表骰子的点数为1、4,点B代表骰子的点数为2、5,点C代表骰子的点数为3、6。现在开始扔,如果扔的点数为1或者4,那么取AP的中点作为新的P;如果扔到的点数为3,6,则同理取CP的中点作为新的P。同时,要把每次取得的新的P绘制出来,并保持与相应的A或B或C同色。glBegin(GL_LINES_LOOP) :给出的两个相邻的点首尾相连,最后一个点和第一个点相连,构成环。点和点之间是配对的,如果给的点的个数是奇数,那么最后一个点没有找到和他配对的点,会不起作用。明明是随机的,却呈现了规律性。
2023-11-13 15:43:57
532
原创 OpenGL学习之路-2
引入bool量isShowSubWin0, isShowSubWin1, isShowSubWin2, isShowSubWin3来判断是否应该显示该子窗口。1.回调函数myMainWinReshape中:改变窗口大小时,先将原来子窗口销毁(如果存在的话),再重新产生新的子窗口。道理上是这个样子,但是我在实际运行过程中,拖动鼠标改变窗口大小时,出现了问题。差不多是说,没有注册给窗口6的回调函数。可能和我这个freeglut有关系的。8.多窗口且子窗口能够跟随reshape的变化而变化。
2023-11-13 09:04:16
97
原创 凸包的学习之路
那么如何确定最初的那个极点呢,这里采用Lowest-then-Leftmost策略,实际上是两条准则,先找最低的点(也就是y值最小的点),如果存在多个y值相同的点,那么在找那个最左的点(也就是x值最小的点)。那极边的特性是,除了构成该极边的两个极点之外,剩下所有的点都在该极边的一边。OK啦,休息一下啦。如果是逆时针转的话,下一个极边从极点k出发,对其他点 l 进行搜索,如果新的 l 在kl的右侧,则更新极点。然后,松手,橡皮筋就会套在“最外面”的那些钉子上,会呈现出一个轮廓,这个轮廓构成的形状,就是凸包。
2023-11-12 18:26:32
121
原创 OpenGL学习之路
2.回调函数myMouse:四个参数,第一个int _button代表的是点击的是鼠标的哪个键(左键、中键、右键),int _state代表的是状态(按下DOWN、松开UP),int _x代表x坐标,int _y代表y坐标.2.glutCreateSubWindow(mainWin, 0, 0, 200, 200) : 子窗口,其主窗口为mainWin,位置(0,0),大小(200,200)按下F5之后,执行了 glutSpecialFunc(NULL),再按下其他的特殊键,也不会执行什么了。
2023-11-05 21:50:08
161
原创 学习总结:关于C++ 4
是为data对应在内存中预留了大小为100的空间,只要存入的元素的内存大小不超过100,就不会“搬家”。但是,此时,data的大小还是0。对对象data中的元素进行循环,首先创建迭代器对象it,这个东西类似数组却不是数组,类似指针却不是指针。,可以直接向对象data中压入元素x,data的size也自然+1。这句话之后才是为vector对象data分配了20个空间。19(通过构建一个“迭代器”来探索迭代器的原理)首先,建立了一个vector类型的对象data,上述程序属于STL编程(也就是标准模板库编程)
2023-10-22 14:44:24
46
原创 学习总结:关于C++ 3
执行POW3(a++)之后,得到的是a*(a+1)*(a+1+1),那么最后a将变成a+1+1+1。BB结束之前,要告知他的父类,AA再执行析构函数。(没有函数调用的过程),调用pow3(a++),返回a*a*a,最后a将变成a+1。17(朋友类在父类中声明,相当于授权给子类能看见父类的private)15(继承中出现同名——加帽子,以及子类结束后父类也要再结束)这里不太明白的是,为什么a初始为16 0,而不是0 0。16(虚拟成员函数被继承的子类中的同名函数掩盖)如果使用内嵌函数inline。
2023-10-05 16:02:40
61
原创 Canny边缘检测
也可以直接用opencv的Canny函数,一句代码就可以实现。真的是傻瓜使用方式。这里面我觉得非极大值抑制那里的代码不太对,我在下面的代码中改了一下。Canny.h(自定义头文件)具体原理可以去某站学习。
2023-10-03 21:44:23
75
原创 学习总结:关于C++ 2
这样定义一个头文件,用宏来减少了工作量。但是,不适合多人协作编程...而C++中提供了更好的方式。疑问:为什么前面出现了"kill me!",说明是执行了析构函数?9( 宏的使用可以减少重复作用代码编写的工作量,但是...)10(结构体中使用模板template - 一)11(结构体中使用模板template - 二)8(类中成员函数之操作符的重载)project的结构如上。project的结构如上。7(类的分文件编写)
2023-10-03 11:06:43
67
原创 学习总结:关于C++ 1
(2)规定每一个结构体中都有一个this指针指向它自己,*this就是指向的具体的值。(3)在成员函数的函数头中的函数返回类型后的&,表示“引用”,作用是返回的不是一个临时开辟进行存储的空间内容(临时变量),而就是它自己!(2)函数参数带有标记&,意味着“引用”(reference),形参变成了实参的别称(同一个东西,同一块内存空间)。(4)C语言中不允许函数同名,而C++中允许,只要函数的参数不同就可以。(2)根据类构造对象时,其后参数的不同,调用不同的构造函数。4(引用,没有值传递的过程)
2023-10-02 22:41:50
61
原创 Code::Blocks使用指南之多文件编程
main函数中包含对函数的调用,但使用时需 include"add.h"要注意新建的源文件和头文件要成对出现并且名字也要一样。如果要使用多文件来编写程序,要新建。记得要勾选这两个,否则会失败的!
2023-09-22 14:51:02
3593
原创 【曲面参数化】games301第一讲
上图中,第1幅是一个螺旋线放在了三维空间中,但实际上用一维空间的线就可以将它表示出来,所以说,它的本质上是一维的;第2幅是一个曲面放在了三维空间上,但实际上用二维空间的平面就可以将它表示出来,所以说,它的本质上是二维的;第3幅的是三维空间中的一个看似不太规则的体,它的本质上是三维的。不同的最优准则(破坏一些什么,保留一些什么【根据目的】):度量曲面的几何性质(几何量)的变化。【例1】地图——地球表面展开(不同的展开方式,最后得到的地图也是不一样的)第一,函数的简化:映射f 线性函数空间(基函数的线性组合)
2023-09-13 23:13:50
348
原创 Sift算法的框架
到这里只是完成了Sift基本内容,关于进一步的实现,还要学习其他相关内容!还差一个调用这些函数的、包括Sift实现框架的函数。
2023-08-18 23:21:03
149
1
原创 【概率论与数理统计】二维随机变量:分布函数(联合分布函数、边缘分布函数)、联合概率密度、边缘概率密度、联合分布律、边缘分布律
宋浩老师概率论课程的笔记
2023-08-09 16:51:01
3545
原创 【概率论与数理统计】事件、古典概型、几何概型、条件概率、乘法公式、全概率公式、贝叶斯公式、事件的独立性、伯努利模型
笔记内容来源于宋浩老师概率论课程
2023-08-04 16:42:29
234
1
原创 机器学习2022吴恩达老师课程——学习笔记(五)
2022吴恩达老师机器学习课程的笔记(五)——Scaling Feature(特征缩放)、判断收敛的方法以及梯度下降中学习率的选择
2023-08-01 18:25:14
339
1
原创 机器学习2022吴恩达老师课程——学习笔记(四)
2022吴恩达老师机器学习课程的笔记(四)——关于multiple Linear Regress的模型、成本函数、梯度下降的实现
2023-07-28 07:05:38
185
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人