- 现今主力开发的超轻量级渲染引擎
- https://github.com/hyzboy/ULRE
- 曾经的旧主力引擎
- https://github.com/hyzboy/CMGameEngine
- 曾经短暂编写PHP网站时总结的小型PHP工具库
- https://github.com/hyzboy/CMPHP
- 修改的仅支持OpenGL Core的GLEW
- https://github.com/hyzboy/GLEWCore
现所有主要开源仓库一览
5 4 月, 2020 by admin 无评论 »2D/3D抛物线
23 5 月, 2019 by admin 无评论 »#include<iostream>
using namespace std;
using uint=unsigned int;
struct vec2
{
float x,y;
};
struct vec3
{
float x,y,z;
};
/**
* 算出指定数量的抛物线高度值
* @param count 结果数量
* @param start 起始时间量,一般为-1
* @param end 结束时间量,一般为+1
*/
float *Parabolic(const uint count,const float time_start=-1,const float time_end=1)
{
if(count<=0)return(nullptr);
float *result=new float[count];
float rate;
float cur=time_start;
float total_time=time_end-time_start;
for(uint i=0;i<count;i++)
{
rate=float(i)/float(count);
cur=time_start+rate*total_time;
result[i]=1-cur*cur;
cout<<“height[“<<i<<“] “<<result[i]<<endl;
}
return result;
}
/**
* 画2D抛物线
* @param start 起始点
* @param end 结束点
* @param up 单位向上量
* @param height 高度值
* @param count 数量
*/
void Put2D(const vec2 &start,const vec2 &end,const vec2 &up,const float *height,const uint count)
{
vec2 total;
vec2 pos;
float rate;
total.x=end.x-start.x;
total.y=end.y-start.y;
cout<<“from “<<start.x<<“,”<<start.y<<” to “<<end.x<<“,”<<end.y<<endl;
for(uint i=0;i<count;i++)
{
rate=float(i)/float(count);
pos.x=start.x+rate*total.x;
pos.y=start.y+rate*total.y;
pos.x+=height[i]*up.x;
pos.y+=height[i]*up.y;
cout<<i<<“: “<<pos.x<<“,”<<pos.y<<endl;
}
}
/**
* 画3D抛物线
* @param start 起始点
* @param end 结束点
* @param up 单位向上量
* @param height 高度值
* @param count 数量
*/
void Put3D(const vec3 &start,const vec3 &end,const vec3 &up,const float *height,const uint count)
{
vec3 total;
vec3 pos;
float rate;
total.x=end.x-start.x;
total.y=end.y-start.y;
total.z=end.z-start.z;
cout<<“from “<<start.x<<“,”<<start.y<<“,”<<start.z<<” to “<<end.x<<“,”<<end.y<<“,”<<end.z<<endl;
for(uint i=0;i<count;i++)
{
rate=float(i)/float(count);
pos.x=start.x+rate*total.x;
pos.y=start.y+rate*total.y;
pos.z=start.z+rate*total.z;
pos.x+=height[i]*up.x;
pos.y+=height[i]*up.y;
pos.z+=height[i]*up.z;
cout<<i<<“: “<<pos.x<<“,”<<pos.y<<“,”<<pos.z<<endl;
}
}
void Test2D(float *height,const uint count)
{
vec2 start,end,up;
start.x=0;
start.y=0;
end.x=100;
end.y=0;
up.x=0;
up.y=100;
Put2D(start,end,up,height,count);
}
void Test3D(float *height,const uint count)
{
vec3 start,end,up;
start.x=0;
start.y=0;
start.z=0;
end.x=100;
end.y=0;
end.z=100;
up.x=0;
up.y=100;
up.z=0;
Put3D(start,end,up,height,count);
}
void main()
{
constexpr uint count=10;
float *height=Parabolic(count);
Test2D(height,count);
Test3D(height,count);
delete[] height;
}
技术试验:迁移到Vulkan
9 4 月, 2019 by admin 无评论 »Vulkan是Khronos寄于厚望的下一代图形API,我们在全新的试验工程ULRE(超轻量级渲染引擎)中,尝试将渲染API迁移到Vulkan。
未来ULRE的完善版本,将会取代CMGameEngine中老旧的渲染器。
重新支持C++Builder
5 11 月, 2018 by admin 无评论 »Turbo C/C++、Borland C++、C++Builder曾经是我唯一的开发工具。在很久的一段时间里,我一直使用的是盗版,后来Borland公司的一位员工劝说我要使用正版。我同意了,我努力去做了,我也真的做到了。
只不过世事难料的是,因为我的全正版化计划,我放弃了我最爱的C++Builder。原因很有意思也很简单:我买不到正版。从2002年开始,我寻找一切可以购买C++Builder正版的方式,但都一无所获。一开始告诉我在中国不卖个人版和专业版,只卖企业版。于是我准备好了3万块钱去买一套企业版,结果告诉我不卖给个人。我成立了一家空壳公司去买,答复我不卖给只有2个人的小公司。拉了几个朋友都弄成公司员工,最后告诉我至少要5套起卖。当时我就差点去丰联广场拉横幅抗议了,我突然醒悟:为什么我要花这么大的力气去给人送钱呢?
于是我放弃了使用C++Builder,转向Microsoft C/C++。为什么是Microsoft C/C++而不是Visual C++呢?因为我不想花钱,但又想是正版。Visual C++ IDE是收费的,但微软提供了免费且可商用的Windows SDK,其中便包含了Visual C++底层所调用的Microsoft C/C++ Compiler。于是我所有的工程就变成了使用CMAKE生成工程文件,再通过MSBuild编译链接。整个过程全程正版、合法、免费。
我曾经说过,在我可以得到正版的C++Builder前,我不会考虑再度支持C++Builder。只是没想到这个时间隔的是这么久。如今C++Builder推出了免费且可有限商用的Community版,这确实是一份正版授权,履行承诺的时刻来了。
全新渲染器
1 10 月, 2018 by admin 无评论 »近十年,我们的渲染器设计都失败了!这其中,前期有各种各样的原因。后期由于服务器模块的重量化,倒导渲染器的工作也停滞了很多年。
此次的渲染器重新设计,将会对引擎本身带来很多革命性的变化。
- 多平台支持: PC(Win/macOS/Linux),手机(iOS/Android)
- 多线程设计: 每个窗口的渲染将完全开启独立线程处理,互不影响。主程序的所有操作都将转换为渲染指令提交给对应窗口的线程。
- 多渲染API设计: 其实我们支持的还是只有OpenGL,只不过为了同时支持PC和手机,我们会实现OpenGL Core与OpenGL ES两套API支持。Vulkan做为未来可能的选项之一。而同时,我们会首发支持一种简易的软件渲染器(考虑使用SwiftShader的OpenGL/ES),用于一般2D界面的应用软件,比如在OpenGL无法初始化时的一些配置程序。
- 异步资源加载支持: 此次我们将全面实现资源异步加载支持,资源加载不再同步执行。每一个硬体资源设备,将会有一个独立的线程执行加载任务。
- 全新的GUI模块: GUI模块一直是我们的骄傲,但终究历史太久。此次我们将引入Qt/Metro/Material等GUI系统的设计概念,全面重新设计我们的GUI系统。更加现代化,同时适用于手机和PC。
新的strchr/strrchr/ClipFilename/ClipLastPathname函数
22 8 月, 2018 by admin 无评论 »参见范例Example.DataType.StrCharTest
str: “hello,world!”
strchr(str,’,’) return “,world!”
strrchr(str,strlen(str),’,’) return “,world!”
strchr(str,”el”,2) return “ello,world!”
strrchr(str,strlen(str),”el”,2) return “ld!”
strrchr(str,strlen(str),3,’l’) return “lo,world!”
strrchr(str,strlen(str),3,”el”,2) return “lo,world!”
ClipFilename(“C:\1.txt”) return “1.txt”
ClipLastPathname(“C:\1\2”) return “2”
ClipLastPathname(“C:\1\2\”) return “2”
ClipLastPathname(“C:\1\2\\”) return “2”
新的HASH算法SHA1LE
27 7 月, 2018 by admin 无评论 »SHA1LE算法是我们自定义的一种SHA1算法变种,它的计算方法与SHA1一致,改动如下:
- 去掉了因BigEndian设计造成的LittleEndian处理器需要做大小头转换的部分
- 可自定义起始因子
- 可动态修改扰乱因子

我们开通云服务了
18 7 月, 2018 by admin 无评论 »- 官方网站 cloud.hyzgame.com
- 云服务器
- 北京节点,最低CNY48/月
- 香港节点,最低CNY69/月
- 服务器租赁/托管
- 北京水立方BGP机房
- 广州双线机房
- 广州电信机房
- 广州联通机房
- 1U/2U规格
- Symantec SSL证书办理
- OVSSL/EV SSL
- 单域名/多域名
- 1-3年有效期
新日志系统
17 7 月, 2018 by admin 无评论 »日志系统一直是SDK的重中之中,在DOS时代,单机无法调试图形界面程序的情况下。日志系统是调试信息来源的重要途径。
从单纯的文本文件输出,到 控制台、文件等 等 的多端输出,从单线程到多线程,我们的日志系统经历了一次次的更新与换代。
现在,我们又将迎来全新一代的日志系统。
- 多线程日志获取
- 多线程日志输出
- 多端输出(本地文件、远端服务器)
- 详细分类信息(时间,线程,文件,模块)
- 多语种模板化支持
- 性能、内存等信息自动输出
- 可视化图形报表与日志分析查看工具
- 等等许多其它改进
模板成员函数名称统一
16 7 月, 2018 by admin 无评论 »- FileConfirm函数改名为FileExist
- ActiveChain模板中的flag/data改名为key/value
- Map/ActiveChain模板中的DeleteByIndex/DeleteByFlag改名为DeleteByKey
- Map/List/ActiveChain模板中DeleteByData改名为DeleteByValue
- Map模板中的FindByData改名为FindByValue
- List模板增加IsExist函数
- Map模板增加KeyExist,ValueExist函数