pyvista polydata(梯形)上的纹理看起来沿着对角线弯曲
Texture on pyvista polydata (trapezoid) looks crooked along a diagonal
我有一个 pyvista 多边形(特别是 an isosceles trapezoid),我想在其上应用纹理。问题是原来的平行线沿着梯形的对角线奇怪地弯曲了。有什么办法可以防止这种情况发生吗?我也不太清楚这个问题是否应该在 pyvista、vtk 或 opengl 层上解决。请参阅下面的最小工作示例来重现该问题。
原始纹理:
预期结果(或多或少,与亮度无关,与线条有关):
Result/actual 以下代码的结果:
重现结果的代码:
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)
由于多边形数量少,您的纹理似乎有些失真。
在我看来,你可以 1) 修改你的纹理坐标来排序 "sample" 纹理:
...
surf.t_coords = np.array([[0.2, 0.],
[0.8, 0.],
[1., 1.],
[0., 1.]])
...
或 2) 增加 vertices/triangles 的数量并相应地调整您的 UV 坐标。它应该可以减轻失真。
我有一个 pyvista 多边形(特别是 an isosceles trapezoid),我想在其上应用纹理。问题是原来的平行线沿着梯形的对角线奇怪地弯曲了。有什么办法可以防止这种情况发生吗?我也不太清楚这个问题是否应该在 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)
由于多边形数量少,您的纹理似乎有些失真。 在我看来,你可以 1) 修改你的纹理坐标来排序 "sample" 纹理:
...
surf.t_coords = np.array([[0.2, 0.],
[0.8, 0.],
[1., 1.],
[0., 1.]])
...
或 2) 增加 vertices/triangles 的数量并相应地调整您的 UV 坐标。它应该可以减轻失真。