在 EasyX 中使用 Nuklear UI 实现窗口和控件

关于三维的东西远不止这么点内容,也不是我几句话可以讲完的,需要大家扎扎实实的看图形学。不能好高骛远,要扎实、系统的学习。还要注意相关数学知识的学习。
图形学一般是借助矩阵实现的各种转换。我在这篇文章里尽量不用图形学的术语,也不做优化、不加额外功能,只用最简单的三角函数实现,希望大家能从道理上看的清楚明白。
关于一个点,一定要有一个三维坐标,程序中的结构体 POINT3D 就是。
点的初始化由函数 InitPoint() 实现,该函数产生了 n 个半径为 1 的点。
点的运动,是在三维坐标内运动的,包括平移、缩放、旋转等。这个程序只涉及到了旋转,定义了三个方法:RotateX()、RotateY()、RotateZ(),分别实现绕三个轴旋转;可以使用矩阵运算来实现,也可以直接这样算出来。
最后需要将三维世界呈现出来,这里用到一个术语:投影,就是将三维的画面投影到二维上。投影有多种方法,这个球体用的单点透视,因此还需要一个“观察点”,程序中用 viewZ 定义,观
...该游戏模拟的红白机经典游戏快打旋风。
双人版快打旋风,
同时砍杀两个boss,
杀到手软的小兵,
让你过足手瘾!
该程序的编译环境:vs2019 + EasyX_v20210730。
游戏运行抓图如下:
游戏原代码一万四千多行,另有多张图片和音乐。
全部源码在 github:https://github.com/xiongfj/Final-Fight
也可以【点击这里下载全部源代码】。
游戏说明:
矿井里的电路又出问题了。迅速借助你的头灯,在漆黑的矿井里找到出口逃出去吧。
控制说明:
就不放抓图了,有兴趣的运行一下代码看看效果吧,【点这里下载编译后的 exe 文件】。
以下是全部源代码:
...基于上篇文章 Mandelbrot Set (曼德布洛特集) 的源代码:
https://codebus.cn/yangw/mandelbrot-set
我修改了几个地方:
修改了颜色,使用黑->蓝->白->棕->黑这样的渐变颜色方案(当然,可以修改 InitColor() 函数改变配色方案)
增加了放大鼠标选中区域的功能。按鼠标中键可以恢复原尺寸。
将迭代次数提了出来,定义了常量。如果需要绘制更精细的图,请加大常量 ITERATIONS。不过越大绘制的越慢。精细程度开始看不出来,放大次数多了就明显了。
理论上是可以无穷放大,但实际受 double 类型精度的影响,放大到一定程度就会是马赛克了。
先看看逐步放大的效果吧:
另一个位置的逐步放大效果:
代码如下:
...受到生命游戏启发,想到了这个兰顿蚂蚁,都是零玩家游戏。
在平面上的正方形格被填上黑色或白色。在其中一格正方形有一只“蚂蚁”,它的头部朝向上下左右其中一方。
若蚂蚁在白格,右转90度,将该格改为黑格,向前移一步;
若蚂蚁在黑格,左转90度,将该格改为白格,向前移一步。
以上就是兰顿蚂蚁的简单规则描述。更详细的请参考维基百科。
执行效果如下:
完整的源代码如下:
...