PocketRenderDemo 应用程序






3.44/5 (9投票s)
一个用于 Pocket PC 的 3D 渲染器。
引言
几年前,为了替换一个老旧的图表查看器,我编写了一个非常棒的 3D 渲染器。想法是新的图表查看器将基于渲染器构建,并允许查看正确的 3D 图表,包含所有好用的功能,比如透视变换和光源。
一切进展顺利,渲染器允许插入不同的实现(通过通用的 COM 接口抽象)。那时,3D 图形是我的一个爱好(Direct3D 3 是当时的潮流,而且情况很糟糕)。在通宵畅饮了潘-银河漱口水后,我弄清楚了如何编写扫描线“显示列表”渲染器(如果你研究过旧的 PowerVR 硬件的工作原理,这个概念是相似的)。
所有这些都是用 Delphi 编写的,随着岁月(和雇主)的流逝,我考虑用 C++,后来用 C# 编写一个业余版本。然而,DirectX 发展迅速,因此编写 PC 版本似乎没有多大意义,特别是因为我从未费心研究如何将纹理或 Alpha 混合应用于表面(好吧,我知道怎么做,但从来没有时间)。
几天前,我突然冒出一个疯狂的想法,要制作一个 PocketPC 版本,现在它就在这里!
背景/实现
这是移植到 Compact Framework 的几个不同项目的混合体
- 一个扫描线渲染器,仍然无法进行纹理处理或任何过去 10 年发明的技术,但同时它非常酷,因为它非常高效。它没有(或不需要)z-buffer,并且每个像素只渲染一次。应该很容易添加纹理或混合。
- 一个非常简单的 3D 引擎,提供一些基本结构来构建动画对象。 它被设计用来表示带有移动部件的东西,例如机器人,它的身体移动,并且每个手臂相对于它移动。
- 一艘简单的 3D 飞船可以旋转。 这是我第一次尝试用 C# 和 Direct3D 编写游戏,远早于 DirectX 9 的所有精美托管部分!
关注点
移植只花了几个小时(分布在几天内)。 第一部分是将旧的 Delphi 渲染器转换为 C#(使用完整的 .NET Framework,因为它更快/更容易调试)。 我将它与一些未完成的业余项目结合在一起。 显然,Compact Framework 喜欢在工作中扔一些扳手。
- 再一次,好用的 XML 序列化。 我之前的 .NET D3D 项目使用序列化作为一种简单的方式来持久化(和加载)要渲染的图元(多边形)和顶点。 相反,我创建了一个 XML 架构并将模型加载到伪类型化的数据集 (CF 不支持完整框架的正确的类型化
DataSet
)。 - 尝试将图像渲染到后备缓冲区以稍后 blit 到屏幕上真是一个痛苦。 完整的 Framework 有一个 Bitmap 类的优秀方法叫做 '
LockBits()
'。 不幸的是,CF 设计者决定这是为了减少占用空间而放弃的东西之一(谢谢各位)。 显然,这将在 CF 2.0 中出现,但显然我对此没有耐心。 我所做的是创建一个MemoryStream
并首先用一些图像头填充它,然后用我的渲染图像字节(来自不安全的字节数组)填充它。 我将流直接送入一个新的 Bitmap 对象,并且(经过几次调整,例如必须将图像颠倒过来)它起作用了! - 当您移动鼠标时,演示只是旋转和摆动飞船一点点。 想法是你们中的一个人会接受这个项目,并可能把它变成有用的东西。 由于我仍然没有“真正的” PocketPC,我不确定这与触控笔等设备如何配合使用。 它应该做一些事情...