首页 > 新文章
  • C++引用与指针的区别 is a project mainly written in , based on the . ★ 相同点:     1. 都是地址的概念;     指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。     ★ 区别:     1. 指针是一个实体,而引用仅是个别名;     2. 引用使用时无需解引用(*),指针需要解引用;     3. 引用只能在定义时被初始化一次,之后不可变;指针可变�...

  • C++中结构体与类的区别(struct与class的区别) is a project mainly written in , based on the .C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能。 struct能包含成员函数吗? 能! struct能继承吗? 能!! struct能实现多态吗? 能!!!   既然这些它都能实现,那它和class还能有什么区别? 最本质的一个区别就是默认的访问控制,...

  • C/C++ 全局变量和局部变量在内存里的区别?堆和栈 is a project mainly written in , based on the .一、预备知识—程序的内存分配  一个由c/C++编译的程序占用的内存分为以下几个部分  1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈,如果还不清楚,那么就把它想成数组,它的内存分配是连续分配的,即,所分配的内存是在一块连续的内存区域内.当我们声明变量时,那么编译器...

  • CUDA之单thread单block多thread单block多thread多block is a project mainly written in , based on the .用简单的立方和归约来举例: //单thread单block #include #include #include #define DATA_SIZE 1048576 int data[DATA_SIZE]; //产生大量0-9之间的随机数 void Gene...

  • Learn OpenGL (一):打开窗口 is a project mainly written in , based on the .原文Hello Window作者JoeyDeVries翻译Geequlim, Krasjet 环境VS2015+OpenGL3.3 #include #include 请确认是在包含GLFW的头文件之前包含了GLAD的头文件。GLAD的头文件包含了正确的OpenGL头文件...

  • CUDA存储器模型 is a project mainly written in , based on the .存储器模型有: •Register •Local •shared •Global •Constant •Texture •Host memory 寄存器与Local memory •对每个线程来说,寄存器都是线程私有的--这与CPU中一样。如果寄存器被消耗完,数据将被存储在本地存储器(localmemory)。 •Localm...

  • Learn OpenGL (二):三角形 is a project mainly written in , based on the .知识补充: 顶点数组对象:Vertex Array Object,VAO顶点缓冲对象:Vertex Buffer Object,VBO索引缓冲对象:Element Buffer Object,EBO或Index Buffer Object,IBO 蓝色部分代表的是我们可以注入自定义的着色器的部分。 图形渲染管线的第一个部分是顶...

  • Learn OpenGL (三):着色器 is a project mainly written in , based on the .GLSL 着色器是使用一种叫GLSL的类C语言写成的。GLSL是为图形计算量身定制的,它包含一些针对向量和矩阵操作的有用特性。 着色器的开头总是要声明版本,接着是输入和输出变量、uniform和main函数。每个着色器的入口点都是main函数,在这个函数中我们处理所有的输入变量,并将结果输出到输出变量中。如果你不知道什么是unif...

  • Learn OpenGL (五):向量 is a project mainly written in , based on the .叉乘 叉乘只在3D空间中有定义,它需要两个不平行向量作为输入,生成一个正交于两个输入向量的第三个向量。如果输入的两个向量也是正交的,那么叉乘之后将会产生3个互相正交的向量。接下来的教程中这会非常有用。下面的图片展示了3D空间中叉乘的样子: 不同于其他运算,如果你没有钻研过线性代数,可能会觉得叉乘很反直觉,所以只记住公式就没问题...

  • Learn OpenGL (四):纹理 is a project mainly written in , based on the .为了能够把纹理映射(Map)到三角形上,我们需要指定三角形的每个顶点各自对应纹理的哪个部分。这样每个顶点就会关联着一个纹理坐标(Texture Coordinate),用来标明该从纹理图像的哪个部分采样(译注:采集片段颜色)。之后在图形的其它片段上进行片段插值(Fragment Interpolation)。 纹理坐标在x和y轴上,...

  • Learn OpenGL (六):坐标系统 is a project mainly written in , based on the .为了将坐标从一个坐标系变换到另一个坐标系,我们需要用到几个变换矩阵,最重要的几个分别是模型(Model)、观察(View)、投影(Projection)三个矩阵。我们的顶点坐标起始于局部空间(Local Space),在这里它称为局部坐标(Local Coordinate),它在之后会变为世界坐标(World Coordinate),...

  • Learn OpenGL (七):摄像机 is a project mainly written in , based on the .1. 摄像机位置 获取摄像机位置很简单。摄像机位置简单来说就是世界空间中一个指向摄像机位置的向量。我们把摄像机位置设置为上一节中的那个相同的位置: glm::vec3 cameraPos = glm::vec3(0.0f, 0.0f, 3.0f); 不要忘记正z轴是从屏幕指向你的,如果我们希望摄像机向后移动,我们就沿着z轴...

  • Learn OpenGL (九):基础光照 is a project mainly written in , based on the .环境光照(Ambient Lighting):即使在黑暗的情况下,世界上通常也仍然有一些光亮(月亮、远处的光),所以物体几乎永远不会是完全黑暗的。为了模拟这个,我们会使用一个环境光照常量,它永远会给物体一些颜色。漫反射光照(Diffuse Lighting):模拟光源对物体的方向性影响(Directional Impact)。它是...

  • Learn OpenGL (八):颜色 is a project mainly written in , based on the .当我们在OpenGL中创建一个光源时,我们希望给光源一个颜色。在上一段中我们有一个白色的太阳,所以我们也将光源设置为白色。当我们把光源的颜色与物体的颜色值相乘,所得到的就是这个物体所反射的颜色(也就是我们所感知到的颜色)。 创建一个光照场景 在接下来的教程中,我们将会广泛地使用颜色来模拟现实世界中的光照效果,创造出一些有趣的视觉效...

  • Learn OpenGL (十):材质 is a project mainly written in , based on the .在上一节中,我们指定了一个物体和光的颜色,以及结合环境光和镜面强度分量,来定义物体的视觉输出。当描述一个物体的时候,我们可以用这三个分量来定义一个材质颜色(Material Color):环境光照(Ambient Lighting)、漫反射光照(Diffuse Lighting)和镜面光照(Specular Lighting)。通过为...

  • Learn OpenGL (十二):投光物 is a project mainly written in , based on the .平行光 当一个光源处于很远的地方时,来自光源的每条光线就会近似于互相平行。不论物体和/或者观察者的位置,看起来好像所有的光都来自于同一个方向。当我们使用一个假设光源处于无限远处的模型时,它就被称为定向光,因为它的所有光线都有着相同的方向,它与光源的位置是没有关系的。 定向光非常好的一个例子就是太阳。太阳距离我们并不是无限远,但它已...

  • Learn OpenGL (十一):光照贴图 is a project mainly written in , based on the .在着色器中使用漫反射贴图的方法和纹理教程中是完全一样的。但这次我们会将纹理储存为Material结构体中的一个sampler2D。我们将之前定义的vec3漫反射颜色向量替换为漫反射贴图。 注意sampler2D是所谓的不透明类型(Opaque Type),也就是说我们不能将它实例化,只能通过uniform来定义它。如果我们使用除un...

  • 如何解决VS2015编译C4996错误 is a project mainly written in , based on the .解决方案: 1.项目 ->属性 -> c/c++ -> 预处理器 -> 点击预处理器定义,加入_CRT_SECURE_NO_WARNINGS 2.预编译头文件中添加 #define _CRT_SECURE_NO_WARNINGS 3.#pragma warning( disable : 4996) 4.在VS中新建项目的时候去...

  • C++11 之模板定义别名(using) is a project mainly written in , based on the .C++11标准中可以为模板定义别名,比如 template using ptr=std::shared_ptr; //这里模板定义ptr为智能指针std::shared_ptr定义的别名 所以实际应用中可以借此来简化代码,比如 #include #include

  • CUDA+OpenCV实现光线追踪(有无constant) is a project mainly written in , based on the .常量内存是NVIDIA提供的一个64KB大小的内存空间,它的处理方式和普通的全局内存和共享内存都不一样,是有cuda专门提供的。 线程束的概念:线程束是指一个包含32个线程的集合,在程序中的每一行,线程束中的每个线程都将在不同的数据上执行相同的指令。 因此,常量内存的作用是,能够将单次内存的读取操作广播到每个半线程束(即16个线程...