首页 > 解决方案 > 如何更改 GeomNode 中特定 Geom 的纹理?

问题描述

一些上下文:我通过为每个图块(仅包含几个 tris)创建一个 Geom 来动态生成一些基于图块的图形,然后将所有 Geom 组合到整个地图的单个 GeomNode 中。

根据panda3d 文档,GeomNode 的用途之一是能够更改单个 Geom 的纹理。但是,它没有解释如何执行此操作。

调用set_textureGeom 本身不起作用(大概是因为 RenderState 在 GeomNode 中,而不是在 Geom 中)。我可以使用 获取与第 n 个 Geom 对应的 RenderState geom_node.get_geom_state(n),然后使用 再次设置它geom_node.set_geom_state(n, state),但我不知道如何更改 RenderState 以使其应用纹理,从 API 参考来看,它看起来非常复杂。

如何更改 GeomNode 中单个 Geom 的纹理(如果答案是“将每个 Geom 放入其自己的 GeomNode”,那么每个 GeomNode 是否有理由拥有多个 Geom)?

标签: pythonpanda3d

解决方案


事实证明,如果您更仔细地阅读文档,它会

您不应尝试直接创建或修改 RenderState 对象。相反,请调用其中一个 make() 函数来为您创建一个。而不是修改 RenderState 对象,而是创建一个新对象。

因此,要更新 Geom 上的纹理n,给定一些纹理texture和 GeomNode node,您需要执行以下操作:

attrib = TextureAttrib.make(texture)
state = RenderState.make(attrib)
node.set_geom_state(n, state)

推荐阅读