gpt4 book ai didi

performance - 填充大量 3D 形状时 FMX ViewPort3D 性能下降

转载 作者:行者123 更新时间:2023-12-04 17:13:06 27 4
gpt4 key购买 nike

我在一个多设备应用程序表单中有一个 ViewPort3D 元素,其中填充了大量 TRectangle3D 元素(从 1 到 10000 之间的任意位置)和 LightMaterialSource 应用于它们,所有这些都需要动态渲染,因为我还使用以下过程旋转相机:

procedure TForm3.Viewport3D1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Single);
var
I: IViewport3D;
begin
if ssRight in shift then
begin
I:=ViewPort3D1;
with tdummy(I.CurrentCamera.Parent) do RotationAngle.X:=RotAng.X - Y;
with tdummy(I.CurrentCamera.Parent.Parent) do RotationAngle.Y:=RotAng.Y + X;
end;
end;

然而,当渲染的矩形数量至少接近几十个时,ViewPort3D 的性能开始明显下降。向视口(viewport)添加更多矩形直至成为幻灯片放映点时,相机旋转变得更慢且更无响应。

有没有办法在不删除所述矩形的情况下提高 ViewPort3D 的性能?

我尝试使用将 Multisample 属性设置为“无”:ViewPort3d1.Context.SetMultisample(TMultisample.None) 以及从所有矩形中删除 MaterialSource .虽然它确实对性能有一点帮助,但并没有完全解决问题。

最佳答案

10k drawed cube

在我的测试中有 10k

上下文绘制/填充立方体

在渲染事件中绘制效率更高,但当相机角度改变时性能会显着下降。

TRectangle3D 创建 10k block 在创建 2k block 并在 windows 上显示后变成严重的性能问题。

如果在创建TRectangle3D后设置visible=false,渲染完成速度非常快,

然而,当 visible=true 时,当摄像机角度改变时,性能会严重下降。

据我所知,变慢的原因是 CPU 上的操作,也就是说,gpu 不是这里变慢的部分,但是当我检查代码时,有一个恒定的高量将鼠标移动到对象的事件类型消息通知。

我的建议是如果要使用很多可见对象,如果对象不在相机 View 中,隐藏对象(visible=false),在每个 mousemove 事件中使用循环隐藏对象,查看对象是否在相机区域中,这将有助于提高性能。

这里不仅有10k对象的问题,还有很多缺点。基本上这个可以用作简单工作的简单绘图 3d 引擎。

据我所知,在Java中,就像viewport3d对象一样,我们可以将unity引擎图形窗口添加到java应用程序中的窗体中,

不知道delphi能不能加unity引擎图形窗口,您可以请求 embercadero 的支持,但对于高级图形,使用像 unreal unity 专业优化引擎这样的引擎会更合乎逻辑。

关于performance - 填充大量 3D 形状时 FMX ViewPort3D 性能下降,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69133169/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com