自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 资源 (10)
  • 收藏
  • 关注

原创 组件:c语言基于统计的反比例负反馈定时器

背景介绍通常游戏帧率的微小浮动并不太会影响用户体验,人的视觉感受能力计较低。一般仅需要使用简单的休眠来控制帧率就满足需求。但在音频播放时,这种定时器迎来巨大的挑战。人的耳朵能感受到的音乐质量通常很高,微小的频率震荡都可能引起不适。曲有误,周郎顾。说的就是这种情况。更苛刻的是声卡接口的特殊性,对于以60帧采样的音频流,每一块长度为 1 / 60秒。如果播放频率大于60帧,那么由于播放过快,导致块之间形成空隙,听起来会有颤音。如果播放过慢,那么播放缓冲区将随着时间逐渐填满,并逐渐与原始音轨发生滞后差

2022-04-26 12:00:51 1171 2

原创 组件:c语言2幂采样平均帧率统计

背景介绍帧率统计常用于游戏限帧,视频音画同步等地方。是时间类组件的重要部分。基本思路1.2幂长度的环形缓存区能便于计算。2.每帧采样并计算帧间间隔填入缓存区。3.每帧都利用统计的帧缓冲计算平均帧率。使用这种方式,每一帧都能得到正确的平均帧率,仅计算进出缓冲的时间间隔效率高。1.最终使用案例https://bitbucket.org/mm_longcheng/mm-core/src/dev/mm/src/core/mmFrameStats.hstatic void MyTes

2022-04-26 10:45:10 3371

原创 用vulkan写个引擎 (四)PBR着色器

PBR全称(Physicallly-Based Rendering),基于物理的渲染。本文将提供一份GLSL实用型着色器。对于理论部分网络上已经有太多文章了。仓库:https://bitbucket.org/mm_longcheng/mm-vulkan扣扣交流群:554329899一、着色器入参问题对于着色器入参的不同会导致着色器实现的不同1. 顶点着色器的顶点属性,是否有骨骼蒙皮。2.片段着色器对于PBR需要的采样器的提供程度不同,而顶点着色器传过来的数据也有不同。我的方案是将入参

2022-03-28 09:55:28 1464

原创 用vulkan写个引擎 (三)ui组件

ui组件也许是最令人着迷的部分。这部分最复杂的要数文字排版系统,比较重要的部分分别是属性集部件,信号槽部件,布局系统。相对复杂的部分是图片顶点数据拼装。一、统一布局坐标系为了可以适配动态变化的窗体大小,我参考了cegui的“The Unified Co-ordinate System”。它使用两个量来表达一个维度(offset, scale)。offset代表标量,scale代表给予父节点的附加量。当我们定位一个距离右边缘10单位的位置时,就可以使用(-10, 1)来表示。当父窗口的大小发生变动时可

2022-03-03 14:04:12 4186

原创 用vulkan写个引擎 (二)vk组件

这篇文章开始展开介绍工程的组织方式和组件模块。首先从vulkan组件开始。大部分文章都是把官网例子重复一遍,或是罗列接口说明,根本不足以用在生产环境。注意,文章主要表述组件的功能和要点,和它们之间的关联配合,并不会大面积的罗列代码,如果想参考源码,可以直接拉取仓库查看。仓库:https://bitbucket.org/mm_longcheng/mm-vulkan扣扣交流群:554329899我们的接口需要做到哪些功能:1.vulkan运行时环境的启动和关闭。2.与原生os层接口交互,创建

2022-03-03 01:10:49 861

原创 用vulkan写个引擎 (一)综述

https://zhuanlan.zhihu.com/p/466830308自己写个游戏引擎,这是个有趣的工程实践,vulkan的设备覆盖率已经非常高了。android 7.0以上的设备占比75%左右,iphone 6以上设备90%左右,桌面平台基本都支持,可以预见是个高收益的渲染接口。鉴于本人精力有限才疏学浅,我仅支持vulkan渲染接口,如OpenGL是不支持的。在工程组织方面,考虑良久,最终选择直接使用原始IDE工程,下载完毕即可打开编译调试,最大限度避免卡环境卡编译。支持平台:android

2022-02-28 01:40:42 6019

原创 组件:c语言版本事件集EventSet

背景介绍相信做过界面编程的人都会对事件回调机制不陌生。事件的概念抽象了对象间的通讯机制,解耦了不同类型互相强引用的情况,将对象的关系用一种类似连接电话线的方式简化。而实现一套事件系统需却不简单。通常我们需要满足的案例情况:a.静态函数和成员函数(当然c不需要考虑成员函数)b.在事件被派发过程中如果产生了解注册,系统不能崩溃c.是否考虑多线程d.事件系统通常需要一个事件被多个函数注册的情况基本思路我们设计时仅考虑简化了的情况,我们将以链表保存注册函数。需要考虑派发过程中的解注册。以智能指

2021-10-28 14:01:39 480

原创 组件:c语言版本字符串String

背景介绍为什么大多数人选择c++而不是c?我想可能是因为c标准里面没有方便使用的字符串"string"。虽然c标准确实不应该规定字符串实现,但是作为最终使用者的我们,还是迫切希望能有一份开箱即用,并且拥有现代字符串的品质,避免重造轮子的同时也能满足日常需要。基本思路// clang generally mode simplify string.// https://github.com/llvm-mirror/libcxx/blob/master/include/string// http

2021-10-28 11:02:42 322

原创 组件:c语言版本属性集PropertySet

背景介绍我想使用过QT的同学会比较熟悉里面的一个概念"属性"Property。用过CEGUI的人也会发现里面有一个小型的“属性集”PropertySet。它们通常被集成在基础组件中,被用来做对象的属性设置接口,这套系统为配置文件和界面布局工具带来了便利。int value = 0;myType t;t.setValue("A", "123");t.getValue("A", &value);以上就是较为常用的方式,通过字符串的设置,来将属性数值

2021-10-28 04:16:20 406

原创 tcp长连接的双向加密

一、历史和基础做即时通讯项目,网游登录等业务时,我们通常需要一种能在线回推的机制,这时候客户端的tcp长连接就可能派上用场了。示意图:二、问题产生曾经做过一个项目,之前老的加密方案为:1.客户端发一个rsa公钥G1给服务端(明文),自己留着S1 2.服务端生成一个对称加密rc4秘钥,使用客户端的rsa公钥加密后发给客户端(明文) 3.服务端发完秘钥后将tcp的接收和发送...

2019-08-31 00:27:13 2708

原创 手动材质(ManualTexture)拼合,RenderTarget宽高在不支持非2幂设备上的解决方案

(一)问题的产生:部分设备,比如android的老款机型,并不支持非2幂宽高的尺寸。那么当我们申请一个手动材质(ManualTexture)时怎么办呢?通常的解决方案一般是将申请的材质宽高做扩展让他等于一个大于等于宽高的最小2幂。如宽高为12x7将转化成16x8。这样我们解决了非2幂问题。然而,我们得到了一个新问题,简单的扩展导致了存储的浪费,在宽高比较小的情况下,这种浪费可能还能...

2019-06-20 01:04:44 202

原创 CEGUI自定义控件及适配CEED编辑器

CEGUI自定义控件及适配CEED编辑器<一>. 自定义控件首先大致描述一下我理解的自定义控件。a. CEGUI自带的控件不能满足自己需求b. 我们通常从CEGUI::Window派生这个是伪代码(cxx范本, 本文尽量只列出关键部分, 讲诉原理,可能存在部分错误)我们这里使用CEGUI::Button做派生例子,CEGUI::Window因为无需Falagar...

2019-04-07 01:11:00 1368

原创 流缓冲区的特化版本(适用于通用tcp业务包)

这是c++标准库的流缓冲区接口http://www.cplusplus.com/reference/streambuf/streambuf/基本理念是使用游标标识缓冲区的读写点,让缓冲区尽量以惰性扩容和减容来减少性能开支.一下是我的特化版本的的主体结构// Ethernet len[46~1500] MTU 20 // udp head  8 1500 - 20 -  

2017-09-29 23:54:54 271

原创 opengl es 初始化及android切后台opengl上下文丢失

做ogre1.9 的 android版本适配时发现原有的gl上下文丢失会导致原有贴图资源全部失效,而这个情况的发生仅仅是由app切进切出后台触发.找了一圈后发现ogre 1.10新版本已经解决了这个问题,做版本升级时过了一遍egl的初始化过程.附带我的依赖库集合,mit协议:https://bitbucket.org/mm_longcheng/mm_lib 自用基础库和包装库就先不

2017-09-29 21:42:42 1983 3

原创 android工程的mk写法。

android因为用的gcc和g++编译,需要写makefile文件来编译armeabi或者armeabi-v7a的库。首先感谢这篇文章:android mk终极写法编译第三方库我这里只加了剔除的功能。还有一些容易出错的地方。我把库都放在一起,比如dish文件夹(我的命名空间)。这样我就可以只定义一个环境变量(DISH_HOME)就可以拿到所有我需要的库。比如要编译lua库。

2014-12-08 21:18:23 834

原创 jni android 签名检测

apk防破解方案的一种方式。把自己的发布和调试签名公钥,放于cpp,然后用jni从apk中提取包公钥进行对比可以简单加大破解难度。这里我只拿到PackageInfo这一层,有兴趣的朋友可以拿PackageManager或ApplicationInfo,这样更不怕被伪造。先照例一个跨平台的接口class CheckPackage { public: Check

2014-12-04 09:58:56 771

原创 MyGUI自动换行(修正选区)

http://blog.csdn.net/cparent/article/details/8230304?reload#cpp

2014-08-26 12:26:23 945

原创 Ogre MyGUI 中文方案及在安卓中的应用

MyGUI作者是俄罗斯人,对非英文提供了非常

2014-08-17 11:48:37 1287

原创 c++数据管理和驱动

copyright longer 2013请不要转载。 (一)我个人认为,好的程序结构不要用单例。所以虽然有从loki里拿出来的SingletonHolder,但最后还是去掉不用了。在初始化第一个对象时将全局的对象初始化,然后将其作为其他对象初始化条件传进对象,是不错的选择。见附件Manager模块 (二)实体组件体系。EntityX是个快速易于使用的Ent

2013-10-31 16:05:36 995

原创 premake版解决方案小工具

作用:一份代码生成不同平台的make方案。premake http://industriousone.com/premake抽空以premake和lua脚本写的一个解决方案生成小工具。使用方法在ReadMe.txt 1.解压projectT到任何目录.2.重命名该文件夹,这个名字将是解决方案名,并会生成一个叫directoryNameMain的project到该方案。3

2013-10-08 11:11:51 747

原创 ogre和havok整合

我的毕业设计,希望交到志同道合的朋友一个简单的ogre和havok的整合利用开源图形库OGRE,物理库havok,界面库cegui,以及他们用到的依赖库ois、boost等,在vs2010编译平台上开发出一个易于拓展的三维游戏框架。因为我的相关库比较多,环境变量也可能不同,而且有些库的引用是绝对路径,所以这个项目的源文件不能直接编译成目标程序。代

2012-08-01 11:30:17 662

MyGUI修改过后的中文编辑器

MyGUI修改过后的中文编辑器 没有修改界面元素的中文,想改自己动手。 Mygui\Media\Tools\LayoutEditor 添加你的方案EditorLanguageYouFuckLanguageTag.xml 在EditorLanguage.xml添加 EditorLanguageYouFuckLanguageTag的标识,然后设为默认就好了。 不推荐改,因为网上的教程上标的可不是你翻译后的标签,而是英文标签。 你会自己找不到地方。

2014-08-17

开源代码编译成android平台工程模板

开源代码编译成android平台工程模板 修改libtest\proj.android\jni\OgreBullet_Dynamics.mk 的搜索路径,把libtest\src换成开源代码,最好事整个都放进去。然后修改 some_static.mk中的 # config self source file path ,suffix. MY_FILES_PATH := $(LOCAL_PATH)/../../OgreBullet/Dynamics 搜索路径,注意用 MY_FILTER_OUT排除不要的文件和目录

2014-08-17

ogre_mygui_template_proj

ogre mygui 的android工程框架,win32调试,目标平台式android。

2014-08-17

练手项目(Race)

特性: 1.实体组件系统 2.boost::boost::signals2消息机. 3.用lua生成c++协议文件. 4.No memory leaks detected.

2013-10-31

premake 解决方案小工具

以premake和lua脚本写的一个解决方案生成小工具。

2013-10-08

关于premake的小工具

以premake和lua脚本写的一个解决方案生成小工具。

2013-10-08

ogre和havok第三部分

一个简单的ogre和havok的整合 利用开源图形库OGRE,物理库havok,界面库cegui,以及他们用到的依赖库ois、boost等,在vs2010编译平台上开发出一个易于拓展的三维游戏框架。 应为我的相关库比较多,所以这个项目的源文件不能直接编译成目标程序。代码仅供参考。 资源部分没有进行规划,只是图我自己简单。 欢迎讨论1063907400

2012-07-28

ogre和havok第二部分

一个简单的ogre和havok的整合 利用开源图形库OGRE,物理库havok,界面库cegui,以及他们用到的依赖库ois、boost等,在vs2010编译平台上开发出一个易于拓展的三维游戏框架。 应为我的相关库比较多,所以这个项目的源文件不能直接编译成目标程序。代码仅供参考。 资源部分没有经行规划,只是图我自己简单。 欢迎讨论1063907400

2012-07-28

ogre和havok第一部分

一个简单的ogre和havok的整合 利用开源图形库OGRE,物理库havok,界面库cegui,以及他们用到的依赖库ois、boost等,在vs2010编译平台上开发出一个易于拓展的三维游戏框架。 应为我的相关库比较多,所以这个项目的源文件不能直接编译成目标程序。代码仅供参考。 资源部分没有经行规划,只是图我自己简单。 欢迎讨论

2012-07-28

Ogre_1.7.3_API的chm文件

从docs中编译的api.chm文件,我自己用的,看到目前还没有这个资源。 有需要的可以看看。 有关详细资源请登录http://www.ogre3d.org/docs/api/html/ 官网上的是最新资源,你也可以使用doxygen编译源代码来得到api资源。

2011-11-23

空空如也

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

TA关注的人

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