如何为网格实体添加纹理
How to add texture to mesh entity
我用网格模型创建了一个简单的实体,我想在上面添加纹理。
代码如下:
class Slide(Entity):
def __init__(self, position = (0, 0, 0), rotation = (0, 0, 0)):
super().__init__(
model = Mesh(vertices = ((-0.5, -0.5, -0.5), (-0.5, -0.5, 0.5), (0.5, -0.5, 0.5), (0.5, -0.5, -0.5), (-0.5, 0.5, -0.5), (-0.5, 0.5, 0.5)), triangles = (0, 4, 3, 0, 5, 4, 0, 1, 5, 1, 2, 5, 0, 3, 1, 1, 3, 2, 4, 5, 2, 3, 4, 2)),
color = color.gray,
position = position,
rotation = rotation,
texture = 'white_cube'
)
slide = Slide()
然后创建的对象将是这样的:
问题是:我曾尝试在上面添加一些默认纹理,但我收到的唯一结果是原始颜色更深。
我该如何解决这个问题?谢谢
您必须提供一个 uv 列表,在其中将每个顶点 (Vec3) 映射到纹理坐标 (Vec2)。
设置纹理时只能得到较暗版本的原因是它只使用纹理中的第一个像素,因为它不知道如何映射它。
例如,由两个三角形组成的四边形可以这样映射:
Mesh(
vertices=((0.5, 0.5, 0), (-0.5, 0.5, 0), (-0.5, -0.5, 0), (0.5, -0.5, 0), (0.5, 0.5, 0), (-0.5, -0.5, 0)),
uvs=((1, 1), (0, 1), (0, 0), (1, 0), (1, 1), (0, 0))
)
通过代码创建复杂的 uv 贴图可能很困难,因此您应该为此使用 3d 建模程序。
但是,如果它是像从一侧投影这样简单的东西,您可以使用顶点坐标来生成 uv。像...
uvs = [(v[0], v[1]) for v in vertices]
...如果你想从前面投影。
我用网格模型创建了一个简单的实体,我想在上面添加纹理。
代码如下:
class Slide(Entity):
def __init__(self, position = (0, 0, 0), rotation = (0, 0, 0)):
super().__init__(
model = Mesh(vertices = ((-0.5, -0.5, -0.5), (-0.5, -0.5, 0.5), (0.5, -0.5, 0.5), (0.5, -0.5, -0.5), (-0.5, 0.5, -0.5), (-0.5, 0.5, 0.5)), triangles = (0, 4, 3, 0, 5, 4, 0, 1, 5, 1, 2, 5, 0, 3, 1, 1, 3, 2, 4, 5, 2, 3, 4, 2)),
color = color.gray,
position = position,
rotation = rotation,
texture = 'white_cube'
)
slide = Slide()
然后创建的对象将是这样的:
问题是:我曾尝试在上面添加一些默认纹理,但我收到的唯一结果是原始颜色更深。
我该如何解决这个问题?谢谢
您必须提供一个 uv 列表,在其中将每个顶点 (Vec3) 映射到纹理坐标 (Vec2)。 设置纹理时只能得到较暗版本的原因是它只使用纹理中的第一个像素,因为它不知道如何映射它。
例如,由两个三角形组成的四边形可以这样映射:
Mesh(
vertices=((0.5, 0.5, 0), (-0.5, 0.5, 0), (-0.5, -0.5, 0), (0.5, -0.5, 0), (0.5, 0.5, 0), (-0.5, -0.5, 0)),
uvs=((1, 1), (0, 1), (0, 0), (1, 0), (1, 1), (0, 0))
)
通过代码创建复杂的 uv 贴图可能很困难,因此您应该为此使用 3d 建模程序。 但是,如果它是像从一侧投影这样简单的东西,您可以使用顶点坐标来生成 uv。像...
uvs = [(v[0], v[1]) for v in vertices]
...如果你想从前面投影。