- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用 Java 从头开始制作 3D 渲染器,没有外部库。当我尝试优化时,我想知道画家算法是否比 Z 缓冲更快的一般/平均答案。假设我正在渲染一个相同的立方体,这样会更快。但我不希望相交的多边形弄乱,所以我可能想实现 Newell 版的 Painter 算法来切割多边形,这样它们就不会相交和弄乱。
那么我可以得到渲染单个立方体的平均速度更快的顺序吗:
另外,如果有人有任何其他好的建议我可以使用吗?
最佳答案
在计算机图形学中,画家的算法称为 Z-Sorting
有时快有时慢。这取决于您有多少对象、您渲染的分辨率有多大以及您需要的 Z
坐标精度。
Z-Buffering
更适合:
高对象/多边形数
动态场景(物体或相机正在移动/旋转)
它需要与渲染图像具有相同分辨率的额外缓冲区,并且它对每个片段执行单一条件(每个多边形的渲染像素,甚至是看不见的像素)。在渲染完 3D z
坐标后,每个可见像素都可以使用,这是许多高级渲染技术所必需的。
Z-Sorting
适用于:
(相对)静态场景或非常低的对象/多边形数量
如果可供使用的内存非常少(在 8 位计算机上,大多数 3D 应用程序都使用 Z-sorting
,因为没有用于 Z-buffer 的内存
)
它需要索引缓冲区来存储所有对象/多边形索引,并且它在每个场景变化时执行排序(按 Z 坐标对许多对象进行排序可能很慢)。现在使用它是因为:
透明多边形需要Z排序
如果程序出于其他原因已经有 Z 排序的场景,那么它会利用它
有时这两种技术结合在一起
特别是对于 Z
坐标的高动态范围,因为标准 Z 缓冲区(24/32 位宽)在整个范围内的分辨率非常差。它可以通过使用 Z-buffer
的线性或对数刻度来部分解决,但是如果您需要在整个范围内定义精度/分辨率,则需要使用某种与 Z 排序的组合并组合更多frustrums 一起使用或使用当前 HW
Z-Buffer
关于java - Z-Buffering 通常比 Painter 算法更快吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31513594/
我创建了一个 Painter 类,它应该在屏幕上绘制一个圆弧,但是当键盘聚焦在一个 TextField 上时它会升高。删除 SingleChildScrollView 解决了这个问题,但它显示了 n
我知道 painter.setWindow 是如何工作的。例如,如果我将小部件最大化,那么我在该小部件中绘制的内容也会以相同的比例变大。 但我不明白 painter.setViewport 究竟做了什
我想知道是否有一种方法可以将一堆形状绘制为自己的对象,以便当用户想要缩放、更改颜色或旋转时,所有形状都会相应调整? 然后我希望将这组形状放置在 QGraphicsView 上预定的 x,y 坐标处并具
我有一些数据会不断变化。我通过 QPainter 将这些数据绘制成一行,并想通过 QTimer 进行动态更新(每秒更新一次),但数据只会在我关闭绘画窗口时更新,它不会在窗口中实时更新。我哪里错了??这
我正在开发一款名为“Pogo Painter”的迷你游戏,我需要一些数学解决方案。下面是一张图片(用 Paint 制作)来说明它的全部内容。 四名不同颜色的玩家必须占据方 block 才能获得分数。迷
我的任务: 创建一个程序来仅使用基元(如三角形或其他东西)复制图片(作为输入给出)。该程序应使用进化算法来创建输出图片。 我的问题: 我需要发明一种算法来创建种群并检查它们(它们与输入图片的匹配程度
我想在 Qt 中非常有效地绘制基本的 2D 形状(正方形),因此我继承了 QOpenGLWidget 如下: WatorOpenGLWidget.hpp #include #include #in
我正在创建一个继承自 NimbusLookAndFeel 的外观,让我知道如何注册我自己的组件以使用它们的自定义 Painter。 例如,像这样的 ButtonPainter 类的 JButton 曾
我需要了解如何更改创建自己的 Painter 方法的 JPanel 颜色的逻辑。我创建了一个示例项目用于说明; 问题:按钮操作中的直接颜色更改代码不会更改任何内容。 问题 1) 重写 paintCom
我创建了 QToolBar 的子类,使上下文工具栏与 QGraphicsItem 相关联。 我想要添加的是一个小三角形指向我的工具栏弹出的位置。我知道 QPainter 不能在 QToolBar 之外
我已经将图像存储在板本地目录(/home/images/system/image.png) 对于 painter.drawimage 函数,将 Qpoint 和 Qimage 作为参数传递。 pain
使用画家,可以使用 fragment 在 ImageBitmap 上绘制 val imageBitmap: ImageBitmap = imageResource(id = R.drawable
In the picture language in SICP我无法理解 transform-painter 过程的工作原理: (define (transform-painter painter o
我在我的挥杆应用程序中使用 Nimbus 外观。 我设置了 UIDefaults 的主要和次要属性的外观和感觉。 颜色是对的。现在我有一个问题,组件的画家使用颜色,这些颜色是在更新颜色主题之前定义的。
我正在努力学习如何使用绘图功能。到目前为止,我已经能够使用 QPainter 类在 QWidget 上绘制一些圆圈,如下所示: 我在 MainWindow.h 中添加了: virtual void
我在这里指的是图形中使用的画家算法。我有一些代码,其中我使用它们的中点从前到后绘制多边形来判断它们离视点有多远。我知道这不适用于重叠的多边形或彼此相交的多边形,但这在所有其他情况下都有效吗?这在多边形
我正在使用 Java 从头开始制作 3D 渲染器,没有外部库。当我尝试优化时,我想知道画家算法是否比 Z 缓冲更快的一般/平均答案。假设我正在渲染一个相同的立方体,这样会更快。但我不希望相交的多边
我正在为给定字符绘制字形轮廓,使用: QString myfname="FreeMono.ttf"; QRawFont *myfont=new QRawFont(myfname,324,QFont::
由于某种原因,Stack 小部件没有显示带有 CustomPaint 的 Container。 但是,如果从 Stack 中删除,它可以正常工作。我在这里错过了什么? class _DemoNavBa
你好,谁能告诉我为什么这个掩蔽尝试的背景是黑色的。这一定很接近,但我就是无法杀死背景。我看到其他人提到 saveLayer(rect, paint) 是这里的关键,因为它将整个 Canvas 矩形插入
我是一名优秀的程序员,十分优秀!