При рендеринге сцены модели Obj отображаются как случайное объединение треугольников.
Я думаю, проблема вызвана тем, как я загружаю файлы Obj, и не могу понять, как решить эту проблему. p>
функция, вызывающая проблему: load_obj_file()
process_obj.py
При рендеринге сцены модели Obj отображаются как случайное объединение треугольников. Я думаю, проблема вызвана тем, как я загружаю файлы Obj, и не могу понять, как решить эту проблему. p> функция, вызывающая проблему: load_obj_file() process_obj.py [code]import moderngl as mgl import numpy as np import glm import os
with open(output_filepath, 'w') as file: # Write vertices for vertex in self.vertices: file.write(f"v {vertex[0]} {vertex[1]} {vertex[2]}\n")
# Write normals for normal in self.normals: file.write(f"vn {normal[0]} {normal[1]} {normal[2]}\n")
# Write texture coordinates for texcoord in self.texcoords: file.write(f"vt {texcoord[0]} {texcoord[1]}\n")
# Write materials and groups (if any) for group_name, faces in self.groups.items(): file.write(f"g {group_name}\n") for face in faces: face_str = ' '.join([ f"{v[0]+1}/{v[1]+1}/{v[2]+1}" if v[1] is not None else f"{v[0]+1}//{v[2]+1}" for v in face ]) file.write(f"f {face_str}\n")
with open(self.filepath, 'r') as file: for line in file: line = line.strip() if len(line) == 0: continue
parts = line.split()
# Handle vertex positions (v) if parts[0] == 'v' and len(parts) >= 4: try: vertex = [float(x) for x in parts[1:4]] vertices.append(vertex)
except ValueError: print(f"Warning: Invalid vertex data in line: {line}") continue
# Handle normals (vn) elif parts[0] == 'vn' and len(parts) >= 4: try: normal = [float(x) for x in parts[1:4]] normals.append(normal)
except ValueError: print(f"Warning: Invalid normal data in line: {line}") continue
# Handle texture coordinates (vt) elif parts[0] == 'vt' and len(parts) >= 3: try: texcoord = [float(x) for x in parts[1:3]] texcoords.append(texcoord)
except ValueError: print(f"Warning: Invalid texture data in line: {line}") continue
# Handle groups (g) elif parts[0] == 'g': current_group = parts[1] if len(parts) > 1 else "default_group" if current_group not in groups: groups[current_group] = []
# Handle material (usemtl) elif parts[0] == 'usemtl': if len(parts) > 1: current_material = parts[1] else: print(f"Warning: Incomplete material data in line: {line}")
# Handle faces (f) elif parts[0] == 'f': face_vertices = [] for vert in parts[1:]: vertex_data = vert.split('/')
# Data follows the "vertex/texcoord/normal" format try: vertex_idx = int(vertex_data[0]) - 1 # 1-based to 0-based index texcoord_idx = int(vertex_data[1]) - 1 if len(vertex_data) > 1 and vertex_data[1] else None normal_idx = int(vertex_data[2]) - 1 if len(vertex_data) > 2 and vertex_data[2] else None
for group_name, faces in self.groups.items(): print(f"Processing group: {group_name}") for face in faces: for vertex in face: key = (vertex[0], vertex[1], vertex[2]) if key not in index_map: index_map[key] = index_counter index_counter += 1
v = self.vertices[vertex[0]] t = self.texcoords[vertex[1]] if vertex[1] is not None else [0.0, 0.0] n = self.normals[vertex[2]] if vertex[2] is not None else [0.0, 0.0, 0.0]
def load_mtl_file(self, mtl_filepath): current_material = None with open(mtl_filepath, 'r') as file: for line in file: parts = line.strip().split() if len(parts) > 0: if parts[0] == 'newmtl': current_material = parts[1] self.materials[current_material] = {}
for material_name, material in self.materials.items(): if 'diffuse' in material: texture_filepath = material['diffuse'] texture = self.load_texture(texture_filepath) self.textures[material_name] = texture print(f"Texture for material {material_name} set.")
# Pass the matrices to the shader program self.shader_program['model'].write(self.model_matrix) self.shader_program['view'].write(view_matrix) self.shader_program['projection'].write(projection_matrix)
for group_name, faces in self.groups.items(): if group_name in self.textures: texture = self.textures[group_name] texture.use(location=0) # Bind the texture to texture unit 0 print(f"Binding texture for group {group_name}")
self.vao.render(mgl.TRIANGLES)
def update(self): pass [/code] Я пытался исправить это, упростив логику, но результат был тот же, поэтому я вернулся назад.
При рендеринге сцены модели Obj отображаются как случайное объединение треугольников.
Я думаю, проблема вызвана тем, как я загружаю файлы Obj, и не могу понять, как решить эту проблему. p>
функция, вызывающая проблему: load_obj_file()...
Я новичок в Spring и Java в целом и сейчас работаю над API. У меня есть код, который обращается к базе данных MSSQL, извлекает результаты и ПРЕДПОЛАГАЕТ их визуализировать, но он не работает. Я имею в виду, что если бы я только вызвал процедуру и...
Нет предварительных знаний по использованию внешней библиотеки в Swift.
Я пытался включить sf-proj-ios в свой пустой проект под названием «Test». Я следовал инструкциям библиотеки GitHub, использовал команды в терминале MacOS.app:
(установлены...
Я пишу аналогичный класс. Я переопределил метод CompareTo для сортировки объектов по дате в порядке убывания.
public class Employee implements Comparable
{
private Timestamp joinDate;
public Timestamp getJoinDate()
{
return joinDate;
}
У меня есть QList, подобный этому
QList MyList;
Где media — это созданный мной абстрактный класс. Я использую этот список для хранения объектов разных классов деревьев, все деревья наследуются от носителя. Мне приходится хранить их все в одном...