In glb file multiple texture and hierarchy is not coming.
please share some code and data
import vtk
INPUT_FILE = "input_glb.glb"
OUTPUT_FILE = "output_glb.glb"
renderer = vtk.vtkRenderer()
renderWindow = vtk.vtkRenderWindow()
renderWindow.AddRenderer(renderer)
importer = vtk.vtkGLTFImporter()
importer.SetFileName(INPUT_FILE)
importer.SetRenderWindow(renderWindow)
importer.Update()
def flip_yaxis_texture_coords(polydata):
tcoords = polydata.GetPointData().GetTCoords()
flippedTcoords = vtk.vtkFloatArray()
flippedTcoords.SetNumberOfComponents(2)
flippedTcoords.SetName("TextureCoordinates")
for i in range(tcoords.GetNumberOfTuples()):
tc = tcoords.GetTuple2(i)
flipped_tc = [tc[0], 1.0 - tc[1]]
flippedTcoords.InsertNextTuple(flipped_tc)
polydata.GetPointData().SetTCoords(flippedTcoords)
def applyTextures(actors):
actors.InitTraversal()
actor = actors.GetNextActor()
while actor is not None:
mapper = actor.GetMapper()
if mapper:
polydata = mapper.GetInputAsDataSet()
if isinstance(polydata, vtk.vtkPolyData):
property = actor.GetProperty()
texture = property.GetTexture("albedoTex")
if texture and polydata.GetPointData().GetTCoords() is not None:
flip_yaxis_texture_coords(polydata)
mapper.SetInputData(polydata)
actor.SetTexture(texture)
actor.SetMapper(mapper)
actor = actors.GetNextActor()
actors = renderer.GetActors()
applyTextures(actors)
exporter = vtk.vtkGLTFExporter()
exporter.InlineDataOn()
exporter.SetFileName(OUTPUT_FILE)
exporter.SetRenderWindow(renderWindow)
exporter.Write()