【问题标题】:How to paint a bitmap with perspective?如何用透视绘制位图?
【发布时间】:2009-06-07 07:04:18
【问题描述】:

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

alt text http://img410.imageshack.us/img410/3905/example.png

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

【问题讨论】:

    标签: 3d bitmap


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      实现这个algorithm

      【讨论】:

        猜你喜欢
        • 2015-10-10
        • 1970-01-01
        • 1970-01-01
        • 2011-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-02
        相关资源
        最近更新 更多