1

我有一个 pyvista 多边形(特别是等腰梯形),我想在它上面应用纹理。问题是原本平行的线沿着梯形的对角线奇怪地弯曲了。有什么办法可以防止这种情况发生吗?我也不知道这个问题是否应该在 pyvista、vtk 或 opengl 层上解决。请参阅下面的最小工作示例来重现该问题。

原始纹理: 原始纹理 预期结果(或多或少,不是关于亮度,而是线条): 预期结果 下面代码的结果/实际结果: 在此处输入图像描述

重现结果的代码:

import numpy as np
import pyvista as pv

vertices = np.array([[0.2, 0, 0],
                     [0.8, 0, 0],
                     [1, 1, 0],
                     [0, 1, 0]]) 

# mesh faces
faces = np.hstack([[4, 0, 1, 2, 3]])  # square

surf = pv.PolyData(vertices, faces)

tex = pv.read_texture("parallel.png")
# Turning these on did not make a visible difference.
tex.InterpolateOn()
tex.MipmapOn()
surf.t_coords = np.array([[0., 0.],
                          [1., 0.],
                          [1., 1.],
                          [0., 1.]])

# experience a weird bend in the texture
surf.plot(texture=tex)
4

1 回答 1

1

由于多边形数量少,您似乎有一些纹理失真。在我看来,您可以 1) 修改纹理坐标以对纹理进行“采样”:

...
surf.t_coords = np.array([[0.2, 0.],
                          [0.8, 0.],
                          [1., 1.],
                          [0., 1.]])
...

在此处输入图像描述

或者 2) 增加顶点/三角形的数量并相应地调整你的 UV 坐标。它应该减轻失真。

于 2020-03-18T11:28:15.507 回答