我正在 Ursina 中创建 Minecraft。我通过向网格模型添加顶点来创建块。
但是现在我有一个问题,我无法删除网格中的顶点。每次代码调用时都会出错
Mesh.Generate()
以下是我尝试删除顶点和错误的方法。
from ursina import *
from ursina.shaders import basic_lighting_shader, lit_with_shadows_shader
from ursina.prefabs.first_person_controller import FirstPersonController
app = Ursina()
bte = Entity(model='block.obj',color=color.rgba(1,1,0,0.4),visible=False)
bte.scale=1.1
bte.origin_y+=0.05
sun = DirectionalLight(rotation=Vec3(45, 45, 45))
virtices = [# 底面
[0, 0, 0], #0
[0, 0, 1], #1
[1, 0, 1], #2
[1, 0, 1], #3
[1, 0, 0], #4
[0, 0, 0], #5
# 顶面
[0, 1, 0], #0
[1, 1, 0], #1
[1, 1, 1], #2
[1, 1, 1], #3
[0, 1, 1], #4
[0, 1, 0], #5
# 左面
[0, 0, 0], #0
[0, 1, 0], #1
[0, 1, 1], #2
[0, 1, 1], #3
[0, 0, 1], #4
[0, 0, 0], #5
# 右面
[1, 0, 0], #0
[1, 0, 1], #1
[1, 1, 1], #2
[1, 1, 1], #3
[1, 1, 0], #4
[1, 0, 0], #5
# 前面
[0, 0, 0], #0
[1, 0, 0], #1
[1, 1, 0], #2
[1, 1, 0], #3
[0, 1, 0], #4
[0, 0, 0], #5
# 后面
[0, 0, 1], #0
[0, 1, 1], #1
[1, 1, 1], #2
[1, 1, 1], #3
[1, 0, 1], #4
[0, 0, 1], #5
]
normals = [[-1 if number == 0 else number for number in sublist] for sublist in virtices]
amesh = Mesh()
amesh.normals.extend(normals)
amesh.uvs.extend([[0,0], [0,1], [1,1], [1,1], [1,0], [0,0], # 底面
[0,0], [1,0], [1,1], [1,1], [0,1], [0,0], # 顶面
[0,0], [0,1], [1,1], [1,1], [1,0], [0,0], # 左面
[0,0], [1,0], [1,1], [1,1], [0,1], [0,0], # 右面
[0,0], [1,0], [1,1], [1,1], [0,1], [0,0], # 前面
[0,0], [0,1], [1,1], [1,1], [1,0], [0,0], # 后面
])
amesh.vertices.extend(virtices)
amesh.vertices.remove([0, 0, 0])
amesh.generate()
错误:
:prc(警告):ConfigVariable win-size 的整数值无效: 864.0 :prc(警告): ConfigVariable win-size 的整数值无效: 1536.0 已知管道类型: wglGraphicsPipe (3 aux 显示 模块尚未加载。)设置窗口位置:Vec2(192, 108) :prc(警告): 更改 ConfigVariable 的默认值 粘贴发出从“1”到“0”的击键。 :pnmimage:png(警告):iCCP: 已知不正确的 sRGB 配置文件 package_folder: D:\MiniConda\Lib\site-packages\ursina asset_folder: d:\Downloads\myCode\Python\小游戏\Minecraft-Ursina-2.0 读取 obj: d:\Downloads\myCode\Python\小游戏\Minecraft-Ursina-2.0 ssets lock.obj 将.bam保存到:d:\Downloads\myCode\Python\小游 戏\Minecraft-Ursina-2.0\models_compressed lock.bam 断言失败: (num_vertices + num_unused_vertices_per_primitive) % (num_vertices_per_primitive + num_unused_vertices_per_primitive) == 0 在第 388 行 c: uildslave\sdk-windows-amd64 uild\panda\src\gobj\geomPrimitive.cxx 回溯(最近一次调用最后一次):文件 “d:\Downloads\myCode\Python\小游戏\Minecraft-Ursina-2.0 est.py”,行 75、在 amesh.generate() 文件“D:\MiniConda\Lib\site-packages\ursina\mesh.py”,第 139 行,生成 prim.close_primitive() 断言错误:(num_vertices + num_unused_vertices_per_primitive) % (num_vertices_per_primitive + num_unused_vertices_per_primitive) == 0 在第 388 行 c: uildslave\sdk-windows-amd64 uild\panda\src\gobj\geomPrimitive.cxx
试试这个;删除功能在这里不起作用;):
if len(p.vertices)!=0:
p_verts=p.vertices
p_norms=p.normals
p_uvs=p.uvs
p.clear()
p_verts.pop(p_verts.index([0,0,0]))
p_uvs.pop(p_verts.index([0,0,0]))
p.vertices=p_verts
p.normals=p_norms
p.uvs=p_uvs
p.generate()