f3d icon indicating copy to clipboard operation
f3d copied to clipboard

Obj's with tga textures don't get their textures displayed

Open Git-i opened this issue 1 year ago • 6 comments

Describe the bug Obj imports don't support .tga textures

To Reproduce Steps to reproduce the behavior:

  1. Open any obj file with a .tga texture

Expected behavior The file loads and the texture is displayed

System Information:

  • OS: Windows 11
  • GPU and GPU driver: NVIDIA Geforce RTX 3050M

F3D Information F3D 2.3.0

F3D - A fast and minimalist 3D viewer Version: 2.3.0. Build date: 2024-01-21 19:20:59. Build system: Windows 64-bits. Compiler: MSVC 19.37.32826.1. External rendering module: ON. Raytracing module: OFF. VTK version: 9.3.0-1702-geb008dfe7b (date: 20240111). Copyright (C) 2019-2021 Kitware SAS. Copyright (C) 2021-2024 Michael Migliore, Mathieu Westphal. License BSD-3-Clause. By Michael Migliore, Mathieu Westphal and Joachim Pouderoux.

Git-i avatar Feb 10 '24 21:02 Git-i

vtkOBJImporter indeed does not support TGA texture for now. It would be nice to add and should not be that hard. wdyt @Meakk ?

mwestphal avatar Feb 10 '24 22:02 mwestphal

Isn't it using the image factory?

Meakk avatar Feb 11 '24 09:02 Meakk

The problem is indeed in VTK. In the file IO/Import/vtkOBJImporterInternals.cxx, function bindTexturedPolydataToRenderWindow, a bunch of image formats are tested (TIFF, PNG, JPG, BMP), but it should be changed to use the image reader factory.

e.g.

auto reader = vtkSmartPointer<vtkImageReader2>::Take(
    vtkImageReader2Factory::CreateImageReader2(textureFilename.c_str()));

  if (reader)
  {
    reader->SetFileName(fullPath.c_str());
    reader->Update();
    vtkSmartPointer<vtkTexture> vtk_texture = vtkSmartPointer<vtkTexture>::New();
    vtk_texture->AddInputConnection(reader->GetOutputPort());
    actor->SetTexture(vtk_texture);
    knownTextures[textureFilename] = vtk_texture;
  }

Meakk avatar Apr 26 '24 21:04 Meakk

Nice find, should be simple indeed.

mwestphal avatar Apr 27 '24 06:04 mwestphal