自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

疯狂的程序员

https://cxx001.gitee.io

  • 博客(193)
  • 资源 (3)
  • 收藏
  • 关注

原创 博客迁移 https://cxx001.gitee.io

博客新地址:https://cxx001.gitee.io

2023-02-02 15:12:21 155

原创 1553B板卡详解

1553b板卡主要应用于航天航空工业领域,它的数据传输结构有点类似集中分布式服务器的设计,分为BC、RT、BM三类部件,BC有且仅有1个,类似我们的master管理服务节点,RT有0~32个,类似我们的各业务服务节点,BM则是监控节点。所以按传统服务器设计结构也很好理解1553B了。

2023-11-24 15:54:34 571 4

原创 《Effective Modern C++》全书内容提炼总结

在C++98时,我们要屏蔽某些成员函数不让调用,一般做法是声明为私有且不去实现它们。public:private:如果内部或友元函数调用了它们就会在链接时引发缺少函数定义的错误。在C++11中有一种更好的方式,用= delete将函数标记为删除,这样如果有地方调用了它,直接在编译时就会报错,比传统方式报错提前了而且报错信息更加友好。public:通常,deleted函数被声明为public而不是private,这是有原因的,C++会在检查deleted状态前检查它的访问性。

2023-11-24 15:45:38 188

原创 c++20新特性

自C++11这个大版本更新以来,后来陆续有两次小版本迭代C++14、C++17,它们主要是对C++11的补充扩展,并没有增加太多大的特性。而这次的C++20,和当年C++11一样,又是一次重大更新,有人甚至说这是一门新语言。

2023-09-05 16:13:00 733

原创 c++17新特性

,这样像以前静态成员变量必须在cpp中初始化的限制也没有了,成员变量可以直接在头文件也可以初始化了。

2023-08-31 17:40:56 483

原创 c++14新特性

C++14新增函数返回值也可以使用auto自动推导了。但是注意下面特殊场景:函数内如果有多个return语句,它们必须返回相同的类型,否则编译失败。如果return语句返回初始化列表,返回值类型推导也会失败。如果函数是虚函数,不能使用返回值类型推导。返回类型推导可以用在前置声明中,但是在使用它们之前,翻译单元中必须能够得到函数定义。返回类型推导可以用在递归函数中,但是递归调用必须以至少一个返回语句作为先导,以便编译器推导出返回类型。

2023-08-31 17:39:55 287

原创 c++11新特性

现代C++借鉴了很多脚本语言特性,编写越来越简洁高效了。下面就C++11新增特性做一个总结。使用using定义别名有些场景比typedef更加简洁而且更符合人们的理解。using定义别名可以全面替换掉typedef,下面举几个与typedef对比明显优势的例子:示例1:模板取别名// 使用typedef// ...// 使用using// ...示例2:函数指针取别名// 使用typedef// 使用using(这种更好理解)

2023-07-20 10:33:25 108

原创 go开源项目slgserver源码分析

比较适合作为go语言入门学习项目或轻量级游戏项目,整体的项目结构和编码质量还是可以的。不过距离商业项目还是差点意思,如服务负载、容灾这块还没有。gateserver 网关服loginserver 登录服chatserver 聊天服httpserver http服slgserver 游戏服其中httpserver就是常规http服务,主要提供一些辅助操作,如账号注册、修改密码什么的。其它4类服务则是用websocket相互连接的。

2023-07-03 14:07:56 1131 1

原创 boost库使用

下面介绍完整安装boost库的方法:boost库官网双击运行,会生成。然后执行以下命令:或者直接双击运行。等待编译完成,会在boost根目录下生成和两个文件夹,其中是中间文件,可以删除。下才是生成的dll或lib文件。打开项目属性,至此环境就以及配置好了,下面测试一下:程序正常运行: 列出所有编译的库 查看所有参数使用综合使用:toolset:表示编译器工具,我安装的是VS2010,所以是msvc-10(如果你是VS2005,可以使用msvc-8.0 VS2008是msvc-9.0)architec

2023-07-03 14:06:25 954

原创 OpenCL入门

OpenCL是一个异构平台编程框架,也是异构并行计算的行业标准,由Khronos Group来维护。旨在充分利用GPU强大的并行计算能力以及CPU的协同工作,更高效的利用硬件完成大规模(尤其是并行度高的)计算。简单说,CPU并不适合计算,它是多指令单数据流(MISD)的体系结构,更加擅长的是做逻辑控制,而数据处理基本是单流水线的,所以像代码这种在CPU上要重复迭代跑很多遍。但是我们的显卡GPU则不这样,GPU是典型的单指令多数据(SIMD)的体系结构,它不擅长逻辑控制,但是确实天生的向量计算机器,对于上面这

2023-07-03 14:05:45 371

原创 《Effective C++》 全书内容提炼总结

提前定义变量,有可能导致变量并没有使用(如中间抛异常了),而平白多了一个构造和析构成本。但是循环怎么办?// 方式AWidget w;i < n;...// 方式Bi < n;++i) {...做法A:1个构造 + 1个析构 + n个赋值操作做法B:n个构造函数 + n个析构函数打破本条款选择A的依据:(1)你知道赋值成本比“构造+析构"成本低。(2)你正在处理代码中效率高度敏感的部分。否则你应该使用做法B,维持变量尽可能在使用时定义的原则。

2023-07-03 14:04:02 238

原创 c++崩溃调试总结

dump文件的生成常用有两种方式,一种是在程序main中封装崩溃时写dmp文件接口,一种是windbg工具。方式二:windbg产生dmp文件首先商店直接下载,安装windbg工具​然后通过.dump命令生成dmp文件。如果程序启动就崩溃,使用Launch executable选择exe,如果是运行期间崩溃,使用Attach to process选择对应进程。然后点击GO开始,等待崩溃后,在Command下面命令窗口输入.dump命令即可。同样常用有两种方式,一种是通过直接打开文件调试,一种是使用工

2023-07-03 13:57:59 606

原创 C++动态库使用

Linux动态库的后缀是.so文件,而window则是.dll文件。

2023-07-03 13:56:49 201

原创 windows11安装Linux子系统

个人博客地址:Windows在10之后自带了虚拟机子系统功能,可以和本地磁盘共享,默认挂载到/mnt/目录下面。比起传统的VM方便多了。

2023-07-03 13:54:05 4098

原创 Docker使用

Docker由下面3个东西组成:参考:CentOS Docker 安装 | 菜鸟教程 (runoob.com)我的测试环境是,使用的官方安装脚本自动安装。安装完成后,重启docker服务。常用命令通过容器提交镜像以及推送镜像流程我们本地一个容器如果想要提交到docker仓库供别人pull下载使用。操作流程如下(和git使用类似):注册docker仓库账号地址: Docker Hub本地提交容器为镜像

2023-07-03 13:51:47 540

原创 CMake入门

你或许听过好几种 Make 工具,例如 GNU Make ,QT 的 qmake ,微软的 MS nmake,BSD Make(pmake),Makepp,等等。这些 Make 工具遵循着不同的规范和标准,所执行的 Makefile 格式也千差万别。这样就带来了一个严峻的问题:如果软件想跨平台,必须要保证能够在不同平台编译。而如果使用上面的 Make 工具,就得为每一种标准写一次 Makefile ,这将是一件让人抓狂的工作。CMake就是针对上面问题所设计的工具:它首先允许开发者编写一种平台无关的 CMa

2023-07-03 13:45:41 83

原创 提炼《跟我一起写 Makefile》教程

objects = main.o kbd.o command.o display.o \ # 定义变量(类似c/c++中的宏)edit : $(objects) # 变量使用把多条命令定义成一个变量,后续可以使用这个变量来替代一组命令。语法以define开始,以endefdefine run-yacc #命令包的名字yacc $(firstword $^) #运行Yacc程序mv y.tab.c $@ #文件改名endef#命令包使用$(run-yacc) #和使用变量一样。

2023-07-03 13:38:15 64

原创 Linux多进程数据交换--共享内存

在linux系统开发当中,时常需要在多个进程之间交换数据,在多个进程之间交换数据,有很多方法,但最高效的方法莫过于共享内存。linux共享内存是通过tmpfs这个文件系统来实现的,tmpfs文件系的目录为/dev/shm,/dev/shm是驻留在内存 RAM 当中的,因此读写速度与读写内存速度一样,/dev/shm的容量默认尺寸为系统内存大小的一半大小,使用df -h命令可以看到。但实际上它并不会真正的占用这块内存,如果/dev/shm/下没有任何文件,它占用的内存实际上就是0字节,仅在使用shm_open

2023-07-03 13:22:08 743

原创 threejs物理效果和声音

threejs中创建物理场景我们用它的扩展库:。它可以使场景中的对象有重力效果,可以相互碰撞,施加力之后可以移动,还可以通过合页和滑块在移动过程中在对象上施加约束。这个库是基于另一个著名物理引擎实现的,它只是为了适配threejs对其包装了一层,因此只是一个包装器,所以它也可以与其它的物理引擎一起工作,在它的github代码仓中你也可以发现一个使用不同的物理引擎的分支版本。创建物理场景步骤:物理场景中添加网格对象,就是把换成包装的几何体网格,这样对象就会受物理的影响了。Physijs提供的约束对象如下:

2023-06-30 14:08:52 297

原创 threejs后期处理

这个通道可以传递一个自定义的着色器,将大量的额外效果添加到场景中。Threejs提供的简单着色器:另外,一些提供模糊效果的着色器:margin : 0;var mesh;// 各种shader通道 var mirror = new THREE . ShaderPass(THREE . MirrorShader);

2023-06-30 14:06:16 351

原创 threejs纹理

UV映射是指指定纹理的哪部分显示在物体的表面上。默认是将整个纹理显示到物体表面上,一般不需要修改,如果要自定义UV映射,指定部分纹理显示到物体表面,通常都是借助建模工具完成(Blender)。原理是修改几何体对应面的每个顶点的属性,这个属性有两个维度u/v,对应属性的x/y,取值范围0~1。// 第一个面(由3个顶点组成) geom . faceVertexUvs [ 0 ] [ 0 ] [ 0 ] . x = 0.5;

2023-06-30 14:03:29 538

原创 threejs动画

个人博客地址:前面我们所用的模型大都是静态的,没有动画,没有生命。这节我们将赋予它们生命。动画。这些其实在前面章节示例里或多或少已经使用了。

2023-06-30 14:01:30 518

原创 threejs使用外部模型

个人博客地址:前面我们都是用Threejs提供的几何体来创建网格,对于简单几何体(如球体和方块)来说非常有效,但当你想要创建复杂的三维模型时,这不是最好的方法。通常情况下,你可以使用三维建模工具(如Blender和3D Studio Max)来创建复杂几何体。本节就来学习如何加载和展示由这些三维建模工具所创建的模型。

2023-06-30 13:49:37 724

原创 threejs精灵和粒子系统

个人博客地址:前面我们了解到了场景中的网格对象由几何体和材质组成,并且分别系统学习了它们。这节我们将学习一个特殊的网格对象-----粒子(精灵)。

2023-06-30 13:45:37 327

原创 threejs高级几何体

它可以围绕一组点创建一个凸包,所谓凸包就是包围这组点得最小图形。它允许你从一条光滑曲线创建图形。这条曲线绕物体的中心z轴旋转,就得到了类似花瓶或铃铛的图形。它可以从一个二维图形通过沿着某个轴(默认z轴)拉伸创建出一个三维图形。它可以沿着一条三维样式曲线拉伸出一根管子。读取SVG中路径信息转换为three.js图形。它可以创建基于公式的几何体。创建三维字体文本。其内部使用的是THREE.ExtrudeGeometry拉伸。就是将各种标准几何体组合在一起创建出新的几何体。这被称为CSG技术,在Th

2023-06-30 13:43:00 209

原创 threejs几何体

个人博客地址:前面在场景那节只是简单介绍了threejs中可用的几何体,本节和下一节将深入讨论threejs提供的所有几何体(不包括上一节探讨过的THREE.Line)。

2023-06-30 13:40:26 126

原创 threejs材质

个人博客地址: https://cxx001.gitee.io前言前面简单的介绍了材质,你已经了解到材质结合几何体就可以创建网格,网格对象才可以添加到Threejs渲染的场景中。材质就像物体的皮肤,决定了几何体的外表。如,几何体看起来是否像金属、透明与否,或者显示为线框。threejs提供的材质:名称描述MeshBasicMaterial(网格基础材质)用于给几何体赋予一种简单的颜色,可显示几何体的线框MeshDepthMaterial(网格深度材质)这个材质使用

2023-06-30 13:36:51 1111

原创 threejs光源

没有光源,渲染场景将不可见。threejs中已经帮我们实现了大量的光源,我们可以直接使用,主要分为两类:基础光源和特殊光源,下面将依次详细介绍。

2023-06-30 13:29:52 441

原创 threejs场景

对象添加到场景里才能被渲染,场景是整个画面的容器。场景要显示任何东西,一般要有摄像机、光源、渲染对象。本章主要介绍场景类里常用的方法和属性,以及构建场景的基本组件。几何体和网格:网格可以添加到场景中渲染,网格由几何体和材质组成。几何体由顶点和面(一般是三角形,也有四边形)组成。几何体决定网格的形状,材质决定网格的样式。场景中摄像机对象,分为透视投影摄像机和正交投影摄像机。margin : 0;

2023-06-30 13:21:55 276

原创 threejs入门

随着HTML5的发布,我们可以通过WebGL在浏览器上直接使用显卡资源来创建高性能的二维和三维图形,但是直接使用WebGL编程来创建三维场景十分复杂而且还容易出问题。而使用Three.js库可以简化这个过程,它对WebGL做了进一步封装,降低了使用门槛。WebGL整体原理其实和OpenGL差不多,只是运行平台不同而已,它是基于OpenGL-ES绑定javascript而来。底层关系:注: 本系列教程并不是用的threejs最新版,threejs官方一直在持续优化更新,可能有些API使用有些许变化。

2023-06-30 11:34:13 273

原创 pomelo源码解析--启动项目(pomelo start)

);// 最后实际执行app.js function start(opts) {if(!if(!} var ls;if(!!} else {});});} }

2023-02-02 13:16:06 568

原创 pomelo源码解析--新建项目(cli工具: pomelo)

pomelo怎么新建项目官方文档1. 安装pomelo2. 新建项目HelloWorld我简单整理了下创建新项目关键步骤:安装pomelo方式一:$ npm install pomelo -g·方式二:$ git clone https://github.com/NetEase/pomelo.git$ cd pomelo$ npm install -g·注:如果npm安装特别慢,安装国内淘宝镜像cnpm,此后的命令我们可以用cnpm 来替代 npm。安装命令如下:npm

2021-07-29 00:04:50 684

原创 独立游戏开发 - 【王牌老司机BT】

福利 --> 扫码底部我们游戏二维码进入游戏,在邀请好礼模块中成功邀请50位玩家截图私信我,我将免费提供整套源码。源码仅用于学习交流,版权归作者所有!前言王牌老司机BT是一款Q版数值合成类休闲游戏,不断通过两台相同等级汽车合成更高级汽车,收益更多金币,解锁世界名车。数值系统是该游戏核心魅力所在,经过长期大量测试、反馈优化,结合了玩家心理,合理设定阶段性挑战,整体节奏感很强,后期动画效果优化后会具有很强代入感,时刻感受财富暴涨的冲动。下版本计划新增红包返利系统,将玩家玩游戏看广告产生的收益一部

2021-07-19 22:42:30 692 7

原创 DFA算法(敏感字屏蔽)

DFA算法又称为有限状态机,是由一个树状结构实现(链表构建),每次匹配从根节点出发,遍历树查找,直到叶子节点结束。各个节点就好比各个状态一样,从上往下依次跳转。下面以敏感字查找替换为例,创建敏感词库树状结构如下:结构图:<猪一样的队友,xxxxxxxx>R -> |-->a |-->b |-->c |-->d

2021-03-18 00:14:56 1386

原创 【Linux C与C++一线开发实践】之六 多线程高级编程

在多线程编程中,所有的线程都是并发、并行并且是异步执行的。这样就带来了线程间资源竞争的无序性,因此,我们需要引入同步机制来消除这种复制度并实现线程间的数据共享,以一致的顺序执行一组操作。场景:多个线程对同一临界区做操作。利用POSIX多线程API函数进行线程同步POSIX提供了3种方式进行线程同步,即互斥锁、读写锁和条件变量。1.互斥锁互斥锁的原理是同一时刻,只允许一个线程对临界区进行访问。其工作流程是:初始化一个互斥锁,在进入临界区前把互斥锁加锁,退出临界区时把互斥锁解锁,最后不用了就销毁它,这4

2021-03-17 23:51:51 489 2

原创 【Linux C与C++一线开发实践】之五 多线程基本编程

123

2021-03-10 23:53:43 600

原创 【Linux C与C++一线开发实践】之四 Linux进程间的通信

Linux中的进程为了能在同一项任务上协调工作,它们彼此之间必须能够进行通信。下面主要介绍Linux常用的3种通信方式:信号、管道和消息队列。 效果差别不大,熟练一种基本可以应对一般的一线开发场景了。(这里讲的进程间通信是指同一台物理机上多个进程间通信,跨机器一般是socket通信)信号...

2021-03-06 16:58:11 467

原创 【Linux C与C++一线开发实践】之三 Linux多进程

进程是操作系统结构的基础。进程是一个具有独立功能的程序对某个数据集在处理机上的执行过程,进程也是作为资源分配的一个基本单位。Linux作为一个多用户、多任务的操作系统,必定支持多进程。多进程是现代操作系统的基本特征。一个进程也可以通俗理解为就是我们运行的一个独立的程序。进程的创建1.使用fork创建进程由fork创建的新进程被称为子进程。该函数调用一次,但返回两次。两次返回的区别是在子进程中返回值是0,而在父进程中返回值是子进程的PID。如果失败,则在父进程程序中返回-1,并且可以通过errno得到错

2021-03-03 23:58:51 711 1

原创 【Linux C与C++一线开发实践】之二 Linux文件系统

文件系统是操作系统中负责管理和存储文件的软件系统。当我们在Linux下查看根目录下的内容时,见到很多的目录文件,那么这么都是一些什么文件呢?下面我们来先了解下:目录名存放的内容/根目录/bin必备的用户命令程序,例如ls、cp等/bootLinux启动时用到的一些文件,如/boot/vmlinuz为Linux内核文件/sbin必备的系统管理员命令,如:ifconfig、reboot等/dev设备文件,如mtdblock0、tty1等/etc系

2020-09-26 00:57:40 891

原创 【Linux C与C++一线开发实践】之一 Linux概述与Linux C++开发

Linux系统启动的基本过程对于一台Linux系统来说,用户按下开机按钮后,一共要经历如下几个过程。#mermaid-svg-RkhQG4sawKPJZv3s .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-RkhQG4sawKPJZv3s .label text{fill:#333}#mermaid-svg

2020-09-23 21:16:04 2640

文件操作实战练习资源

练习资源练习资源练习资源练习资源练习资源练习资源练习资源练习资源练习资源练习资源练习资源练习资源练习资源

2020-09-26

pomelo 2.2.5

pomelo源码安装

2019-01-28

点满这些技能树,你也是卓越的游戏开发者

点满这些技能树,你也是卓越的游戏开发者,罗列了游戏前端开发需要知道的方方面面

2016-02-02

空空如也

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

TA关注的人

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