【问题标题】:3D Software Renderer with VB6带有 VB6 的 3D 软件渲染器
【发布时间】:2010-12-15 23:52:04
【问题描述】:

我是 IT 学生,我必须在 VB6 中制作一个项目,我想制作一个 3D 软件渲染器,但我真的不知道从哪里开始,我找到了一些教程,但我想要一些深入的东西有了数学和算法,我会喜欢展示如何进行 3D 转换、相机、灯光、阴影...

使用的编程语言无关紧要,我只需要一些资源来告诉我如何做到这一点。

所以我只想知道在哪里可以找到一些资源,或者你可以给我看一些源代码并告诉我从哪里开始。

或者如果你们中的任何人对 VB6 项目有更好的想法。

谢谢。

【问题讨论】:

  • 我只是好奇他们为什么让你使用 VB6?
  • 哪所虐待狂大学的课程中还有 VB6?
  • 其实我写了一篇关于在VB6中实现3D渲染器的文章。我很久以前就将它发布到 CompuServe。如果您可以访问旧的 CompuServe 论坛,则应该查找它。 :-)
  • 实际上这门课是关于可视化编程的,我们使用 VB6 来做这件事,因为我的课上有很多初学者。
  • @emptyset,你从来没有教过青少年吧? 3D 让女士们印象深刻,而编译器则不然。

标签: math vb6 3d rendering


【解决方案1】:

我不同意之前的帖子,3D 渲染器实际上非常简单。然而,高质量的 3D 渲染器很难。

  1. 获取一堆3D数据,三角形最简单。
  2. 了解齐次坐标和用于变换的大 4x4 矩阵。
  3. 通过位置和旋转定义相机(以 4x4 矩阵表示)。
  4. 通过此相机转换您的 3D 几何体。
  5. 执行透视分割并缩放到您的窗口。这会将您的 3D 数据转换为 2D。
  6. 将数据渲染为 2D。

现在您将失去深度缓冲区,因此请从一开始就使用线框。 :-)

不要听这些反对者的话,出去玩玩吧!

【讨论】:

  • 是的,我一定会努力做到这一点,我也不会改变主意。我阅读了所有关于这些事情的信息,我想找到更多信息。你之前说写过这个教程,有链接吗?
【解决方案2】:

许多年前,我制作了一个阴影三角形渲染器,它使用库调用来绘制三角形。这是一种相当幼稚的方法,但您可以使用 VB6 获得相同的结果。我从 Foley 等人的“计算机图形学原理与实践”中获得了所有的数学和技术。有些部件现在已经过时了,但我认为你会发现它对这个项目非常有帮助,例如可以从亚马逊以合理的价格购买第二手产品。

一种简单的方法可能是:

  1. 将模型文件读取为三角形
  2. 使用矩阵变换每个三角形以考虑相机位置
  3. 将三角形点投影到二维上
  4. 绘制二维三角形(可能是using GDI

这包括线框查看。要将其扩展到隐藏表面移除,您需要确定哪些三角形在前面。两种可能的方式:

  1. Z 顺序对三角形进行排序,并首先绘制距离相机最远的三角形。如果有很多三角形,这很简单但效率很低,并且当顺序不完全正确时会产生重叠的三角形效果。您还必须决定如何对三角形进行排序 - 例如按质心、按范围...
  2. 使用软件深度缓冲区。这将产生更好的结果,但需要更多的工作来实施。您将不得不编写自己的三角形绘图代码,因此不能依赖 GDI。请参阅bresenham's line algorithm 和相关算法,了解如何执行此操作。

在此之后,您还需要某种基于光照的阴影。计算包含在计算机图形学原理和实践中。对于简单的着色,您可以坚持使用 gdi 绘制三角形,但如果您想做 gouraud 或 phong 着色,则颜色值在三角形中会有所不同。解决此问题的一种方法是将三角形细分为较小的三角形,但这效率低下并且不会给出非常漂亮的结果。最好按照软件深度缓冲区的要求自己绘制三角形。

一个好的扩展是支持三角形以外的基元。基本方法是在阅读时将图元拆分为三角形。

祝你好运 - 可能是一个有趣的项目。

【讨论】:

  • 感谢您的信息,我会搜索这本书,看看是否能找到一些答案。
【解决方案3】:

VB6 不是最适合做数学和 3D 图形的语言,而且鉴于您以前也没有这方面的知识,我建议您选择不同的(而且更容易)。

因为它是 Visual Basic,你可以尝试一些更面向形式的东西,这就是语言的初衷。

【讨论】:

  • 是的,我知道,但是我需要在 VB6 中制作这个项目,而且我必须使用大量的算法和数学,所以我想不出别的了。
【解决方案4】:

3D engine list 列出了三个纯基本引擎(矛盾修饰法)+ 源代码,其中一个是 Visual Basic(Dex3D)

DeX3D 是一个开源 3D 引擎 完全用 Visual Basic 编码 Jerry Chen (-onlyuser@hotmail.com)。

  • Gouraud 着色
  • 透明度
  • 雾化
  • 全方位和聚光灯
  • 分层网格
  • 支持 3D Studio 文件
  • 粒子系统
  • 贝塞尔曲线段
  • 2.5 维文本
  • Visual Basic 源代码

更多信息、屏幕截图和 源码可以在 Dex3D 上找到 主页。 (

【讨论】:

  • 是的,我找到了这个早期版本的源代码,我会尝试看看它是如何工作的。
【解决方案5】:

EGL25 by Erkan Sanli 是一个快速开源的 VB 6 渲染器,可以渲染、旋转、动画等由数千个多边形组成的复杂实体形状。只是 Windows API 调用——没有 DirectX,没有 OpenGL。

VBMigration.com chose EGL25 作为一个高质量的开源 VB6 项目来展示他们的 VB6 到 VB.Net 的升级工具。

【讨论】:

    【解决方案6】:

    如果您以前从未做过 3D 软件渲染器作为一个整体项目,它会相当复杂。我会建议一些更小的东西——比如只做 3D 部分并使用线条来进行渲染,或者只是编写一个阴影三角形渲染器(无论如何这都是 3D 渲染器的基础)。

    比一开始就尝试编写一个成熟的 3D 软件渲染器更简单一些——尤其是在 VB 中。

    【讨论】:

    • 我真的不需要制作一个完整的 3D 软件渲染器,但至少它需要有相机、灯光、阴影和变换。
    【解决方案7】:

    软件渲染器是一个非常困难的项目,根本没有指明语言 VB6(对于这样的任务,c++ 就是这样。),无论如何我可以向你推荐一些我用过的好书:

    1. 着色器:http://wiki.gamedev.net/index.php/D3DBook:Introduction_%28Volume%29
    2. 数学:3D Math Primer for Graphics and Game Development

    还有其他 2 本书。即使它们用于 VB.NET,您也可以找到一些有用的代码:

    1. .NET Game Programming with DirectX 9.0
    2. Beginning .NET Game Programming in VB .NET

    【讨论】:

    • 非常感谢,我知道 C++ 最适合这个,但我必须使用 VB6。我会检查这本书的。
    【解决方案8】:

    我认为您可以采取两种方式,要么采用 Direct X 方式,要么使用支持 VB 5-6 的 DirectX 8。我找到了一个页面http://www.gamedev.net/reference/articles/article1308.asp

    您始终可以编写一个引擎组,但这样做您将需要一些基本的线性代数,就像 Frank Krueger 建议的那样。

    【讨论】:

    • 我想在不使用 DirectX 或其他 3D 引擎的情况下制作我的项目绘图应用程序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多