3d图形应用问题

问题描述 投票:0回答:2

对于我的一个课程,我制作了一个3D图形应用程序(使用Visual Basic)。它接受一个字符串(z = f(x,y))作为输入,将其解析为RPN表示法,然后评估并绘制方程。虽然它确实有效,但它需要大约20秒的时间才能生成图表。我本来希望添加滑动条来垂直和水平旋转图形,但它确实太慢了。

有谁知道哪种编程语言最适合这种类型的东西?理想情况下,一旦绘制成功,我将能够平滑地旋转功能。

此外,我正在尝试找到一种更好的旋转功能的方法。现在,我在一堆点评估它,然后将点绘制到屏幕上。每次旋转时,都必须重新评估并绘制所有新点。这与原始图形过程一样长,因为它基本上将其视为一个全新的功能。

最后,我需要一种更好的方式来显示图形。目前(使用VB与visual studio)我在图表上绘制了200,000个点,但这看起来并不好看。最终,我希望能够根据高度和其他图形操作来改变颜色,使其看起来更好。

要明确的是,我并不是要求有人为我做这些,而是​​要以有效的方式对其进行编码。我将非常感谢任何人可以提供任何建议来帮助解决这三个问题。

graphics 3d graphing graph-visualization rpn
2个回答
0
投票

所以我将解释如何使用C ++和OpenGL来实现它。这并不意味着那些必须使用的工具,只是那些是标准的图形工具。

您的函数的表面本质上是2D流形,具有直观映射到2D空间的良好属性。什么通常被称为UV映射。

你应该做的是选择你想要显示的矩形域的范围(最小x,最大x,最小y,最大y)并为表格的循环制作2个嵌套:

// Pseudocode
for (x=minimum; x<maximum; x++)
    for (y=minimum; y=maximum; y++)
       3D point = (x,y, f(x,y))

将所有这些点存储到一个容器中(c ++的std向量可以正常工作),这将是你的“网格”。

这在渲染之前完成一次。然后使用(例如GL_POINTS)渲染这些点,并使用GPU上的旋转旋转图形网格。

这只会显示散点,而不是表面。

如果您还希望显示函数的表面,而不仅仅是点,则可以相当容易地对这组点进行三角测量。

将每个4个连续顶点分组(即索引<x,y>, <x+1,y>, <x+1,y>, <x+1,y+1>)处的顶点并创建2个三角形:

(<x,y>, <x+1,y>, <x,y+1>), (<x+1,y>, <x+1,y+1>, <x,y+1>)

这将填充网格表面的三角形。

基本上你只需要构建一次网格,这种方式渲染应该是60 fps,对于有20 000个顶点的东西,无论你是否只渲染点或三角形。


0
投票

编程语言大多不相关,因此VB本身可能不是问题。你可以在Python,C#,C ++等中遇到同样的问题。当然你必须掌握你选择的编程语言。

一个关键方面是使用正确的算法和数据结构。正确使用内存分配和内存布局以最大化CPU(和GPU)缓存也很关键。然后,您必须利用平台和硬件功能(GPU和多线程)。最后一点,您需要使用图形库,如OpenGL或Vulkan。

© www.soinside.com 2019 - 2024. All rights reserved.