• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
    • Questions
    • Teachers
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

565
Views
Cree un archivo .obj a partir de una matriz 3d en python

Mi objetivo es obtener un archivo .obj de un formato ingenioso (.nii) usando python, con el propósito de abrirlo en Unity. Sé que el paquete "scikit-image" tiene un módulo llamado "medida" que tiene implementado el algoritmo Marching cube. Aplico el algoritmo del cubo de marcha a mis datos y obtengo los resultados que espero:

 verts, faces, normals, values = measure.marching_cubes_lewiner(nifty_data, 0)

Entonces puedo trazar los datos:

 fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.plot_trisurf(verts[:, 0], verts[:,1], faces, verts[:, 2], linewidth=0.2, antialiased=True) plt.show()

ingrese la descripción de la imagen aquí

He buscado funciones para guardar los datos (verts, caras normales, valores) como .obj pero no he encontrado ninguna. Por lo tanto, decidí construirlo yo mismo.

 thefile = open('test.obj', 'w') for item in verts: thefile.write("v {0} {1} {2}\n".format(item[0],item[1],item[2])) for item in normals: thefile.write("vn {0} {1} {2}\n".format(item[0],item[1],item[2])) for item in faces: thefile.write("f {0}//{0} {1}//{1} {2}//{2}\n".format(item[0],item[1],item[2])) thefile.close()

Pero cuando importo los datos a la unidad obtuve el siguiente resultado:

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Entonces mis preguntas son las siguientes:

  • ¿Qué estoy haciendo mal en el proceso de creación de .obj?
  • ¿Hay algún módulo o función que haga esto de una mejor manera?
  • ¿Es posible hacer lo que quiero?

Gracias.

Más ejemplos:

Pitón:

ingrese la descripción de la imagen aquí

Unidad:

ingrese la descripción de la imagen aquí

about 3 years ago · Santiago Trujillo
1 answers
Answer question

0

Solución: ¡Después de horas de depuración, la solución fue muy simple! Simplemente agregue +1 a los datos de caras proporcionados al aplicar los cubos de marcha. El problema era que Python consideraba que los verts comenzaban desde 0 y Unity los consideraba como comenzando desde 1. ¡Es por eso que no coincidían! De nada.

verticales, caras, normales, valores = medida.marching_cubes_lewiner(nifty_data, 0)

caras=caras +1

¡Éxito!

ingrese la descripción de la imagen aquí

about 3 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error