gpt4 book ai didi

java - 省略屏幕外三角形

转载 作者:行者123 更新时间:2023-12-01 11:28:14 27 4
gpt4 key购买 nike

我正在创建一个简单的小型软件 3D 引擎。现在,如果所有顶点都在平截头体之外,则不会渲染多边形,这一切都很好,直到您靠近多边形并且所有顶点都离开屏幕,但中间仍在平截头体内部,但它忽略了无论如何。无论如何我都会尝试渲染它,但我需要对其进行一些优化,所以这是我想到的第一个。

如果您不明白我想表达的意思,这里有一个 gif 和一些问题代码。

boolean v1Inside = v1.isInsideViewFrustum();
boolean v2Inside = v2.isInsideViewFrustum();
boolean v3Inside = v3.isInsideViewFrustum();
if (v1Inside && v2Inside && v3Inside) {
rasterizeTriangle(v1, v2, v3);
return;
}

if (!(v1Inside || v2Inside || v3Inside)) {
return;
}

not rendering when all verts are off screen

最佳答案

您可以实现一种保守的视锥体剔除方法,该方法偶尔会产生误报(而不是这种误报)。最典型的方法是如果所有顶点都落在某个平截头体平面的错误一侧,则拒绝三角形。

   a       b
A | B | C
--+-------+------- c
D | | E
| |
---+-------+------- d
F | G | H

在 2D 情况下,有四个裁剪平面:a、b、c、d。此方法拒绝完全位于线/平面“c”上方、线“d”下方、线“a”左侧或线“b”右侧的三角形,而不拒绝例如您的线段 B、G 和 H 中的顶点情况。

这种剔除在透视投影后很容易实现,给出简单的方程:例如x0,x1,x2 < -1,或使用平截头体的平面方程:

dot_product(vertex, plane) < constant_i.

关于java - 省略屏幕外三角形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30635515/

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