- 博客(115)
- 资源 (17)
- 问答 (1)
- 收藏
- 关注
原创 【游戏开发】游戏服务器设计思考
目录1.游戏业务开发思考1.1客户端部分1.2服务器部分2.关于一个基础游戏服务器的设计思路3.一些思考1.游戏业务开发思考在游戏开发中,为了可以进一步加深对引擎底层代码的理解,通晓上层业务逻辑是非常必要的。往往游戏业务逻辑做的优秀的开发人员,也对引擎逻辑有非常独到的理解。这里将我对游戏业务相关的粗浅理解整理一下。游戏业务逻辑分为客户端部分和服务器部分。其中客户端部分逻辑主要负责游戏的表现,用来使得游戏的卖相更好。服务器部分逻辑是整个游戏的灵魂,绝大部分的游戏的逻辑、数值计算都发生在服务器部分(这里以状
2021-05-05 16:46:25
1144
3
原创 【游戏业务逻辑学习记录】
序言秋招结束,我作为一名游戏引擎研发新人,继续开始新的征程。关于这篇文章,是为入职前先深入了解游戏业务,为之后的MINIGAME和工作打下基础。目标是进行2个月的不间断更新,对目标的业务逻辑点进行研究和概述。后续会陆续放出Github连接。作为一名游戏引擎研发工程师,我给目前的自己定下两个方向:尽可能多的了解游戏业务方向的内容。继续深入引擎架构的学习。一方面是为了尽可能好的了解游戏目前业务拓宽知识的广度,另一方面不能放弃对自己专业深度的追求。目标记录2020.11.9经过长期的思考,并为
2020-11-09 15:09:23
900
1
原创 【迈向引擎研发工程师之路】21届应届经历记录
序言2021年秋招的经历已然临近尾声,我也和诸多校招生一样,选择了自己的道路。我越发觉得写一篇文章来记录我为游戏研发梦想奋斗的过程,是非常重要的。人是一种健忘的动物,或许在未来十年,这段经历在我的回忆当中也会渐渐遗忘。但是为了游戏研发理想坚持7年的过程,这对我的人生来说,不应遗忘。同时,我将这段经历分享出来,希望能够激励与我一样以游戏研发作为终身追求的人。我想通过这篇文章帮助一些与我类似的同学们,纠结是否应该追求梦想的同学们,逐渐被残酷的现实磨平自己理想的同学们,渐渐被教育体制打压的甘于平庸的同学们:你们
2020-11-08 17:18:17
1612
8
原创 【引擎开发技术点记录】QT引擎中的简易LOG设计
初衷游戏引擎作为一个大型的软件系统,如果进行设计的话,某一处出现了BUG,那么其查找起来是非常繁琐的。一旦代码量上w,那么debug工作将会变得非常令人困扰。为了解决这个问题,设计一个简单的LOG系统是非常有必要的。设计思路由于LOG系统与整个引擎的各个方面都是紧耦合的。为了避免代码冗余,我们使用宏的方式来设计LOG。我们使用一下几个C++当中常用的宏来设计我们的简易LOG。__FILE__ //用于得到当前的文件路径__FUNCTION__ //用于得到当前的函数__LINE__ //当前文件
2020-06-08 12:54:44
325
原创 【引擎开发技术点记录】RotationGizmo的纯C++实现方式
初衷写这篇小文章,是发现网上对于C++实现的Gizmo实现的描述太少了,大多都是在讲Unity Gizmo怎么使用。而我最近在研究开发自己的图形引擎,Gizmo的实现成为了我的一个障碍。研究一下,发现Gizmo的实现方式很有意思,虽然不难,但是给人一种很巧妙的感觉。所以有这篇文章。关于Gizmo从事游戏行业的同学只要用过商业引擎,那么Gizmo是一定使用过的。大多是用来显示表示物体的translate、rotate、scale等操作。本文给出rotation的实现方式。Gizmo与游戏Object之间
2020-06-06 22:47:49
564
1
原创 【C++必知必会】读书笔记
C++ 必知必会为什么再一次回头看C++自觉阅读C++相关书籍也已不少。但是有些经典内容值得不断去重复回顾。随着项目开发经验的增加以及代码能力的增强,往常看起来很经典的知识,再一次回顾会产生很多优秀的想法。这是我阅读《C++必知必会》的初衷。这本书我个人认为涵盖C++面试的所有知识,因此,各位可以通过本文来快速了解掌握这本书的干货,对于面试部分更加游刃有余。C++正文内容1.数据抽象类...
2020-04-10 17:06:16
618
原创 【谷歌校招技术笔试面试总结】
总结一下关于谷歌招聘的相关信息。谷歌的校园招聘从每月五月份开始。十二月份招聘实习。机器学习领域的同学可以通过谷歌机器学习冬令营,在校本科、硕士、博士均可参与,优秀者颁发实习。实习:例如谷歌软件开发工程师 2021 13周技术面试Kick Start必不可少。2次电话面+4次现场面 45min/次,考察设计能力,算法能力,编程能力。期望一个好的面试题是一点思路都没有,一般都是可以...
2019-10-23 20:59:53
840
原创 【记录】某游戏大厂的引擎岗复盘
1.光照存储方式有很多种,有2D,3D,CubeMap,SH公式多种方案。解释一下这些方式的优缺点。2.纹理采样时候透视矫正的原因与方法。3.D3D11格式,R8G8B8A8_UNORM与R16G16_UINT的含义以及范围。4.texture atlas的概念与作用。...
2019-10-13 13:27:20
544
2
原创 【游戏引擎开发必问】 渲染管线的剖析
本篇文章收录于 C++游戏开发的一些高级常识(持续更新)“你对渲染管线了解多少?”当我听到这个面试题的时候,我是懵逼的。很长时间以前学的图形学知识,都还给老师了。虽然看了蓝宝书,但是我一直以来没有精通一门图形语言,非常惭愧。不知死活的去面试引擎工程师在这道面试题当中被DISS了。知耻而后勇,出差回来之后,我仔细总结归纳,把我理解的渲染管线流程整理如下。本篇文章将分为三个部分进行讲解:GP...
2019-07-22 13:03:37
2496
3
原创 记录一次大厂的游戏引擎工程师的两次技术面试
写这篇文章的起因最近参加了字节跳动这家公司的游戏引擎工程师校招。首先这次笔试面试我觉得是对我自学的一种肯定。非常感谢字节跳动的两位面试官,感觉人都很NICE,虽然是视频面试,但是能够感受到字节跳动这家公司的优秀文化基因。对字节跳动这家公司的好感度爆长。本来是想等面试之后再记录总结一下,但是我发现面试的非常多,彩虹面,到最后怕忘了,因此总结归纳,反省自我。无论最后过还是不过,我都非常感谢字节跳动...
2019-07-09 14:58:44
6224
2
原创 “设计模式在游戏里面有哪些应用?”由一道面试题引发的《Game Programming Design》读后感
“设计模式在游戏里面有哪些应用?”三个礼拜前看到这道面试题我是懵逼的,就算看了《设计模式》和《大话设计模式》,我可能也就强行的将一些模式强行的套用到游戏上。比如说说观察者模式在游戏当中的使用,还可能说一说回调机制,解耦什么的。但是如果细问,这个问题我真的没有仔细思考过,并且卡住了壳。之前本科去北京一家游戏公司的实习,作为一个初级的客户端程序员,大多都是逻辑代码的堆叠。对于设计部分的思考大多都是...
2019-07-05 20:32:54
6312
1
原创 C++游戏开发的一些高级常识(持续更新)
C++程序员常识(纲领整理)1.使用C++进行内存管理2.C/C++程序的编译与链接过程3.静态链接库与动态链接库的意义、生成与使用4.C++如何实现委托5.C++如何实现反射6.C++的序列化实现7.C++运行时类型识别8.C++垃圾回收1.使用C++进行内存管理2.C/C++程序的编译与链接过程3.静态链接库与动态链接库的意义、生成与使用4.C++如何实现委托5.C++如何实现反射...
2019-02-20 14:53:40
4348
6
原创 Faster-RCNN运行demo的错误Unknown command line flag 'net'. Did you mean: network
absl.flags._exceptions.UnrecognizedFlagError:这个错误是由于demo.py没有加载Config.py当中的Flag。由于我一开始是在pycharm下运行的。后来我使用cmd python这个demo.py,就可以用自己训练的模型完成测试。...
2018-11-06 22:30:25
2654
原创 SSD目标检测训练自己的数据集:计算数据集当中每一个类别的框的数量
我在看有个同行的博客,发现他把SSD的训练总结的非常好,我用他的训练方法,使用VOC2007数据集进行训练跑通了代码。环境是WINDOWS10+tensorflow-gpu1.9版本。但是这个大兄弟的最终的类别框的计算代码有问题。这里把我写的代码与诸位分享一下。针对的是VOC2007的20分类数据集,最初发现我的输出结果与那个仁兄的训练数据对不上,我仔细检查了areoplane类别的计算结果,发现...
2018-10-23 16:49:43
3618
13
原创 "Failed to load the native TensorFlow"以及“tensorflow gpu 找不到对应DLL”
关于这个BUG,困扰我很久,这里记录一下。有一些朋友说是是tensorflow版本与组件对不上。需要依次在Python环境下对组件进行删除重装。但是Python环境下有非常非常多的组件环境下的时候,显然这是不科学的。我重装系统发现这个问题还是存在,后来发现,TENSORFLOW-GPU版本是对CUDA有要求的!!!一般来说,如果你的CUDA环境是CUDA8.0-CUDNN6.0的话,你只需...
2018-10-17 16:14:41
579
原创 MaxPoolingOp only supports NHWC. ERROR in my benchmark we would use NCHW dataformat
基于Tensorflow跑SSD遇到的大坑网上所使用的SSD代码是基于CPU的,因此其只能够支持NHWC格式的。那么这个应该从哪里修改呢?
2018-10-13 15:45:43
3632
2
原创 could not destroy cudnn handle: CUDNN_STATUS_BAD_PARAM
我的电脑是泰坦X的显卡,实验室花了2w多配的,不存在什么显存内存不够的情况,有一天跑实验报了非常奇怪的问题。正如题目所示,报错除了题目,还有如下三个:error retrieving driver version: Unimplemented: kernel reported driver version not implemented on WiCheck failed: stream-&g...
2018-09-20 14:17:23
2320
原创 提升编程能力的几个网站:ACM相关
对于国内的网站,比较优秀的如下: 一个综合的网站,什么编程题库资源都有 杭电的题库 计蒜客 近几年维护的很不错的网站 51Node 一个很不错的编程网站 对于国外的网站,比较优秀的如下: 国外的CodeForce有题库,每周也有比赛 USACO这是一个不错的入门网站虽然ACM的准备时间是高中毕业后5年,但是搞算法是百利而无一害的。 其中Google Jam也是一个比较好的证明自...
2018-09-16 16:30:04
1314
原创 WIN10+Tensorflow+Faster RCNN训练错误:No module named cython_bbox
在训练Faster RCNN的时候,在win平台下,有一些倒霉的小伙伴或许会出现如图的错误。这个错误的主要原因是,目前网上流行的Faster RCNN版本大多都是基于Py35的。当你使用Py36的环境去编译,那么就会出现这个问题。 我们需要对Faster RCNN项目当中的setup.py进行一点点修改。我们在程序的16行加上Extension( “lib.utils.cython_bbox...
2018-08-27 19:06:06
33252
85
原创 <划重点的Unity2017>Playable相关
1.Playable概述 2017新出现的Playable的新概念,这是一种可以自定义的运行时对象。(Runtime-Object)可以通过PlayableGraph来进行整合和链接。从而创建一个复杂的行为。 Playable可用于创建复杂而灵活的数据评估树。通过PlayableExtensions.Connect可以进行链接。树中的每个Playable都可以设置其每个孩子的“Weight”或“
2017-12-13 20:02:37
8005
原创 <划重点的Unity2017> UGUI
1.Canvas The Canvas is the area that all UI elements should be inside. The Canvas is a Game Object with a Canvas component on it, and all UI elements must be children of such a Canvas. 画布是所有UI元素应该在其中
2017-07-27 00:20:01
380
原创 <划重点的Unity2017>事件系统
(1)事件系统概述 1.Overview 概述the Event System itself is designed as a manager and facilitator of communication between Event System modules. 事件系统本身是作为两个事件系统模块的管理者。The primary roles of the Event System are
2017-07-25 23:55:02
1399
原创 <划重点的unity2017>关卡设计相关的物理系统
(1)固定关节 Fixed Joints restricts an object’s movement to be dependent upon another object. This is somewhat similar to Parenting but is implemented through physics rather than Transform hierarchy. The b
2017-07-19 22:08:35
697
原创 <划重点的Unity2017> 人物相关的物理系统组件详述
继续上一篇对物理系统的概述。本篇主要学习和物理系统相关联的一些组件。这里略去了一些无聊的碰撞体,直接从一些平时注意不到但是很有意思的组件开始。 首先介绍一个基础概念:力矩在物理学里是指作用力使物体绕着转动轴或支点转动的趋向。 (1)Character Joint Character Joints are mainly used for Ragdoll effects. They are an
2017-07-18 23:05:45
807
原创 <划重点的UNITY2017> 物理系统概述
Unity2017出来之后,很多有意思的新功能出现了。我想通过这个栏目,整理一下Unity的重点知识。参考Unity的最新文档。国外的知识都共享,而我看到很多国内教学都是二道贩子,用一些没啥价值的知识虎龙小白。本来就是二手知识(来源于最新官网文档)还收钱,这也是导致国内外知识传播时间和空间差距太大的原因之一。楼主水平有限,尽全力去整理总结,本栏目仅仅包含重点知识以及一些有意思的环节。一方面通过博客来
2017-07-17 22:34:30
614
原创 <OpenCV1> 简单滤波器+波纹函数
#include <iostream>#include <opencv2/opencv.hpp>using namespace std;using namespace cv;//该函数目标是让目标图像锐化void Sharpen(const Mat &image, Mat& result){ //主要是访问目标像素周围的函数 //原理是拉普拉斯算子 //也可以创建一个
2017-04-19 16:59:18
877
原创 蓝桥杯模拟赛 猜算式
第一次参加比赛,感觉之前学的好多东西都不知道怎么用,感觉准备很不充分。但是我还是想去拼一下,大不了明年接着刷,保研保本校跟着院长混。废话不说,直接发出代码。暴力破解,其中代码块复制粘贴了很多,很容易的思路。通俗易懂。 由于我之前做过不少工程项目,我非常不习惯竞赛当中毫无意义的变量,这玩意遇到难题给你代码你都看不懂。非常爆炸。但也是我修为尚浅,继续努力吧。和CSDN诸君共勉。#include <io
2017-03-24 15:32:50
627
原创 <Unity代码笔记> 残影实现
之前发现很多残影系统的教学课程都是花钱的,五十一百什么的。 要不就什么插件,费钱的很。本来没有那么复杂的东西都那么蛋疼的要钱,我把我之前整理的残影代码发出来供大家分享。 原理:实现人物残影和所用的人物模型当中有几个材质有关。可以考虑使用一个容器进行存储。接下来在单位时间内copy素白模型并且对shader内部的透明度进行线性降低,就可以实现残影特效。最后在把透明度为0的删除就好。逻辑非常简单。下
2017-03-03 19:29:52
827
原创 <杂谈>参加饿了吗高管讲座的一些记录
有幸饿了吗公司高管使我们的直系学长,走技术路线出身,前后IBM研究院,央企,猎头,金融,到最后的互联网行业,C++编程出身。给我震撼非常大。 自以为大一大二都对得起我上学的时光,绩点也刷的专业第二,C#看了两本大部头,深入研究unity,然而一比还是浅薄的一比。这个夜晚的演讲,希望能够改变我的道路,修正我的道路,让我不再浮躁功利的去学习。也希望能够给和我一样的,处于迷茫当中的,无知浅薄的小白们一些
2016-10-24 23:05:37
512
1
原创 unity代码笔记<3>自动寻径
其实自动寻径的功能,在unity已经完美封装好了,我们应该做的就是对其中封装好的属性函数进行完美的使用。using UnityEngine;using System.Collections;public class Locomotion{ private Animator m_Animator = null; private int m_SpeedId = 0; priva
2016-10-09 14:49:19
1035
原创 渲染世界的OPENGL<16>纹理进阶-纹理数组
着色器可以一次性访问几个纹理对象,我们可以进一步使用称为纹理数组的特性。 在纹理数组上,我们可以将整个数组的纹理图像绑定到一个纹理对象上,然后在着色器当中对他们进行检索,这样就大大增加着色器可用纹理数据的数量。(1)加载2D纹理数组 纹理数组添加了两个新的纹理对象作为大多数纹理管理函数的有效参数:GL_TEXTURE_1D_ARRAY, GL_TEXTURE_2D_ARRAY。对于
2016-10-01 16:38:15
3202
1
原创 渲染世界的OPENGL<15>纹理进阶-点精灵
点精灵(Point Sprite)使用点精灵我们可以通过绘制一个3D点将一个2D纹理图像显示在任意位置上。 点精灵最常见的应用就是微粒系统。我们可以用点来表示在屏幕上移动的大量微粒,来产生一些视觉效果。但是把这些点表示为很小的重叠2D图像就是戏剧性流动着的细丝。 点精灵允许我们通过发送单个3D顶点,渲染一个完美对齐的纹理2D多边形。点精灵所需要的带宽只有为四边形发送四个顶点所用的带宽的四分之一,
2016-10-01 15:25:29
2303
原创 渲染世界的OPENGL<14>纹理进阶-多重纹理
多重纹理 OPENGL允许我们将独立的纹理对象绑定到一些可用的纹理单元上,从而提供了将两个或更多纹理同时应用到几何图形上的能力。我们可以对实现进行查询:GLint iUnits;glGetIntegerv(GL_MAX_TEXXTURE_UNITS, &iUnits);默认情况下,第一个纹理单元为活动的纹理单元。所有纹理绑定操作都会影响当前活动的纹理单元。我们可以通过调用以纹理单元标识符为变量的
2016-09-27 16:47:49
1317
原创 渲染世界的OPENGL<13>纹理进阶-矩形及立方体贴图
1.矩形纹理对于二维纹理图像来说,另一个有用的选项是纹理目标:GL_TEXTURE_RECTANGLE. 纹理特点:不能进行MIP贴图,意味着我们只能够加载glTexImage2D的第0层。 纹理坐标不是标准化的。这就意味着纹理坐标实际上是对像素寻址,而不是从0到1的范围覆盖图像的。 注意纹理坐标不能重复,并且不能支持压缩。 例如:纹理坐标(5,19)实际上是图像中从左起6个像素以及从上面起
2016-09-25 17:29:52
3482
原创 渲染世界的OPENGL<12> 一些有趣的纹理着色器
从着色器访问纹理贴图是非常简单的。纹理坐标将会作为属性传递到我们的顶点着色器,在片段着色器当中,这些属性通常是在顶点之间进行平滑插值的。片段着色器使用这些差值纹理坐标来对纹理进行采样。(1)只处理纹理单元// The TexturedIdentity Shader// Vertex Shader// Richard S. Wright Jr.// OpenGL SuperBible//最为简
2016-09-20 16:29:27
2482
原创 渲染世界的OPENGL<11>模拟光线
(1)简单漫反射光 3D图形应用最普遍的光线类型就是漫射光。漫反射光是一种经过平面反射的定向光,其强度和光线在表面的入射角成正比。 要确定一个指定定点上的光线的强度,我们需要两个向量。第一个向量就是光源的方向。某些光源技术只是提供一个指向光源的向量,我们称之为定向光。对于所有顶点来说指向光源的,都是同一个向量。 注意:这种方式在光源距离被照亮物体非常远的情况下是非常适用的。如果照明代码提供的是
2016-09-19 21:49:41
1187
原创 渲染世界的OPENGL<10>GLSL编程-着色器统一值
属性是每个顶点位置、表面法线和纹理坐标都需要的,而统一值则用于为整个图元批次向保持不变的着色器传递数据。对于顶点着色器来说,最普遍的统一值就是变换矩阵。任何着色器变量都可以指定为一个统一值,而统一值可以在3个着色器阶段中的任意一个阶段。 创建统一值的方法很简单,只需要在变量声明开始的时候放置一个uniform关键字。 统一值不能标记为in或out,他们也不能在着色器阶段之间进行插值,并且他们总是
2016-09-18 21:52:51
779
手势识别DollarOne完整算法
2016-10-03
glew2.0源码
2016-09-03
Opengl超级宝典part2
2016-09-03
超级宝典GLToolspart1
2016-09-03
freeGlut(无需编译)
2016-09-03
计算机图形学
2016-01-31
C++一个输入输出类层次的问题
2016-01-27
TA创建的收藏夹 TA关注的收藏夹
TA关注的人