自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 Effective c++ (1)

effective c++

2017-11-28 08:07:45 244

原创 STL 容器应用场景

STL中常见容器,主要包括如下几种: vector, list, deque,set,multiset, map, multimap。选用合适的容器,对编写高效的程序,简洁的代码有重要意义; 最近就项目中就涉及到一个容器选择的问题,设计一个数据结构时,开始使用了一个错误的容器,容器设计非常复杂,使用起来也特别不方便,代码冗余而且昂长。后来重新设计数据结构,使用其他的容器,将将近150行的代码,缩

2017-10-23 21:59:33 1907

转载 堆 和 栈详解:存储位置,作用机理,区别

转自此处问题描述编程语言书籍中经常解释值类型被创建在栈上,引用类型被创建在堆上,但是并没有本质上解释这堆和栈是什么。我仅有高级语言编程经验,没有看过对此更清晰的解释。我的意思是我理解什么是栈,但是它们到底是什么,在哪儿呢(站在实际的计算机物理内存的角度上看)?在通常情况下由操作系统(OS)和语言的运行时(runtime)控制吗?它们的作用范围是什么?它们的大小由什么决定?哪个更快?答案一

2017-10-23 09:12:27 3667 1

原创 UML表示以及对应的实现代码

1,继承。 代码实现class Son : public Father{}2,实现接口 代码实现:class Son : public EatImp{}3,关联:当一个类知道另外一个类时。 代码实现:class Bird{ private: Climate* m_Climate;}4,聚合关系:聚合表示的“拥有关系”,体现在A对象可以B对象,B对象不是A对象

2017-09-11 11:36:23 1005

转载 c++ 四种类型转化方式

声明:转载出处:转自此处C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是:TYPE b = (TYPE)a,但是c 风格的类型转换有不少的缺点,有的时候用c风格的转换是不合适的,因为它可以在任意类型之间转换,比如你可以把一个指向const对象的指针转换成指向非 const对象的指针,把一个指向基类对象的指针转换成指向一个派生类对象的指针,这两种转换之间的差别是巨大的,但是传

2017-09-11 10:13:04 903

原创 c++ 零碎知识点集锦 二

1dynamic_cast将基类指针或者引用安全的转化到派生类的指针和引用2const_cast将常量指针或者引用转化为非常量的指针和引用3mutable的用法关键字一旦被改关键字修饰则可以改变任何变量的值包括const4dllimport 和 dllexport的含义及其用法5 __declspec的用法和含义6 动态链接库7 静态链接库8 外部链接 和 内部链接的区别9 实例化派

2017-09-09 11:08:06 201

原创 C++ 零碎知识点集锦 一

1,纯虚函数的定义:函数后面有=0,纯虚函数无需定义。void Func() = 0;2,虚函数: 作用:定义为虚函数,子类可以重写基类的虚函数。使该函数在基类和子类中存在多种定义(也就是多态)。2.1,如何通过虚函数实现多态? 虚函数和普通函数主要不同之处是:虚函数是运行时才被解析,确定调用该虚函数的是基类还是子类。然而普通函数则是在编译期就解析确定。//三个子类,一个父类SonA,SonB,

2017-09-09 11:06:28 288

转载 C++中 atexit函数 exit函数

一、exit()函数 函数声明:void exit(int state); exit()函数用于在程序运行的过程中随时结束程序,exit的参数state是返回给操作系统,返回0表示程序正常结束,非0表示程序非正常结束。main函数结束时也会隐式地调用exit函数。****exit函数运行时首先会执行由atexit()函数登记的函数,然后会做一些自身的清理工作,同时刷新所有输出流、关闭所有打开的流

2017-08-20 08:23:55 477

原创 多种方法实现多态!!!

本博客解决 如下几个问题!!!第一:什么是多态? 第二:传统方法怎么实现多态? 第三:是否有新的方法实现多态?什么是多态? 多态:多态指同一个实体同时具有多种形式。它是面向对象程序设计(OOP)的一个重要特征(引自百度百科)。 通俗解释:就是同一种实体,按道理来说,仅仅能表明一种状态。但是通过技术手段,让其可以表示多种状态,这就是多态!!!举个栗子 【例子】 编程角度解释:一个接口,多种

2017-07-29 21:55:51 3091

转载 SVN各种符号介绍

参考该连接SVN项目中常见符号介绍:灰色向右且中间有个减号的箭头(本地删除了,而SVN上未删除的文件),也就是说你删除确认后,一定要记得上库,跟svn保持一致。蓝色向左且中间有个减号的箭头(SVN上删除了,而本地未删除的文件)–比对svn库上代码,确定需要删除后,更新svn(删除无用代码)。红色双向箭头(SVN上修改过,本地也修改过的文件 )–这个表示本地和svn上都修改过,最好就是把本地修改合并到

2017-07-09 10:40:03 1126

原创 vs2015单元测试总结——3种方法可用

VS中有个非常有用的功能,单元测试。通过单元测试,开发人员和测试人员可以快速的检查C#,.net和c++项目中各个类的方法中是否有逻辑错误。单元测试仅仅需要创建一次,那么在每次更改源代码时候运行,以确保不引入bug。      对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里或C++里单元指一个类,图形化的软件中可以指一个窗口或一个菜单

2017-06-24 11:58:27 19901 3

原创 函数模板限定数据类型 和 类模板限定数据类型 的方法

函数模板非常有用,特别实在对不同类型的数据进行统一处理的时候,比如说比较两个数的大小,template<typename T>bool compara(T& a,T& b){ return a<b;}但是有时候有特殊需求,比如说之前我做的一个项目,需要能够处理以glm中vec2,和vec3为数据类型的数据,进行同样的操作,但是又不能让其他类型的数据能够访问到该函数模板。此时就需要一种限

2017-06-23 10:14:19 7851 1

转载 STL unique()函数学习

在STL中,unique()函数是一个去重函数,STL中unique的函数 unique的功能是去除相邻(说明是对已经排序的容器进行去重)的重复元素(只保留一个),还有一个容易忽视的特性是它并不真正把重复的元素删除。他是c++中的函数,所以头文件要加#include<iostream.h>具体用法:int num[100];unique(num,mun+n)返回的是num去重后的尾地址,之所以说比不

2017-06-21 18:18:41 298

原创 OpenGL零碎知识点记录<仅供自己查看>

1:在几何着色器中,如果从顶点传入的原始位置坐标,没有被几何着色器作为中介传到片段着色器中的话,则不再显示原始顶点,仅仅显示几何着色器中生成的顶点。 2: uniform image2D 和uniform sampler2D 的区别。目前来看对于采样纹理的使用方法不一样: image2D 采样的话,使用//imageLoad — load a single texel from an image

2017-06-20 20:16:49 784

原创 VS 错误集锦

1:.dll 或者 .lib文件导入错误,运行时弹出框找不到dll文件,或者找不到.lib文件。请先确认dll和lib文件路径是否配置正确。如果正确还是提示这个错误,那么请重新打开该项目。

2017-06-19 10:03:05 172

原创 Shadow volume实现细节

背景介绍背景介绍:目前阴影算法较为流行的有两种,分别是shadow mapping 和shadow volume。前者实现起来相对简单,可以发挥现在GPU可编程流水线的能力,但是由于先天不足,shadow mapping在处理动态光源/物体的时候开销过大,经常作为一种静态场景中的廉价替代物。而 Shadow volume 的强项恰恰是 shadow mapping 的短处,像 DOOM3 这种大量

2017-05-25 11:04:34 3515 13

原创 阴影映射总结

阴影映射技术,也就是在场景中产生物体阴影的技术。增加场景的真实感,和空间感。主要思路: 首先,我们以光的位置作为视角进行场景的渲染,由于在程序中设置了深度缓冲,所以被遮挡的物体,或者物体的一部分不会被看到,也就是说看不到的地方,就是场景中物体的阴影。我们可以使用深度缓冲技术,获得每个fragment的深度值(一般为0到1之间),阴影部分的深度值肯定比对应位置的遮挡物的深度值大。获得的同时,把深度值

2017-05-10 10:07:49 524

原创 OpenGL的矩阵变换详解——有图有真相

OpenGL有个小小的难点,就是矩阵变换的顺序问题。一不小心就会用错,变换后的物体和自己想要的完全不一样。为了自己的理解,也为了帮助别人的理解,我下面对矩阵变换做一个解释。当然,大片大片的文字肯定会让大家看的云里雾里,所以我特意画了一些示意图供大家理解。 首先向大家明确一点,当你在程序中调用矩阵变换函数时,实际执行顺序和调用顺序刚好相反,例如:glm::mat4 trans; tra

2017-04-28 23:22:19 6394 2

原创 C++,关于指针形参”值传递VS地址传递“的问题

先上两个代码片段,也请大家考虑下两个片段运行的结果 第一个代码片段#include <iostream>void test(int* p1){ int b = 6; *p1 = b; std::cout << p1 << "**test**" << *p1 << std::endl;}int main() { int *p = NULL; int a

2017-04-26 21:55:03 496

原创 BRDF详解

BRDF详解 光照模型主要分为三类,测量模型,经验模型和基于物理的分析模型。 在计算机图形学中介绍的光照模型为经验模型中的Phong模型(也就是本人理解的,根据点距光源的位置,入射角度等信息计算的 反射强度,包括漫反射强度,镜面反射强度),但是Phong模型的光照模型有很强的塑料感,不够真实(如下图一)。所有有人提出了BRDF模型,这是一种基于物理的分析模型,创建的光照模型效果较好(如下图二)

2017-04-20 19:12:48 14487

原创 引用妙用

学习引用的概念时,总觉得缺少应用场合来帮助理解引用这个概念,同样也不知道引用是做什么的,今天学习的时候发现一个引用的妙用。和大家分享一下。 先上代码string a("hello world!!");for (auto &c: a) { if (c == 's' && c == 'w') { c = toupper(c);

2017-02-26 15:27:24 479

原创 实时渲染——三种渲染方法介绍

实时渲染,一般有三种渲染方法,多光源一次渲染,多光源多次渲染和延迟着色。多光源一次渲染:对于每个物体,计算所有光源对其的影响来对该物体进行渲染for each object do for each light do framebuffer = light_model(object,light);这是一个简单的方法,但是存在一些问题和缺陷。 第一个问题由于光照是针对每一个物

2017-02-25 11:08:30 11905

原创 QT的信号与槽机制

信号和槽是QT的核心机制,有着广泛的应用。有必要对信号与槽机制做一个总结。 首先说明一点,信号与槽机制可以代替某些常用的GUI工具包中的回调函数机制(回调函数用来响应他们能触发的每一个动作),这也会使编写的通信程序变得更加的简洁明了。信号和槽机制能够携带任意数量,任意类型的参数,他们的类型完全是安全的,并不会想回调函数那样产生core dumps。下面详细介绍 信号 当某个信号对其客户或所有者

2016-09-26 18:49:00 233

原创 glClearColor函数,glClear函数的底层解析

今天学了两个函数,分别为 void glClearColor(GLclampf red,GLclampf green,Glclampf blue,GLclampf alpha);功能是:为颜色缓存区指定确定的值 和 void glClear(GLbitfield mask);功能是,清除缓存,将缓存清除为预先的设置值。 这是我在网上找的函数解释,但是一直都感觉缺少点什么,对这两个的理解也并

2016-08-29 15:58:19 3092 2

原创 双缓冲和单缓存的区别

双缓冲和单缓存的区别编码时遇到glutInitDisplayMode(unsigned int mode) ;函数,主要作用是设置初始显示模式,其中有两个可用形参不甚理解。分别为GLUT_SINGLE,GLUT_DOUBLE。其中GLUT_SINGLE指定单缓存窗口,GLUT_DOUBLE指定双缓存窗口。这里必须要搞明白双缓存窗口和单缓存窗口的区别。单缓存窗口:实际上就是将所有的绘图指令在窗口上执行

2016-08-29 09:59:52 3906

原创 cv中实现滚动条随着视频播放移动

废话不多说直接给代码。#include "cv.h"#include "highgui.h"#include using namespace std;using namespace cv;int g_slider_position = 0;//定义滑块的位置CvCapture* g_capture = 0;//定义一个可以包含所有文件信息的数据类型CvCaptureint n = 0; //定义一

2016-08-06 19:21:29 427

原创 初涉opencv——opencv安装问题

安装,测试opencv

2016-08-06 09:37:14 377

原创 初学java——关于数组容易忽视的地方总结

1:静态初始化:有程序员显示指定每个数组的初始化,由系统决定数组的长度。     动态初始化:程序员只指定数组长度,由系统为数组元素分配初始值。2:java数组变量是一种引用类型的变量,引用的是堆内存中数组对象,而不是栈内存中的数组变量。例如数组int[] A={1,2,3};int[] B={4,5,6};当执行下面语句时:A=B;则int[] A={4,5,6};引用数组A时,变量为数

2014-12-13 21:12:49 297

空空如也

空空如也

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

TA关注的人

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