-
1 Archivos adjunto(s)
Getvertex pythonbge
Buenas, el método getVertex nos permite acceder directamente a los vértices que queramos. En la escena hay un plano que tiene 4 vértices, he accedido a ellos poniendo un color distinto a cada uno y con una propiedad en la transparencia añado valores a esta para ir cambiándola pulsando barra espaciadora. Está en multi textura, en GLSL no me funciona, pero creo que es por la versión. Está sacada de tutorialsforBlender y creo que es la versión 2.49.
Os dejo el blend. Saludos.
-- IMÁGENES ADJUNTAS --
https://foro3d.com/attachment.php?attachmentid=219774
-
El método getVertex que mencionas pertenece al viejo Blender Game Engine (BGE) de versiones antiguas como la 2.49 o 2.79. En Blender actual (versiones 2.8 y superiores), el BGE fue descontinuado y reemplazado por dos sistemas principales: Eevee/Cycles para render y la API de Python para lógica.
Para manipular vértices de un objeto en Blender actual, debes usar la API de Python de Blender (bpy) o el sistema de nodos Geometry Nodes. La forma directa de acceder y modificar vértices desde un script es mediante bpy.
Aquí tienes un ejemplo de código actual para cambiar el color de los vértices de un objeto. Necesitas trabajar con materiales y atributos, ya que no existe un método getVertex como tal. Para una manipulación visual similar a cambiar colores por vértice, debes usar un material con shader de atributos.
Primero, en el material, usa un nodo Attribute para leer el color del vértice. Luego, desde Python, puedes asignar colores a los vértices. Para ello, accede a la malla del objeto y a su data de vértices. Aquí un fragmento de código que asigna colores a los primeros cuatro vértices de un objeto seleccionado.
import bpy
import bmesh
obj = bpy.context.active_object
if obj and obj.type == 'MESH':
mesh = obj.data
if not mesh.vertex_colors:
mesh.vertex_colors.new()
color_layer = mesh.vertex_colors.active
i = 0
for poly in mesh.polygons:
for idx in poly.loop_indices:
if i == 0:
color_layer.data[idx].color = (1, 0, 0, 1) # Rojo
elif i == 1:
color_layer.data[idx].color = (0, 1, 0, 1) # Verde
elif i == 2:
color_layer.data[idx].color = (0, 0, 1, 1) # Azul
elif i == 3:
color_layer.data[idx].color = (1, 1, 0, 1) # Amarillo
i += 1
Para la transparencia, debes modificar el canal alfa del color. El cuarto valor en la tupla es el alfa. Puedes animarlo cambiando los valores con un controlador o script. Para una interacción como la barra espaciadora, necesitarías un manejador de eventos, lo cual en Blender actual se hace con operadores modal o scripts de animación, no con la lógica de juego antigua.
Si buscas lógica interactiva en tiempo real como el viejo BGE, la mejor solución actual es usar Godot o Unity, exportando el modelo desde Blender. Dentro de Blender, la alternativa más cercana es el sistema de animación y drivers, o el add-on UPBGE que es un fork del motor antiguo, pero no es oficial.
Para modificar la geometría en tiempo de ejecución de forma interactiva, puedes usar Geometry Nodes con atributos, lo cual es potente y visual. También puedes escribir scripts en Python que se ejecuten cada frame usando handlers de animación, pero es más complejo.
En resumen, olvida el código del BGE antiguo. Usa la API bpy de Blender para manipular mallas y materiales. Para lógica de juego, exporta a un motor de juegos moderno.