gpt4 book ai didi

python - PyOpenGL OBJ Loader 未正确加载

转载 作者:行者123 更新时间:2023-12-01 08:53:43 25 4
gpt4 key购买 nike

我按照教程尝试制作 OBJ 加载器,最终得到了大致相同的结果。我的无法正确加载,所以我复制了他的,他的也无法正确加载。遗憾的是,我不得不离开,而且我的代码重叠了,所以我无法显示它,但这是他的。

import numpy as np

class ObjLoader:
def __init__(self):
self.vert_coords = []
self.text_coords = []
self.norm_coords = []

self.vertex_index = []
self.texture_index = []
self.normal_index = []

self.model = []

def load_model(self, file):
for line in open(file, 'r'):
if line.startswith('#'): continue
values = line.split()
if not values: continue

if values[0] == 'v':
self.vert_coords.append(values[1:4])
if values[0] == 'vt':
self.text_coords.append(values[1:3])
if values[0] == 'vn':
self.norm_coords.append(values[1:4])

if values[0] == 'f':
face_i = []
text_i = []
norm_i = []
for v in values[1:4]:
w = v.split('/')
face_i.append(int(w[0])-1)
text_i.append(int(w[1])-1)
norm_i.append(int(w[2])-1)
self.vertex_index.append(face_i)
self.texture_index.append(text_i)
self.normal_index.append(norm_i)

self.vertex_index = [y for x in self.vertex_index for y in x]
self.texture_index = [y for x in self.texture_index for y in x]
self.normal_index = [y for x in self.normal_index for y in x]

for i in self.vertex_index:
self.model.extend(self.vert_coords[i])

for i in self.texture_index:
self.model.extend(self.text_coords[i])

for i in self.normal_index:
self.model.extend(self.norm_coords[i])

self.model = np.array(self.model, dtype='float32')

然后在我的 main.py 上,我使用文件名执行了该文件。

obj = ObjLoader()

obj.load_model('cube2.obj')

shader = ShaderLoader.compile_shader("Shaders/vert.vs", "Shaders/frag.fs")

目标文件:http://hatebin.com/adycgbuhgt

# Blender v2.79 (sub 0) OBJ File: ''
# www.blender.org
mtllib cube2.mtl
o Cube
v 1.000000 -1.000000 -1.000000
v 1.000000 -1.000000 1.000000
v -1.000000 -1.000000 1.000000
v -1.000000 -1.000000 -1.000000
v 1.000000 1.000000 -0.999999
v 0.999999 1.000000 1.000001
v -1.000000 1.000000 1.000000
v -1.000000 1.000000 -1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
vn 1.0000 0.0000 0.0000
vn -0.0000 -0.0000 1.0000
vn -1.0000 -0.0000 -0.0000
vn 0.0000 0.0000 -1.0000
usemtl Material
s off
f 1/1/1 2/2/1 3/3/1 4/4/1
f 5/5/2 8/6/2 7/7/2 6/8/2
f 1/1/3 5/9/3 6/10/3 2/11/3
f 2/12/4 6/13/4 7/7/4 3/14/4
f 3/15/5 7/16/5 8/17/5 4/4/5
f 5/5/6 1/18/6 4/19/6 8/20/6

结果:

最佳答案

为了显示 obj 文件,我的脚本以三角形的形式绘制了 3 个顶点。我必须在 blender 中对我的模型进行三角测量,以便在我的程序中绘制三角形,并通过 UV 展开它来获取我的 VT 坐标。

关于python - PyOpenGL OBJ Loader 未正确加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52926604/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com