【问题标题】:How do I create a real-time rendering window from scratch?如何从头开始创建实时渲染窗口?
【发布时间】:2012-01-23 19:52:33
【问题描述】:

我自己研究 3D 图形已经有一段时间了,我想更深入地了解一切是如何运作的。我想做的是在不使用 DirectX 或 OpenGL 的情况下创建一个简单的游戏。我相信大部分数学知识我都懂,但我遇到的问题是我不知道如何控制窗口中显示的像素。

如何指定我希望窗口中每个像素的颜色?

我知道我可能会遇到缓冲区和图像剪切问题以及可能会遇到可怕的效率问题,但我想创建自己的程序,以便我可以从高级语言的最低级别看到渲染的方式过程有效。我真的不知道从哪里开始。我已经想出了如何输出 BMP,但我希望有一个正在运行的程序每秒吐出 20+ 帧。我该如何做到这一点?

【问题讨论】:

    标签: graphics window rendering real-time


    【解决方案1】:

    您可以选择一个环境,允许您使用像素值填充数组并将其显示为位图。这样你就最接近在视频内存中戳 RGB 值了。 WPF、Silverlight、HTML5/Javascript 可以做到这一点。如果你不让它全屏,这些技术现在应该足够了。

    In WPF and Silverlight, use the WriteableBitmap.

    In HTML5, use the canvas

    然后由您来实现绘制直线、圆、贝塞尔曲线、3D 投影的逻辑。

    这很有趣,你会学到很多东西。

    【讨论】:

      【解决方案2】:

      我在字里行间读到,您更感兴趣的是从低级别完全控制渲染过程,而不是对如何在特定平台上实现这一点特别感兴趣。

      如果是这种情况,那么您可能会物有所值,看看像 SDL 这样的库,它为您提供了一个可以直接渲染的帧缓冲区,但抽象出许多平台特定问题。它已经存在了很长一段时间,并且有一些很好的教程可以让您了解它是否是您正在寻找的那种东西 - 请参阅this tutorial 以及同一系列中的后续内容,这应该足以让您启动并运行。

      【讨论】:

        【解决方案3】:

        您说您想创建某种渲染引擎,这意味着设计您自己的管道和矩阵类。您将使用它来将 3D 坐标转换为 2D 点。

        当您获得您一直在寻找的 2D 点时。例如,您可以在 Windows 上使用say,您可以选择画笔并绘制三角形值,同时为它们着色。

        我不知道你为什么需要位图,但如果你想练习说纹理,你也可以自己做,虽然在一台性能较弱的计算机上这可能会大大占用你的每秒帧数。

        如果您的目标是了解渲染在最低级别的工作原理。毫无疑问,这是一个很好的做法。

        Jt 施温施维加

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-04-21
          相关资源
          最近更新 更多