问题标签 [3d]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
9227 浏览

performance - OpenGL:快速离屏渲染

我需要使用 OpenGL 在屏幕外渲染很多(数万)图像。
我在 Windows 下运行并使用 QT 作为框架。解决方案只能是windows,这并不重要。

从我使用谷歌发现的情况来看,有很多选项可以做到这 一点这篇文章似乎相当过时,提出了一些方法,其中相关的方法是:

  • 特定于 Windows - 使用CreateDIBSection并以某种方式将纹理绑定到它。
  • 使用我的卡上似乎支持的 pbuffers 扩展。

该线程(消息 6)建议使用 QT 特定的方式来执行此操作QGLWidget::renderPixmap

我的问题是——哪一个是最快的方式?pbuffers 似乎是最安全的选择,因为它保证在硬件上执行但不是使用 CreateDIB 方法也通过硬件?QT方法呢?这似乎存在一些上下文创建问题。当然,我不想为我创建的每个图像创建一个新的上下文。
有没有人对此有一些好的经验?


编辑:回答评论 -
我有一个不变的场景,根本没有改变,我从许多不同的角度渲染它。现在,图像会返回给用户并由 CPU 处理。将来它们可能会在 GPU 上进行处理。

0 投票
12 回答
3152 浏览

.net - 使用 3D 加速的图形渲染

我们为庞大的数据集生成图表。我们说的是每秒 4096 个样本,每张图 10 分钟。一个简单的计算得出每个线图有 4096 * 60 * 10 = 2457600 个样本。每个样本都是一个双精度(8 字节)精度的 FP。此外,我们在一个屏幕上渲染多个线图,最多大约一百个。这使得我们在一个屏幕上渲染了大约 25M 的样本。使用常识和简单的技巧,我们可以使用 CPU 在 2D 画布上绘制此代码来获得高性能。高性能,即渲染时间低于一分钟。由于这是科学数据,我们不能遗漏任何样本。说真的,这不是一个选择。甚至不要开始考虑它。

自然,我们希望使用所有可用的技术来改进渲染时间。多核、预渲染、缓存都很有趣,但不要削减它。我们希望这些数据集的渲染速度至少为 30FPS,首选 60FPS。我们现在这是一个雄心勃勃的目标。

卸载图形渲染的一种自然方法是使用系统的 GPU。GPU 可用于处理庞大的数据集并并行处理它们。一些简单的 HelloWorld 测试向我们展示了使用 GPU 在渲染速度上的昼夜差异。

现在的问题是:OpenGL、DirectX 和 XNA 等 GPU API 是为 3D 场景而设计的。因此,使用它们来渲染 2D 线图是可能的,但并不理想。在我们开发的概念证明中,我们遇到了需要将 2D 世界转换为 3D 世界的情况。突然间,我们必须使用 XYZ 坐标系和多边形、顶点等等。从发展的角度来看,这远非理想。代码变得不可读,维护是一场噩梦,还有更多的问题。

您对此 3D 有什么建议或想法?执行此操作以实际转换两个系统(2D 坐标与 3D 坐标和实体)的唯一方法是什么?还是有更时尚的方法来实现这一目标?

- 为什么在一个像素上渲染多个样本很有用? 因为它更好地代表了数据集。假设在一个像素上,您有值 2、5 和 8。由于某些样本省略算法,只绘制了 5。这条线只会到 5,而不是 8,因此数据会失真。你也可以反对相反的观点,但事实是第一个参数对我们使用的数据集很重要。这正是我们不能省略样本的原因。

0 投票
7 回答
11935 浏览

javascript - 有没有好的 Javascript 图形库?

在盯着这个 3D 立方体这些三角形看了一会儿之后,我开始想知道是否有任何可靠的、具有基本 3D 支持的 Javascript 图形库。

有什么建议吗?

0 投票
4 回答
294 浏览

graphics - Modelling an I-Section in a 3D Graphics Library

I am using Direct3D to display a number of I-sections used in steel construction. There could be hundreds of instances of these I-sections all over my scene.

I could do this two ways:

I-Sections

Using method A, I have fewer surfaces. However, with backface culling turned on, the surfaces will be visible from only one side. If backface culling is turned off, then the flanges (horizontal plates) and web (vertical plate) may be rendered in the wrong order.

Method B seems correct (and I could keep backface culling turned on), but in my model the thickness of plates in the I-section is of no importance and I would like to avoid having to create a separate triangle strip for each side of the plates.

Is there a better solution? Is there a way to switch off backface culling for only certain calls of DrawIndexedPrimitives? I would also like a platform-neutral answer to this, if there is one.

0 投票
3 回答
2333 浏览

3d - XNA 中窗口系统的渲染策略(RenderTarget 性能)

我目前正在从头开始为 XNA 游戏创建一个窗口系统。我主要为 Windows 开发,但谁知道我将来可能支持哪些平台。如果您知道本机 Direct3D 的这一点,请随时回答,因为性能语义应该相似。如果可能,请考虑如果目标平台是 X-Box 360 会发生什么变化。

我取得了不错的进展,但现在我不确定如何准确地渲染窗口。我想出了四种方法:

  • 只需将所有控件直接渲染到屏幕上。这就是我现在所做的。只要控件不是半透明的,就可以通过在状态之间混合来为控件设置动画。我没有找到在任意数量的状态之间制作动画的好方法(假设一个按钮当前正在从按钮向上到按钮向下以及从鼠标悬停到鼠标悬停动画,然后它被禁用。它应该从最后一个状态平滑地混合到新状态。使用这种方法,这仅在最后一个动画完成后播放一个动画时才有效,否则您将在动画中跳跃。

  • 将每个顶级窗口和所有控件渲染到一个渲染目标中,然后使用它以半透明的方式将顶级窗口渲染到屏幕上。这使得顶层工作具有半透明性并且易于管理,但不会改变动画的内容。

  • 将每个控件渲染到渲染目标中,该目标仅在控件变脏时更新(即必须设置动画或文本已更改)。这样,每个控件的半透明将起作用。

  • 和前面一样,但除了解决动画问题之外,每个控件都有第二个渲染目标。每当动画开始时,交换渲染目标,这样我们就有了动画开始时的状态,并将其与目标状态混合到另一个渲染目标中。这不应该比以前的方法增加开销,我们只是有两倍多的渲染目标,在任何给定的帧中,只有一个会被渲染(最多)。但是问题来了:为了让它工作,我需要让“旧”渲染目标保留它的内容。这应该在 Windows 上具有良好的性能,但似乎对 X-Box 360 有严重的性能影响。另一方面,“保留”位仅在动画处于活动状态时才是必需的。

真正的问题来了。欢迎任何澄清的事情。关于性能问题,请记住,这只是游戏的窗口系统——后面的游戏可能会使用许多渲染目标并吸收性能,而且可能比窗口系统更多。假设在绝对最坏的情况下,我们可能有五个顶级窗口,每个屏幕上有 20-40 个控件。

  • 如果有的话,您会推荐这些方法中的哪一种,为什么?当然,随意添加另一种方法。
  • 假设只有 200 个或 400 个渲染目标可用,假设每个帧只有 20 个渲染目标,是否会对性能产生影响?
  • PreserveContents 对 X-Box 360 的性能影响真的那么糟糕吗?在 Windows 上有多糟糕?
  • 可以写入 RenderTarget2D.RenderTargetUsage 属性。在运行时切换它是一个好主意,仅在需要时启用 PreserveContents 吗?
  • 您(作为玩家)是否介意控制动画在某些情况下会跳转,例如将鼠标悬停在按钮上,将鼠标移出然后再次移入,因此“正常->悬停”动画从头开始播放两次,因为它是比你慢?
0 投票
2 回答
896 浏览

3d - 3D 几何:将一对点转换为与另一个点平行对齐

我有一条从 (x1,y1,z1) 到 (x2,y2,z2) 的线(实际上是一个立方体)。我想旋转它,使其沿着从(x3,y3,z3)到(x4,y4,z4)的另一条线对齐。目前我正在Math::Atan2Matrix::RotateYawPitchRoll. 有没有更好的方法来做到这一点?

编辑:我认为我对这篇文章的措辞非常糟糕。我实际上正在寻找的是来自两个向量的旋转矩阵。

0 投票
7 回答
2230 浏览

3d - “在线房间规划器”网站最好的 3-D 技术是什么?

主要的用户案例是:

  1. 创建二维平面图
  2. 以颜色和动态照明(打开和关闭灯)查看房间的 3D 视图
  3. 从预定义样本的大型库中选择家具。
  4. 改变家具样品的颜色和质地。
  5. 从不同的角度创建 3D 房间视图的照片。
  6. 用户还可以在房间内移动和转动相机并发现视图。
0 投票
2 回答
1979 浏览

wpf - WPF中的环境光遮蔽着色器效果?

我想这是一个多部分的问题。

我可以将 3D 模型导入到我的 WPF 应用程序中,但是如何将环境光遮蔽着色器效果应用到它?我知道使用 .NET 3.5 SP1 你可以做自定义效果,但这仅限于像素着色器,不包括顶点着色器。

我想我可以用 XNA 应用程序做到这一点,但我不熟悉 XNA,所以第二个问题是:WPF 和 XNA 有多大不同?我似乎在 XNA 中没有任何关于 XAML 的概念。从 WPF 迁移到 XNA 需要多少提升?

谢谢,克里斯

0 投票
3 回答
4065 浏览

math - 将 3 轴图绘制为网格

我以前看过数据的 3d 曲面图,但我不知道我可以使用什么软件来制作它。

我有 3 系列数据(X、Y、Z),基本上我希望表上的每一行都是 3d 空间中的一个点,全部连接为一个网格。数据目前是 csv,但我可以更改格式,因为它是我自己生成的数据。

谁能帮忙

0 投票
2 回答
1116 浏览

java - Canvas3D 和 Swing

这个问题是关于 Mac OS X 中的性能问题

Canvas3D 对象嵌入在 JPanel 中;然后面板与 Swing 构建的应用程序的其余部分集成。在该画布中,我通过应用某些转换来渲染一个简单的立方体。在最初的启动它工作正常。但是当我尝试调整窗口大小或对垂直或水平拆分栏按钮执行一些操作时。Swing 组件需要一定的时间才能出现在屏幕上。首先出现一个闪亮的白色物体,然后会出现摆动组件?(完全说会发生闪烁的事情)。有没有办法解决这个问题?

请在这方面帮助我。

J3DSwinger