0

我需要用透视图绘制 Windows 位图,例如:

替代文字 http://img410.imageshack.us/img410/3905/example.png

仅使用 Windows API C 函数(无 MFC、无 DirectX 等)

4

2 回答 2

1

如果您不能使用 OpenGL(或 Direct3D),那么您可能必须编写自己的光栅化器。我还要指出,这是一个糟糕的主意,如果您可以使用 OpenGL 或 Direct3D,那么您将为自己节省大量工作,即使很难让这些东西与您的应用程序一起使用。是的,您可以使用 OpenGL 或 Direct3D 渲染到纹理中,而无需创建屏幕上下文。

在理论上,您正在对正方形上的每个点应用透视投影(查找该术语)。那是每个点,不仅是角落,而且是之间的所有点。如果您通常只将变换应用于四个点,人们会发现失真是可以接受的,因此我们改为这样做。

通过使用透视变换将 3D 点转换为 2D 点后,您可以绘制多边形,将像素从纹理复制到目标上下文中。您需要遍历目标中的每个像素并计算最终到达那里的源像素。如果它仅围绕图片中显示的 X 轴旋转,那么您将使事情变得容易得多,因为目标中的每一行都对应于源中的一行。Wolfenstein 利用相同的技巧(除了 Y 轴)在 286 上实时进行透视渲染,Doom 也这样做了。

如果您仍想继续但不知道我在说什么,请查找一本告诉您如何制作自己的 Doom 克隆的旧书。那些书有你要找的代码。现在可以在线获得一两个,请访问此 wiki并查找“3D 游戏编程的黑色艺术”或“Windows 游戏编程大师的技巧”。那里可能还有一两个人。

于 2009-06-07T07:43:42.140 回答
0

实现这个算法

于 2009-06-07T07:41:07.140 回答