Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

743
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í

over 4 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í

over 4 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 Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!