panda3d и GeoMipTerrain - загрузка текстур на местности - PullRequest
0 голосов
/ 27 октября 2019

В настоящее время я пытаюсь создать GeoMipTerrain из png-файла heightmap и затем применить к нему текстуру, вот мой код:

from direct.showbase.ShowBase import ShowBase
from panda3d.core import GeoMipTerrain, Texture

class MyApp(ShowBase):
    def __init__(self):
        ShowBase.__init__(self)

        # Set up the GeoMipTerrain
        terrain = GeoMipTerrain("myDynamicTerrain")
        terrain.setHeightfield("heightmap.png")
        terrainTexture = self.loader.loadTexture("grass.png")
        terrainTexture.setWrapU(Texture.WM_repeat)
        terrainTexture.setWrapV(Texture.WM_repeat)

        # Set terrain properties
        terrain.setBlockSize(128)
        terrain.setNear(20)
        terrain.setFar(100)
        terrain.setFocalPoint(self.camera)

        # Store the root NodePath for convenience
        root = terrain.getRoot()
        root.reparentTo(self.render)
        root.setSz(100)

        # Generate it.
        terrain.setColorMap(terrainTexture)
        terrain.generate()

app = MyApp()
app.run()

Все работает без ошибок, но я не вижу текстур на местности,только чисто белый цвет. Я могу изменить строку setColorMap следующим образом:

terrain.setColorMap("grass.png")

И она будет работать очень хорошо, однако текстура текстурирована очень размыто и неправильно изменяет размер. Я хотел бы иметь возможность манипулировать текстурой на местности, поэтому предпочтителен первый метод, если кто-нибудь поможет мне выяснить, почему текстура не отображается.

Спасибо!

1 Ответ

0 голосов
/ 27 октября 2019

Хорошо, так что я наконец-то понял, настройки текстур на ландшафтах работают по-другому:

from direct.showbase.ShowBase import ShowBase
from panda3d.core import GeoMipTerrain, Texture, TextureStage

class MyApp(ShowBase):
    def __init__(self):
        ShowBase.__init__(self)

        # Set up the GeoMipTerrain
        terrain = GeoMipTerrain("myDynamicTerrain")
        terrain.setHeightfield("heightmap.png")
        terrainTexture = self.loader.loadTexture("grass.png")

        # Set terrain properties
        terrain.setBlockSize(32)
        terrain.setNear(20)
        terrain.setFar(100)
        terrain.setFocalPoint(self.camera)

        # Store the root NodePath for convenience
        root = terrain.getRoot()
        root.setTexture(TextureStage.getDefault(), terrainTexture)
        root.setTexScale(TextureStage.getDefault(), 100)
        root.reparentTo(self.render)
        root.setSz(1000)

        # Generate it.
        terrain.generate()

app = MyApp()
app.run()

Кроме того, в будущем я рекомендовал искать ответы на https://discourse.panda3d.org/, поскольку сообществотам гораздо активнее

...