Ballanced —— 一个用 Unity 复刻的 Ballance®️

Ballance 是一款由德国游戏公司 CYPARADE 于 2002 年发行的一款经典的单机游戏。小时候花了很多时间在这上面。刚好这学期的计算机图形学大作业是做一个游戏,于是和小组成员催生了一个复刻 Ballance 的想法。利用 3DS MAX 和 Unity 实现操作逻辑,尽可能接近原游戏的视觉效果和声音效果。连续肝了三个星期,实现了这一想法,并将其命名为 Ballanced。 项目地址 https://github.com/BillChen2K/Ballanced/releases(已编译 Windows 可执行文件) 操作指引 [WSAD] / [方向键]:移动球体 [SPACE]:抬起摄像头 [R] / [K]:重新开始 [P] / [ESC]:暂停游戏 [Q]:退出游戏 以下操作用于调试: [J] 给球一个向上的力使其飞行 [Ctrl] + [Shift] + [W]:一键胜利(…… [Ctrl] + [Shift] + [D]:一键死亡(………… 一些想法 还是比较拙劣的,初学 Unity 的第一学期,很多原理上的东西还没有搞明白,贴图也有些生硬。不过从 0 开始建模写脚本(贴图直接盗用 Ballance 似乎也不算从 0 开始)还是绕了不少坑。目前的初始分数是 1000 分,每秒 2 分递减(维持 Ballance 的逻辑),不过每次掉落平台减掉的不是生命,而是 200 分。 总体说来还是有点可玩性的。 至于一些更加拙劣的粒子效果…… 五毛美工,权当个笑话吧 xd。

January 15, 2020 Â· Bill Chen

用 C# 和 OpenGL (SharpGL)加载点云与模型

Intro 这一次计算机图形学的作业要求是使用提供的 1.dat (数据点文件)和 2.txt (片面文件)内的数据加载出3D模型。在实现的过程中为了探索 OpenGL 的各种细节也增增补补了许多东西。 程序使用C# .Net Framework 4.5,OpenGL使用库SharpGL链接。这个库使用起来很顺手,获取了 OpenGL 实例之后并命名为 gl 就可以获得和在 C++ 中几乎一样的变成体验。 之前本来打算用 DirectX3d 12 做,奈何实在是太复杂,尝试了许久,用 100 行代码也就清空了一下画布。感受到 d3d 的强大的同时,也被狠狠地劝退了,回到了相对熟悉一些的 OpenGL。 Usage 数据文件 1.dat 和 2.txt 应当和程序放在同一个目录下。 使用 Render All 选项可以渲染所有内容, Render Dots Only 只渲染云点和坐标轴,Render Surfaces With Light 渲染光照和 3D 模型的混合。也可以直接在上面勾选需要渲染的内容。 勾选 Enable Auto Rotation 可以让模型自动绕 y 轴旋转。 取消勾选 Clear Before Repaint 可以在每一次渲染前不清空深度缓存,保留上一次的渲染数据。 Reset 选项将会清空画布并将视角重置为一个比较合适的初始值,重新调整窗口大小也会重新加载画布清空缓存。 Code 核心部分的绘制代码并不难,大概在以下几个函数中。其中有一些和交互相关的代码,逻辑也比较好理解。 private void Initialize() { gl = glCanvas.OpenGL; LookAtMatrix = new double[9]{200, 200, 200, -30, 20, 0, 0, 12, 0}; LightPosition = new float[4]{7....

December 2, 2019 Â· Bill Chen

使用 C# 和 OpenGL (SharpGL) 实现的一个简易画图版

计算机图形学的第一个大作业是用 OpenGL 或 DirectX3d 实现一个平面的画图,应当具备直线和圆形的功能。正好国庆放假时间比较充裕,就稍微完善了一下界面,实现了一个画图。 随手画的一个Logo 关于 SharpGL 为了使 OpenGL 能正确地与 C# 互动,可以采用动态链接的方式直接手动将 OpenGl 的 dll 链接进自己工程中,但这种方法比较繁琐,况且网上已经有许多人做了重复的工作,于是我选择了一个似乎并不是特别受欢迎的包装库 SharpGL 来在 C# 中使用 OpenGL 的函数。 如果采用 OpenGLControl 控件获取 OpenGL 对象,那么使用 SharpGL 的代码风格会是这样: //C# SharpeGL.OpenGL gl = glCanvas.OpenGL; gl.Color(0, 0, 0); gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT); gl.LoadIdentity(); gl.Translate(-4.68f, 4.11f, -10f); 相比对应的 OpenGL 在 C/C++ 中的代码,可以流畅地转换。同时这个库还省去了 Glut 函数后面的 3f 等恼人的参数,全部重载了一起。 //C glColor3f(0, 0, 0); glClear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glTranslatef(-4.68f, 4.11f, -10f); 你可以在这里 https://github.com/dwmkerr/sharpgl 了解到关于 SharpGL 的更多信息。...

October 10, 2019 Â· Bill Chen