删除网格模型中的顶点

问题描述 投票:0回答:1

我正在 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

python 3d game-engine mesh ursina
1个回答
0
投票

试试这个;删除功能在这里不起作用;):

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()
© www.soinside.com 2019 - 2024. All rights reserved.