![]() |
|
Bienvenido a Foros 3DPoder.. Usted esta viendo este foro como invitado, no esta registrado todavía, lo que limita su visión del foro. Si quiere unirse gratis a la mayor comunidad del diseño gráfico de habla hispana, tener acceso a publicar y responder mensajes, tener mensajes privados con otros miembros(PM), responder encuestas, publicar sus imágenes para que las vea el resto del mundo, tener acceso a los video_tutoriales, y muchas cosas más, no lo dude. Registrarse es rápido, simple y gratuito, agregate hoy a la mayor comunidad 3D de habla hispana! ! Si usted tiene algún problema con su registro, por favor , díganoslo aquí.
|
![]() |
|
|||||||
|
|
#1 |
|
Método Polaco
Fecha de Ingreso: abril-2004
Mensajes: 3,174
|
Tengo alguna dudilla de novato, concretando, intento sacar las coordenadas UV de los puntos de un objeto. Consigo llegar a ellos desde los triángulos, pero en el array que me crea, salen repetidos (es lógico, el triángulo 1 tiene puntos en común con el triángulo 2, y como evalúa cada punto de cada triángulo, en el listado total se repiten). ¿Hay alguna manera de llegar a las coordenadas UV directamente utilizando Points, y no a partir de Triangles -> Points? Sólo por este camino es posible sacar el UVArray (me extraña que no haya una manera más directa, sin entrar por triángulos. Se podría meter la lista en una lista (valga la redundancia), y eliminar los repetidos, pero es un poco chapuza creo yo... aparte de ser un coñazo).
Pongo el script que he hecho, en Python: Código:
obj = Application.selection(0)
triangle = obj.Activeprimitive.Geometry.triangles
for A in triangle:
for oPoint in A.Points:
a=oPoint.UVArray
Application.LogMessage ("index: "+str(`oPoint.index`)+" U:"+str(a[0])+" ,V:"+str(a[1]))
|
|
|
|
|
|
#2 |
|
·
Fecha de Ingreso: junio-2005
Mensajes: 1,253
|
pues a falta de una solución mejor, podrías hacer algo parecido a esto para tener en lista_UV las coordenadas de los puntos no repetidos.
(es solo un "supuesto teórico", no uso XSI así que no lo he comprobado)
__________________
"La vida es como el tetris, cuando llegan los palos no sabes como encajarlos" [SIGPIC]
|
|
|
|
|
|
#3 |
|
Método Polaco
Fecha de Ingreso: abril-2004
Mensajes: 3,174
|
Gracias! Esta noche le echo un vistazo a ver si lo consigo. Tanta gaita para mirar algo que aparece automáticamente al seleccionar el punto en el UV Editor...
|
|
|
|
|
|
#4 |
|
Método Polaco
Fecha de Ingreso: abril-2004
Mensajes: 3,174
|
Nuevo experimento: el operador del XSI "getpixelarray", funciona correctamente para leer una imagen de 4 pixels de ancho y 2 de alto, cuando le doy estos datos (pide un Array para saber las posiciones de los pixels que debe mirar):
Array1: [0, 0, 1, 0, 2, 0, 3, 0, 0, 1, 1, 1, 2, 1, 3, 1] Si la imagen es de 4 pixels de ancho x uno de alto, funciona también con este array: arr=[[0,1,2,3],[0,0,0,0]] He intentado que en la imagen de 4x2 lea el array [0,1,2,3][0,0,0,0][1,1,1,1], pero (obviamente) no funciona... --- Edito: Fallo mío, lo correcto es darle [[0,1,2,3,0,1,2,3],[0,0,0,0,1,1,1,1]], así sí que funciona (lógicamente, 1 del a con 1 del b, 2 del a con 2 del b...). No sé si será más sencillo de conseguir este array, o directamente el "desglosado", seguramente éste, porque el valor A ya lo tienes con a*alto, sólo habría que hacer el loop para sacar el B... mañana miro. --- Así que le doy el Array como lo quiere y vía. El "pero" que le encuentro a esta manera, es que tengo que dar un rodeo, explico la parte interesante: Primero consigo los dos arrays, el del ancho y el del alto. w=[] for i in range(Ancho): w.append(i) Resultado para un Ancho=4: [0,1,2,3] h=[] for i in range(Alto): h.append(i) Resultado para un Alto=2: [0,1] Ahora creo un array temporal así: temp = [(x,y) for y in h for x in w] Valor de Temp= [(0,0),(1,0),(2,0),(3,0),(0,1),(1,1),(2,1),(3,1)] Lo ideal sería que me dejara hacer eso sin tener que poner los paréntesis en (x,y), como no me deja (o no doy con la manera correcta), transformo ese resultado en el array que necesita el comando GetPixelArray: arr=[] for i in temp: arr.extend(i) Valor de Arr = [0,0,1,0,2,0,3,0,0,1,1,1,2,1,3,1] El resto no tiene nada de chicha... pongo el script completo por si alguien quiere investigarlo, y por si veis alguna manera más lógica de hacerlo, sobretodo a la hora de conseguir el array necesario sin dar tantos rodeos... Código:
xsi = Application
oRoot = Application.ActiveSceneRoot
oCube = oRoot.FindChild ("grid")
oMat = oCube.Material
oClips = oMat.ImageClips
oClip = oClips(0)
oSource = oClip.Source
Ancho = oSource.Parameters("XRes").Value
Alto = oSource.Parameters("YRes").Value
Resolucion = Ancho * Alto
xsi.logmessage(("%s%s")%("Nombre de la imagen: ", oClip.name))
xsi.logmessage(("%s%s")%("Ancho de la imagen: ", Ancho))
xsi.logmessage(("%s%s")%("Alto de la imagen: ", Alto))
xsi.logmessage(("%s%s")%("Resolucion de la imagen: ", Resolucion))
xsi.LogMessage ("--------------------------")
w=[]
for i in range(Ancho):
w.append(i)
h=[]
for i in range(Alto):
h.append(i)
temp = [(x,y) for y in h for x in w]
arr=[]
for i in temp:
arr.extend(i)
oIm = oClip.GetImage().GetPixelArray(arr)
for i in range (0,Resolucion):
xsi.LogMessage (("%s%s")%("Datos del pixel: ",i))
xsi.LogMessage ("colorR = "+str(oIm[0][i]))
xsi.LogMessage ("colorG = "+str(oIm[1][i]))
xsi.LogMessage ("colorB = "+str(oIm[2][i]))
xsi.LogMessage ("colorA = "+str(oIm[3][i]))
xsi.LogMessage ("--------------------------")
Código:
# INFO : Nombre de la imagen: small_tif # INFO : Ancho de la imagen: 4 # INFO : Alto de la imagen: 2 # INFO : Resolucion de la imagen: 8 # INFO : -------------------------- # INFO : Datos del pixel: 0 # INFO : colorR = 1.0 # INFO : colorG = 1.0 # INFO : colorB = 0.0 # INFO : colorA = 1.0 # INFO : -------------------------- # INFO : Datos del pixel: 1 # INFO : colorR = 0.0 # INFO : colorG = 1.0 # INFO : colorB = 1.0 # INFO : colorA = 1.0 # INFO : -------------------------- # INFO : Datos del pixel: 2 # INFO : colorR = 1.0 # INFO : colorG = 0.0 # INFO : colorB = 1.0 # INFO : colorA = 1.0 # INFO : -------------------------- # INFO : Datos del pixel: 3 # INFO : colorR = 1.0 # INFO : colorG = 1.0 # INFO : colorB = 1.0 # INFO : colorA = 1.0 # INFO : -------------------------- # INFO : Datos del pixel: 4 # INFO : colorR = 0.0 # INFO : colorG = 0.0 # INFO : colorB = 0.0 # INFO : colorA = 1.0 # INFO : -------------------------- # INFO : Datos del pixel: 5 # INFO : colorR = 1.0 # INFO : colorG = 0.0 # INFO : colorB = 0.0 # INFO : colorA = 1.0 # INFO : -------------------------- # INFO : Datos del pixel: 6 # INFO : colorR = 0.0 # INFO : colorG = 1.0 # INFO : colorB = 0.0 # INFO : colorA = 1.0 # INFO : -------------------------- # INFO : Datos del pixel: 7 # INFO : colorR = 0.0 # INFO : colorG = 0.0 # INFO : colorB = 1.0 # INFO : colorA = 1.0 # INFO : -------------------------- P.D.2. Hacerlo con GetPixel en lugar de GetPixelArray (= hacerlo de uno en uno), es mucho más sencillo, se hace un loop y listo, pero supongo que a la hora de calcular una imagen grande, siempre que se puedan recoger todos esos datos accediendo una sola vez a la imagen, será mucho más rápido que acceder a la imágen miles de veces... si tengo tiempo traduzco el script utilizando GetPixel y mido los tiempos para comparar... Última edición por Stewie fecha: 13 ago 2007 a las 18:50. |
|
|
|
|
|
#5 | |
|
libre pensador
Fecha de Ingreso: junio-2007
Mensajes: 941
|
Cita:
__________________
"muchos hay que no conocen su debilidad, pero otros tantos hay que no conocen su fuerza". |
|
|
|
|
|
|
#6 |
|
Método Polaco
Fecha de Ingreso: abril-2004
Mensajes: 3,174
|
Es que eso no son comandos, es el resultado del script, y lo que aparece en español son líneas explicativas que he escrito yo
La manera correcta de sacar el array [0, 0, 0, 0, 1, 1, 1, 1] sería así, y no como hice arriba (tengo un don especial para buscar soluciones enrevesadas...): m=[] for i in range(ancho): temp=[i]*alto m.extend(temp) Valor de m: [0, 0, 0, 0, 1, 1, 1, 1] |
|
|
|
|
|
#7 | |
|
libre pensador
Fecha de Ingreso: junio-2007
Mensajes: 941
|
Cita:
saludos.
__________________
"muchos hay que no conocen su debilidad, pero otros tantos hay que no conocen su fuerza". |
|
|
|
|
|
|
#8 |
|
·
Fecha de Ingreso: junio-2005
Mensajes: 1,253
|
a estas horas ya no veo... pero si he entendido bien m[] es algo temporal que no te importa los valores que contenga.
Entonces por que no sustituyes m=[] for i in range(ancho): temp=[i]*alto por: m = [0]*alto*ancho (mañana despierto lo vuelvo a mirar y seguro que ya lo veo mas claro Edito: y como seguro que estoy tonto y no es eso lo que quieres, te hago otra sugerencia para tu método: Para que usas una variable intermedia, temp, y no directamente metes el valor que quieres, me refiero a temp=[i]*alto y despues m.extend(temp) en vez de directamente m.extend([i]*alto)
__________________
"La vida es como el tetris, cuando llegan los palos no sabes como encajarlos" [SIGPIC]
Última edición por pedropp fecha: 13 ago 2007 a las 20:49. |
|
|
|
|
|
#9 |
|
Método Polaco
Fecha de Ingreso: abril-2004
Mensajes: 3,174
|
Ahora soy yo el que está espeso, pero creo que lo que me dices de m=[0]*ancho*alto no me sirve.
Necesito llegar a un array R[] del tipo [a,b], donde: a= [0,1,2,3,0,1,2,3] b= [0,0,0,0,1,1,1,1] ( R sería por tanto [[0,1,2,3,0,1,2,3],[0,0,0,0,1,1,1,1]]) Conseguir [a] es sencillo, multiplicando [0,1,2,3]*2. Para conseguir[b] , lo hago así: >>> b=[] >>> for i in range(2): temp=[i]*4 b.extend(temp) >>> b [0, 0, 0, 0, 1, 1, 1, 1] >>> Lo que sí puedo hacer es sustituir directamente el temp de b.extend por su valor, [i]*4, pero por el momento tiendo a separarlo todo para verlo mejor (aunque en este caso sea una chorrada): >>> b=[] >>> for i in range(2): b.extend([i]*4) >>> b [0, 0, 0, 0, 1, 1, 1, 1] Gracias! P.D. JEOGIOMAR, no es tan complicado como parece, al principio suena todo a chino, pero tras tener 4 nociones puedes hacer cosillas interesantes Última edición por Stewie fecha: 14 ago 2007 a las 00:03. |
|
|
|
|
|
#10 |
|
·
Fecha de Ingreso: junio-2005
Mensajes: 1,253
|
bien, olvida lo que te dije, no había entendido nada!
|
|
|
|
![]() |
| Usuarios activos actualmente viendo este tema: 1 (0 miembros y 1 visitantes) | |
| Herramientas | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Ya tengo el XSI!!!!!!!!!!!! | Leander | Infografía General | 34 | 28 dic 2006 04:17 |
| Recopilación de dudas, posts e hilos de XSI (faq) | Leander | Infografía General | 5 | 04 mar 2006 12:01 |
| 101 Escenas Gratuitas y Scripts para Softimage XSI y criaturas digitales en 3D. | Sintesys | Tutoriales, Libros y Manuales. | 9 | 15 jun 2005 03:59 |
| Videotutoriales de scripting con XSI | Leander | Tutoriales, Libros y Manuales. | 5 | 27 may 2005 13:48 |
| BUG CONFIRMADO: XSI 4.2 PETA con el service pack 2 del XP | Leander | Problemas con Programas | 8 | 03 feb 2005 14:01 |
|
|