如何更改 GeomNode 中特定 Geom 的纹理?

How do I change the texture of a particular Geom in a GeomNode?

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

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

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

如何更改 GeomNode 中单个 Geom 的纹理(如果答案是 "put each Geom in its own GeomNode",那么每个 GeomNode 是否有多个 Geom 的原因)?

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

You should not attempt to create or modify a RenderState object directly. Instead, call one of the make() functions to create one for you. And instead of modifying a RenderState object, create a new one.

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

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