Skip to content

Displaying images as 3D objects #20

Open
@FrankNiemeyer

Description

@FrankNiemeyer

I need to display images (2D) as 3D objects. My idea was to use the images as textures for simple rectangles consisting of two triangles each.

I tried to use plain vtkPolyData for that as suggested .

I used the following code to test the basic idea:

import skimage as ski
import numpy as np
import vtkplotlib as vpl

image = ski.io.imread("image_AP.png") # uint8 gray scale image
rgb_image = ski.color.gray2rgb(image)
texmap = vpl.colors.TextureMap(rgb_image, interpolate=True)

image_PolyData = vpl.PolyData()
# four vertices forming a square
image_PolyData.points = np.array([
    [0.0, 0.0, 0.0],
    [0.0, 1.0, 0.0],
    [1.0, 1.0, 0.0],
    [1.0, 0.0, 0.0]], dtype=float)
# rectangle consisting of two triangles
image_PolyData.polygons = np.array([
    [0, 1, 3],
    [1, 2, 3]])
image_PolyData.texture_map = texmap
# UV coordinates for the four vertices
image_PolyData.point_colors = np.array([
    [0.0, 0.0],
    [0.0, 1.0],
    [1.0, 1.0],
    [1.0, 0.0]])

image_PolyData.quick_show()

This works, in principle, however it seems that pixels in between the vertices are simply interpolated between the vertices instead of using the actual texture information.

Is this by design or a bug? Is it possible to actually map the texture onto the polydata faces?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions