自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 资源 (2)
  • 收藏
  • 关注

原创 我的音视频技术路线

我的音视频技术路线文章目录我的音视频技术路线音视频基础技术栈1. 关于音视频数据采集(Android)1.1 Android Camera API1.2 Camera HAL1.3 CameraX1.4 Camera专业视频(进阶)2. 关于图形渲染2.2 OpenGL/GLES2.3 音视频渲染引擎(扒抖音)3. 关于音视频图形部分3.1 滤镜篇3.2 美颜篇3.3 转场篇3.4 特效篇3.5...

2020-03-30 15:34:04 2561 1

原创 OpenGL编程指南-光照

OpenGL通过光源、材料和光照模型,渲染光照物体,模拟现实世界1.光源1.创建光源 OpenGL至少支持8个光源,即GL_LIGHT0到GL_LIGHT7,可以使用glEnable开启光源 2.设置光源属性设置光源方向:glLightfv(GL_LIGHT0, GL_POSITION,position)设置环境光:glLightfv(GL_LIGHT0,GL_AMBIENT,light_a

2016-10-29 10:39:19 656

原创 设计模式2-单例模式

单例模式看起来挺简单的,但我觉得特别实用,尤其是在线程方面应用广泛; 简单的说,单例模式就是系统中只允许产生这个类的一个实例; 单例模式通过类本身来管理其唯一实例,这种特性提供了解决问题的方法。唯一的实例是类的一个普通对象,但设计这个类时,让它只能创建一个实例并提供对此实例的全局访问。唯一实例类Singleton在静态成员函数中隐藏创建实例的操作。习惯上把这个成员函数叫做Instance(),它

2016-10-15 21:16:50 431

原创 设计模式学习1-工厂方法模式

前几天接到吉威时代电话面试,问了一个设计模式的问题,这方面自己只是了解,但不是很熟悉,所以没回答上,于是决定现在开始学习这方面的知识,先从最简单的工程方法模式开始:这种模式其实就是新建一个Factory接口,每个产品都有各自的工厂继承自该接口,来生产不同的产品,以水果为例:#include<iostream>class Fruit{public: Fruit(){}; virtu

2016-10-13 11:16:05 392

原创 OpenGL-对纹理的理解

看了《OpenGL编程指南》第九章纹理贴图之后,一开始还对纹理的理解思路还是有点乱,后面不断的阅读别人的博客之后才慢慢的有了更加清晰的认识,于是通过博客再进一步理顺一下思路。1.关于纹理的一些基本概念理解纹理:简单的说,纹理就是矩形的数据数组。例如颜色、亮度数据等,之所以复杂,是因为矩形纹理可以映射到非矩形的区域。 纹理映射:就是要实现如何把纹理像素映射到几何对象的每个点。2.纹理贴图的基本步骤2

2016-10-06 10:31:53 6903

原创 基于VGI签到类目关联规则挖掘

用c#语言写的一个数据挖掘的算法,数据是深圳和香港的2015新浪微博签到数据。1.数据分析签到数据中能够体现用户行为特性的只有[Category]。这个字段下的数据都可以表示用户当前的一个行为。用户每一条签到数据代表了该用户当下的一个行为,所以用户所有的签到数据放一起,就可以形成该用户的一个签到轨迹,同时也代表了该用户的一个行为轨迹。不同的用户有不同的行为轨迹,这些大量的行为轨迹放一起,其实就是代表

2016-09-29 11:24:28 597

原创 同名标靶点自动匹配算法实现-三点匹配

1.两个标靶数据 2.匹配结果 3.代码#include <iostream>#include <vector>#include <math.h>using namespace std;struct Point{ int id; float x,y,z; Point(int _id,float _x,float _y,float _z):id

2016-09-28 17:53:38 2816

原创 OpenGL编程指南-顶点数组、视图变换、投影变换

1.从绘制立方体来理解顶点数组以及视图变换看了Opengl编程指南第二章的内容,其中一个很重要的概念就是顶点数组,也按照书上所说写了一个绘制立方体的程序,其实是一个很简单的程序,可是一开始总是只显示一个正方形。这样的问题第一反应肯定是视角的问题,于是就想到视角变换glRotatef。其实刚开始一直在尝试投影变换的设置,由于不理解投影变换和视角变换的区别。后面仔细去看Nate Robbin的投影教程,

2016-09-12 11:10:26 990

转载 OpenGL与OpenCV实现增强现实

很久没有写博客了,最近在学习计算机视觉的相关知识,于是写了一个AR的小Demo。该程序通过OpenCV实现对Marker的识别和定位,然后通过OpenGL将虚拟物体叠加到摄像头图像下,实现增强现实。首先来看看我们使用的Marker:这是众多Marker中的一个,它们都被一圈的黑色边框所包围,边框之中是编码信息,白色代表1,黑色代表0。将每一行作为一个字,那么每个字有5b

2016-08-21 17:12:46 14454 6

原创 5个常用的排序算法总结

1.插入排序基本思想:插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕。 void insertSort(vector<int>& nums){ int k = 0; for (int i = 0; i < nums.size(); ++i) { int temp = nums[i]; int j

2016-07-27 11:01:23 633

原创 数据结构与算法-5大常用算法总结

1.贪心算法基本思想:贪心算法分阶段工作,在每一阶段,可以认为所做的决定是好的,而不考虑将来的后果。意味着选择的是局部最优,如果刚好是全局最优则算法正确,否则得到的是一个次优解。所有可以应用于不需要得到最佳答案,用贪心算法生成近似答案。1.1简单的作业调度问题问题:给出n个任务和每个任务的开始和结束时间。找出可以完成的任务的最大数量,在同一时刻只能做一个任务。vector<int> findComp

2016-07-26 10:18:52 4069

原创 Static关键字所有用法详解

以前总是对static的涵义模棱两可,不太敢用,也不知道什么地方改用,static用法非常广泛,静态变量、静态成员、静态函数等,如果用的好,会是程序提升一个等级,并且可以解决很多实际问题,比如单例模式...所以在这里进自己目前的理解做一个总结:用法1:

2016-07-13 10:22:54 10268

原创 如何快速上手使用OpenGL进行图形绘制

1.关于OpenGL几个常见的函数1.先看一个简单的绘制程序,绘制Polygon#include<Windows.h>#include<gl/GL.h>#include<gl/GLU.h>#include<GL/glut.h>void myInit(){ glClearColor(1.0, 1.0, 1.0, 0.0); glMatrixMode(GL_PROJECTION)

2016-07-08 16:24:12 5792

原创 sql server2008导入数据错误分析

错误信息 - 正在执行 (错误) 消息 错误 0xc02020a1: 数据流任务 1: 数据转换失败。列“列 2”的数据转换返回状态值 4 和状态文本“文本被截断,或者一个或多个字符在目标代码页中没有匹配项。”。 (SQL Server 导入和导出向导)错误 0xc020902a: 数据流任务 1: “输出列“列 2”(38)”由于发生截断而失败,而且针对“输出列“列 2”(38)”的截断

2016-07-06 16:34:03 21363 3

原创 关于虚函数的总结

虚函数可以实现多态特性,因此在设计模式中很有用,配合继承的特性可以提供很好的解决方案 1.impure virtual基类指定接口和缺省的实现方式,派生类重载基类中的虚函数,定义自己的实现方式,然后通过基类指针指向从而实现多态。class Man{public: virtual void sayHello() { std::cout << "Hello" <

2016-06-14 21:54:10 394

原创 重新学习《C++Primer5》第13章-拷贝控制

13.1拷贝、赋值和销毁13.1.1拷贝构造函数1.拷贝构造函数:自定义和合成 2.拷贝初始化在使用=号时将一个对象为实参传递给一个非引用类型的形参从一个返回类型为非引用类型的函数返回一个对象用花括号列表初始化一个数组中的元素或一个聚合类中的成员3.拷贝初始化的限制 explicit的构造函数进行类型转换,直接初始化和拷贝初始化不一样了13.1.2 拷贝赋值运算符1.赋值元算法通常应该

2016-06-06 10:30:22 539

原创 重新学习《C++Primer5》第12章-动态内存

12.1动态内存与智能指针12.1.1 shared_ptr类1.智能指针也是模板,定义方式一样 2.make_shared<>最安全的分配和调用方法auto p=make_shared<vector<string>>();//指向一个动态分配的空vector3.引用计数auto r=make_shared<int>(42);r=q;//递增q指向的对象的引用计数;递减r指向的引用计数

2016-06-01 10:47:50 1174

原创 重新学习《C++Primer5》第11章-关联容器

11.1 使用关联容器void Chapter11In1(){/*vector和map的不同:vector相当于一个数组,采用顺序存储。优点:不需要分配存储空间也可以向数组一个存取,并且可以动态操作,节省空间 确定:插入、删除操作效率低,添加只能在最后map由一个健值和一个映照数据一一对应关系组成,数据结构采用红黑树实现,健值不允许重复,比较元素只对健值比较list:采用链式存储,存储不连续

2016-05-18 11:11:30 571

原创 重新学习《C++Primer5》第10章-泛型算法

10.3 lamdba捕获1.值捕获int sz = 5;cout<<count_if(words.begin(), words.end(), [sz](const string &s){return s.size() >= sz; })<<endl;2.引用捕获 3.可变lamdbaauto fun = [sz]()mutable->bool{while (sz == 0)--sz;

2016-05-16 10:40:19 533

原创 重新学习《C++Primer5》第9章-顺序容器

9.1 顺序容器1.vector和string采用顺序存储,可通过下标访问,但插入和删除会很耗时。 2.list和forward_list不支持随机访问,添加和删除很快 3.deque支持快速随机访问,中间位置添加和删除代价很高,但两端添加和删除很快 Note:通常,使用vector是最好的选择,除非有更加合适的理由选择其它容器(根据容器的特性);如果不确定使用哪种容器,可以只使用vector

2016-05-05 17:00:46 813

原创 重新学习《C++Primer5》第8章-IO库

8.1 IO类1.IO对象不能拷贝或赋值ofstream out1,out2;out1=out2;//错误:不能对流对象赋值ofstream print(ofstream);//错误out2=print(out2);//错误因此通常以引用方式传递和返回流。读写一个对象通常会改变其状态,所以不能是const reference。 2.

2016-04-29 14:44:34 478

原创 重新学习《C++Primer5》第7章-类

7.1 定义抽象数据类型7.1.1 设计Sales_data类1.一个设计良好的类,既要有直观且易于使用的接口(对于用户来说),也必须具备高效的实现过程 2.

2016-04-21 10:51:43 639

原创 重新学习《C++Primer5》第6章-函数

6.1 函数继承1.局部静态对象size_t count(){ static size_t ctr=0; return ++ctr;}int main(){ for(size_t i=0;i<10;++i) cout<<count()<<endl return 0;}//输出1到10的数字局部静态对象第一次经过初始化,如果没有被显示初始化,则

2016-04-13 16:58:42 852

原创 重新学习《C++Primer5》第1-5章

第一章 开始1.输入输出 流:随着时间的推移,字符是顺序生成或消耗的;std::cout<<"Hello World"<<std::endl;<<运算符接受两个运算对象,左侧必须是ostream,右侧是要打印的值,计算结果返回ostream对象中。上述使用两次<<运算符,第一次运算结果成了第二次的左侧对象。 Note:在写重载<<运算符是要返回ostream& endl效果:结束当前行,并将与

2016-04-11 17:29:27 1248

原创 《Effective C++》阅读笔记03

4 设计与声明1.让接口容易被正确使用,不易被误用类的实际考虑全面,客户出错应该指出“促进正确使用”的办法包括接口的一致性,以及内置类型的行为兼容;shared_ptr指出定制删除器。2.设计class犹如设计type考虑三五法则的设计考虑继承和派生考虑访问private、protected、public考虑多态性考虑类型转换……3.pass-by-reference-to-c

2016-04-08 11:38:39 397

原创 OpenGL学习入门-GLFW配置

1.所需工具GLFW下载CMake下载2.编译过程解压下载的GLFW文件,安装CMake;然后打开CMake,source code为GLFW根目录,bulid为生成的目录,平台选择vs2012;然后点击configure,再次点击configure,再点击gengerate,显示done生成完成;打开sln解决方案,右键ALL BULID生成,得到编译的文件在src\debug文件下

2016-04-07 15:59:10 526

原创 《Effective C++》阅读笔记02

2.1 构造析构和赋值运算default版本: 编译器可以创建default构造、copy构造、copy assignment操作符,以及析构。但是当成员为引用或者const时,编译器不知如何在生成的赋值函数内面对它们。拒绝编译器生成default函数 将相应的成员函数声明为private,并且不予实现。多态基类声明为virtual的析构函数

2016-04-06 14:32:57 373

原创 《Effective C++》阅读笔记01

1.四大块:C、Objected-Oriented C++、Template C++、STL; 2.尽量使用const,enum,inline替换#define;const定义常量指针,定义class专属常量#ifdef/#ifndef还在使用对于单纯常量,多使用const或enums对于形似函数的宏,最好改用inline函数3.const的妙用:1)与指针的搭配:char gree

2016-03-31 17:18:23 373

原创 重新学习《C++Primer5》第16章-模板与泛型编程

16.1定义模板16.1.1 函数模板1.模板的定义:template<typename T1,class T2>.... 2.实例化模板函数: 3.非类型模板参数:template<unsigned N,unsigned M>当一个模板被实例化时,非类型参数被一个用户提供的或编译器推断的值所代替。模板实参必须是常亮表达式 4.两个重要原则:模板中的函数参数是const的引用函数体中的添加

2016-03-30 16:07:04 932

原创 重新学习《C++Primer5》第15章-面向对象程序设计

重新学习《C++Primer5》第15章-面向对象程序设计15.1 OOP:概述1.继承 派生列表:类定义后面 2.动态绑定 动态绑定:使用基类引用(或指针)调用一个虚函数时。15.2 定义基类和派生类15.2.1 定义基类#include<iostream>#include<string>using namespace std;class Quota{public:

2016-03-16 12:44:17 1378 2

间接平差计算代码

里面包括了间接平差设计步骤以及相关代码,矩阵计算代码

2014-07-07

mfc经典编程实例教程

里面有俄罗斯方块,播放器,管理系统等经典实例

2012-10-18

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除