【问题标题】:OpenGL ES/real time/position of any vertex that is displayed?显示的任何顶点的OpenGL ES/实时/位置?
【发布时间】:2013-04-02 03:27:34
【问题描述】:

我目前正在处理 OpenGL ES(2、iOS 6)……我有一个问题

我。让 是一个必须绘制的网格。此外,

二。我可以要求旋转/翻译,以便改变观点。

所以, 我怎样才能(实时)知道显示的任何顶点的位置?

提前谢谢你。

jgapc

【问题讨论】:

    标签: opengl-es 3d geometry feedback vertices


    【解决方案1】:

    不完全清楚你在追求什么,但如果你想知道在哪里你的对象在做了一堆旋转和平移之后,那么一个非常简单的选择,如果你执行这些更改程序代码而不是着色器中的更改是简单地获取转换矩阵的最后一行或最后一列(取决于您使用的是行还是列主矩阵),这将是对象 center 的最终转换 作为坐标向量。

    最后一行或最后一列与将最终变换矩阵乘以对象的局部坐标中心向量(即 (0,0,0,1))相同。

    如果您想知道对象的顶点在哪里,而不是对象的中心,则将局部坐标空间中的该顶点乘以最终的变换矩阵,您将得到该顶点所在的新坐标。

    【讨论】:

    • 赞成建议巧妙的最后一行/列技巧。然而,正如广泛讨论所揭示的那样,OP 想要转换后的顶点。
    • 正如我所指出的,转换后的顶点也可以通过相同的方式实现,因为顶点不在原点,所以数学稍微复杂一些。
    • 感谢巴赫先生的详细解答。那很聪明。但这意味着我必须对所有顶点进行后乘(因为我不知道显示的是什么顶点(或将要显示的顶点)),然后处理所有数据——即使当前显示了 1% 的形状。我说的对吗?
    • 使用这种方法,您确实需要在代码中进行一些顶点乘法并查看它们。或者,如果您使用场景图和/或八叉树类型的对象组织,您可以管理有关实际可见内容的信息,但它可能比您现在需要的更密集。 (许多图形/游戏引擎都采用这些技术)。
    • 谢谢,我会按照你的数学计算的。为了避免计算缓慢,也许我可以将网格分成子集并对其进行排序(在屏幕上,相邻 = 即将出现,在屏幕外)。当我准备好时,我会编写更密集的代码。
    【解决方案2】:

    我想指出两点:

    1. 背面剔除丢弃三角形,而不是顶点。
    2. 三角形也被剪裁,因此它们位于视锥体内。

    我很好奇为什么您关心未显示的内容?

    【讨论】:

    • 感谢 Rahul 的回复,感谢您的精确!我已经编辑了我的问题,以便明确我的目标。
    • 不客气@jgapc!我不只知道显示的顶点,但你总是可以将它们乘以 ModelviewProjectionMatrix。警告:您应该自己生成它。见this。转换它们后,对结果进行归一化(将xyz 中的每一个除以第四个坐标w)。完成此操作后,您可以进行简单的“检查 2D 边界”测试以查看它们是否在您的视锥内。
    • 另一件事... OpenGL ES 2.0 没有变换反馈(您可以在其中获得变换后的顶点数据)。见this
    • 感谢您的文档。跟踪已弃用的内容总是好的;)我想您的建议是最直接的做法。认为 GPU“知道”显示的内容和不在屏幕上的内容有点令人沮丧……但我不是,除非我实施测试来弄清楚(如果 p(x,y,z)=( y,z)
    • 是的,好像是这样。除非它是绝密的,介意分享你想要实现的目标吗? 可能有一种更简单的方法可以解决您原来的问题...
    猜你喜欢
    • 2012-11-13
    • 1970-01-01
    • 2023-03-22
    • 2013-09-14
    • 1970-01-01
    • 2014-03-19
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    相关资源
    最近更新 更多