某些上下文:我通过为每个图块创建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)?
答案 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)