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

时间:2018-11-30 21:47:47

标签: python panda3d

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

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

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

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

1 个答案:

答案 0 :(得分:0)

如果您更仔细地阅读文档,结果会变成says

  

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

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

attrib = TextureAttrib.make(texture)
state = RenderState.make(attrib)
node.set_geom_state(n, state)
相关问题