Gracias Gracias:  0
Resultados 1 al 4 de 4

Tema: python - blender - alguien lo sabe hacer

  1. #1
    Miembro Nuevo
    Fecha de ingreso
    Sep 2005
    Mensajes
    2

    python - blender - ¿alguien lo sabe hacer?

    Hola, me han recomendado este foro, a ver que tal


    En uno de mis scripts tengo lo siguiente, lo que hace es pillar unos vértices del blender y les aplica la típica formula de la velocidad a cada uno de los 4 vértices: x = x0 + v0 * t

    for e in range (0,4):

    print e
    print "he llegado"
    index = me.verts.index(me.faces[0][e]) <<< peta aquí
    print "paso por aquí"
    me.verts[index] = me.verts[index] + vel[index]*inctemps
    print "y por aquí también"

    la cuestión es que a la segunda vez que pasa por el loop peta, la respuesta en el monitor es esta:

    0
    he llegado
    paso por aquí
    y por aquí también
    1
    he llegado
    Tracebak (most recent call last):
    File "aplanar_una_cara_test", line 123, in <module>
    ValueError: The truth value of an array with more than one element is ambiguous.
    Use a.any() or a.all()




    he importado el numpy
    no veo muy claro lo de utilizar el any y el all... si alguien me puede echar un cable... gracias!

    Adriá

  2. #2
    Moderador Avatar de Klópes
    Fecha de ingreso
    Jul 2005
    Ubicación
    Estuve el día que llovió en los Monegros
    Mensajes
    7,988

    Respuesta: python - blender - ¿alguien lo sabe hacer?

    Hola, Adria.
    ¿Puede ser que tengas sólo un vértice? Es la única razón que se me ocurre para que dé un error ahí. (Un error que, por cierto, no conocía) Y otra cosa, si sólo quieres mover los vértices no necesitas pasar por las caras. De hecho, así pasas por cada vértice tantas veces como caras lo contienen, así que se desplazara más si pertenece a más caras (!)
    ...y estaba superbueno.
    Y miré su perfil. Y vi que era amigo de Daniela. Puaf.


    Dos niñas en el parque

    no se elevará, nunca más

  3. #3
    Miembro Nuevo
    Fecha de ingreso
    Sep 2005
    Mensajes
    2

    Thumbs up Respuesta: python - blender - ¿alguien lo sabe hacer?

    hola klópes, gracias por contestar.

    De hecho tengo un Plano con 4 vértices, les aplico fuerzas a cada uno de ellos para que se muevan de una forma que me interesa. A lo mejor lo encuentras raro porque mi objetivo no es una animación sino una comprobación matematica.

    He pegado solo un cacho del programa para intentar simplificar pero a lo mejor no os he dado la información suficiente. Os paso el resto del script por si con esto lo conseguís, para que el programa funcione tiene que haber en escena 1 solo plano de nombre "Plane" modificando sus vértices para que no sea plano. El objetivo del script es que lo planificarlo poco a poco.

    from Blender import *
    import math
    import pickle
    from numpy import *
    import time

    print ("\n\n\n-------start-------")

    kpla = 1 #constant de la molla d'aplanar
    inctemps = 0.1

    me = NMesh.GetRaw("Plane")
    cara = Object.Get("Plane")
    suport = NMesh.GetRaw()
    NMesh.PutRaw(suport,"suport", 1)
    obsuport = Object.Get("Mesh")

    forces = []
    acc = []
    vel = []

    for i in range (0,len(me.verts)):
    forces.append(array([0,0,0]))
    acc.append(array([0,0,0]))
    vel.append(array([0,0,0]))


    def centre(cara):
    result = []
    numverts = len(cara)

    i=0
    x=0
    y=0
    z=0
    while i < numverts:
    x = x + cara[i][0]
    y = y + cara[i][1]
    z = z + cara[i][2]
    i = i+1
    result = array([x/numverts,y/numverts,z/numverts])
    return result

    def vectornormal2(cara):
    result = []
    v1 = array(array(cara[2])-array(cara[0]))
    v2 = array(array(cara[3])-array(cara[1]))
    result = array(cross(v1,v2))
    result = result / sqrt(result[0]**2+result[2]**2+result[2]**2)
    return result

    def projectapuntapla(centrepla, vectornormal, punt):
    k=(vectornormal[0]*(centrepla[0]-punt[0])+vectornormal[1]*(centrepla[1]-punt[1])+vectornormal[2]*(centrepla[2]-punt[2]))/(vectornormal[0]**2+vectornormal[1]**2+vectornormal[2]**2)
    result = punt + que * vectornormal
    return result

    conta = 10
    while conta>0:
    conta = conta-1
    print conta

    centrecara = centre(me.faces[0])
    poscara = array([cara.getLocation()[0],cara.getLocation()[1],cara.getLocation()[2]])
    centreabsolut = poscara + centrecara

    #dibuixar centre

    obsuport.setLocation(poscara)
    obsuport.RotX = cara.RotX
    obsuport.RotY = cara.RotY
    obsuport.RotZ = cara.RotZ
    v=NMesh.Vert(centrecara[0],centrecara[1],centrecara[2])
    suport.verts.append(v)


    vectornormal = vectornormal2(me.faces[0])
    segonpunt = centrecara + vectornormal

    v=NMesh.Vert(segonpunt[0],segonpunt[1],segonpunt[2])
    suport.verts.append(v)
    f=NMesh.Face()
    f.v.append(suport.verts[0])
    f.v.append(suport.verts[1])
    f.v.append(suport.verts[1])
    suport.faces.append(f)
    me.faces.append(f)
    NMesh.PutRaw(suport,"suport", 1)
    Redraw()


    for i in range (0,4):
    puntprojectat=projectapuntapla(centrecara,vectorno rmal,me.faces[0][i])
    forsa = kpla*(puntprojectat - me.faces[0][i])
    index = me.verts.index(me.faces[0][i])
    forces[index]=forces[index]+forsa
    v=NMesh.Vert(puntprojectat[0],puntprojectat[1],puntprojectat[2])
    suport.verts.append(v)
    NMesh.PutRaw(suport,"suport", 1)
    time.sleep(inctemps)

    Redraw()

    for e in range (0,4):
    print e
    print "he llegado"
    index = me.verts.index(me.faces[0][e])
    print "paso por aquí"
    me.verts[index] = me.verts[index] + vel[index]*inctemps
    print "y por aquí también"


    #NMesh.PutRaw(me,'Plane')

    print "-------end-------"

    si alguien ha llegado hasta aquí.... MUCHAS GRACIAS!

  4. #4
    Ninja Fever Avatar de Mars Attacks
    Fecha de ingreso
    Jun 2003
    Ubicación
    Castellón
    Mensajes
    12,744

    Respuesta: python - blender - ¿alguien lo sabe hacer?

    No me he pegado mucho con este tipo de cosas, pero me da la sensación de que ese elemento no fuera un punto sino otro array. Puedes probar a ver "de qué tipo es" haciendo un print dir(me.faces[0][e]) justo antes del punto en el que casca y viendo qué modificadores tienes para ese tipo. O quizá es me.verts.index el que te devuelve un array y por eso index no sabe qué hacer con él.

    No sé, yo diría que alguno de los tipos no es el que crees que es.

Temas similares

  1. alguien sabe hacer esto
    Por EdiaN en el foro Diseño Gráfico y CAD
    Respuestas: 4
    Último mensaje: 13-12-2010, 15:00
  2. Blender alguien sabe hacer este efecto
    Por pollomayorga en el foro Partículas y Dinámicas
    Respuestas: 3
    Último mensaje: 07-02-2010, 21:35
  3. alguien sabe hacer esto
    Por alf en el foro Render, Iluminación y Cámaras
    Respuestas: 8
    Último mensaje: 19-11-2009, 20:53
  4. Blender alguien sabe como hacer una casa en blender
    Por leoni en el foro Modelado
    Respuestas: 2
    Último mensaje: 30-10-2009, 15:43
  5. alguien sabe como hacer esto
    Por juan26 en el foro Animación y Rigging
    Respuestas: 12
    Último mensaje: 18-04-2008, 20:02

Actualmente estos son sus permisos de publicación en el foro.

  • -No puedes crear nuevos temas al no estar registrado o no haber iniciado sesión en el foro.
  • -No puedes responder temas al no estar registrado o no haber iniciado sesión en el foro.
  • -No puedes subir archivos adjuntos al no estar registrado o no haber iniciado sesión en el foro.
  • -No puedes editar tus mensajes al no estar registrado o no haber iniciado sesión en el foro.
  •