Автор Тема: Применить вращение в BGE python  (Прочитано 1633 раз)

Оффлайн fredwriter

  • Житель
Применить вращение в BGE python
« : 16 Сентябрь 2016, 09:37:36 »
Здравствуйте, такой вопрос, нужно применить вращение объекта.
У меня скриптик у куба, который выполняется на правую кнопку мыши. Вот этот скриптик:
Код
from bge import logic

cont = logic.getCurrentController()
object = cont.owner

for mesh in object.meshes:
    for m_index in range(len(mesh.materials)):
        for v_index in range(mesh.getVertexArrayLength(m_index)):
            vertex = mesh.getVertex(m_index, v_index)
            vertex.color = [1.0, 0.0, 0.0, 1.0]
            object["x"] = vertex.x
            object["y"] = vertex.y
            object["z"] = vertex.z
object.applyRotation([0.7, 0.6, 0.2], True)
Он работает, то есть кубик крутится, но не применяется rotation к вершинам, как на Ctrl+A --> rotation, поэтому выводятся постоянно одни и те же вершины. А мне нужны именно новые вершины.
Код
object["x"] = vertex.x
object["y"] = vertex.y
object["z"] = vertex.z
Пробовал использовать вот такой код, не помогло, но код выполняется.
for obj in bpy.context.selected_editable_objects:
    bpy.ops.object.make_single_user(type='SELECTED_OBJECTS', object=True, obdata=True, material=True, texture=True, animation=True)
    bpy.ops.object.transform_apply(location=False, rotation=True, scale=False)
Подскажите плиз.

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Re: Применить вращение в BGE python
« Ответ #1 : 16 Сентябрь 2016, 13:35:02 »
... выложи .blend файл с bge кодом ...
Для Кота

Оффлайн fredwriter

  • Житель
Re: Применить вращение в BGE python
« Ответ #2 : 16 Сентябрь 2016, 13:50:44 »
Вот.

Оффлайн fredwriter

  • Житель
Re: Применить вращение в BGE python
« Ответ #3 : 16 Сентябрь 2016, 16:55:12 »
Код
from bge import logic

import bpy

cont = logic.getCurrentController()
object = cont.owner

object.applyRotation([0.7, 0.6, 0.2], True)

for obj in bpy.context.selected_editable_objects:
    bpy.ops.object.make_single_user(type='SELECTED_OBJECTS', object=True, obdata=True, material=True, texture=True, animation=True)
    bpy.ops.transform.rotate(axis=(0.7, 0.6, 0.2))
    bpy.ops.object.transform_apply(location=False, rotation=True, scale=False)

for mesh in object.meshes:
    for m_index in range(len(mesh.materials)):
        for v_index in range(mesh.getVertexArrayLength(m_index)):
            vertex = mesh.getVertex(m_index, v_index)
            vertex.color = [1.0, 0.0, 0.0, 1.0]
            object["x"] = vertex.x
            object["y"] = vertex.y
            object["z"] = vertex.z
Заметил одну особенность кода выше, если тыкнуть не четное кол-во раз, затем выйти в 3d вид, кубик будет повернут, затем опять войти в game режим, и ткнуть четное кол-во раз и выйти в 3d вид, то кубик будет повернут, если не четное то он, вернется в исходное состояние. Что за?

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Re: Применить вращение в BGE python
« Ответ #4 : 16 Сентябрь 2016, 18:44:20 »
... насколько понял в bge своя модель, но ты можешь попробовать дублировать трансформации ...
Код: bge
from bge import logic
import bpy
import mathutils
from mathutils import*

cont = logic.getCurrentController()
object = cont.owner
obj=bpy.data.objects[object.name]
print(obj.name)

#for mesh in object.meshes:
#    for m_index in range(len(mesh.materials)):
#        for v_index in range(mesh.getVertexArrayLength(m_index)):
#            vertex = mesh.getVertex(m_index, v_index)
#            vertex.color = [1.0, 0.0, 0.0, 1.0]
#            object["x"] = vertex.x
#            object["y"] = vertex.y
#            object["z"] = vertex.z
           
object.applyRotation([0, 0, 45], True)
obj.rotation_euler = Vector([0, 0, 45])
bpy.ops.object.transform_apply(location=False, rotation=True, scale=False)

#for obj in bpy.context.selected_editable_objects:
#    bpy.ops.object.make_single_user(type='SELECTED_OBJECTS', object=True, obdata=True, material=True, texture=True, animation=True)
#    bpy.ops.object.transform_apply(location=False, rotation=True, scale=False)
Для Кота

Оффлайн fredwriter

  • Житель
Re: Применить вращение в BGE python
« Ответ #5 : 16 Сентябрь 2016, 19:15:18 »
Цитировать
... насколько понял в bge своя модель
Ну допустим своя, но кубик же вращается, значит значения точек в каком-то смысле меняется, в bge, но почему-то не так то просто применить.
Для дублирования трансформации я применял:
Код
bpy.ops.transform.rotate(axis=(0.7, 0.6, 0.2))
а вы предлагаете
Код
obj.rotation_euler = Vector([0, 0, 45])
Попробую.
Да, и вы закомментировали вывод значений точки, но мне же нужно знать что значения меняются. А так щас попробую.
« Последнее редактирование: 16 Сентябрь 2016, 19:21:03 от fredwriter »

Оффлайн fredwriter

  • Житель
Re: Применить вращение в BGE python
« Ответ #6 : 16 Сентябрь 2016, 20:00:55 »
Да, этот код отрабатывает уже лучше, то есть при выходе в 3d вид сохраняет положение куба от последнего клика в game режиме, но выводит значения точки только после первого клика, те значения? которые были у куба в момент запуска game режима.

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Re: Применить вращение в BGE python
« Ответ #7 : 16 Сентябрь 2016, 20:09:17 »
... так тебе нужно не bgeшную модель считывать ...
Код: bge
from bge import logic
import bpy
import mathutils
from mathutils import*

cont = logic.getCurrentController()
object = cont.owner
obj=bpy.data.objects[object.name]
mesh=bpy.data.meshes[object.name]
print(mesh.name)

#for mesh in object.meshes:
#    for m_index in range(len(mesh.materials)):
#        for v_index in range(mesh.getVertexArrayLength(m_index)):
#            vertex = mesh.getVertex(m_index, v_index)
#            vertex.color = [1.0, 0.0, 0.0, 1.0]
#            object["x"] = vertex.x
#            object["y"] = vertex.y
#            object["z"] = vertex.z
           
object.applyRotation([0, 0, 45], True)
obj.rotation_euler = Vector([0, 0, 45])
bpy.ops.object.transform_apply(location=False, rotation=True, scale=False)
for vert in mesh.vertices:
    print(vert.co)

#for obj in bpy.context.selected_editable_objects:
#    bpy.ops.object.make_single_user(type='SELECTED_OBJECTS', object=True, obdata=True, material=True, texture=True, animation=True)
#    bpy.ops.object.transform_apply(location=False, rotation=True, scale=False)
Для Кота

Оффлайн fredwriter

  • Житель
Re: Применить вращение в BGE python
« Ответ #8 : 16 Сентябрь 2016, 22:03:21 »
Не важно в bge, или еще где, главное после поворота объекта получить его новые координаты в игре.

Оффлайн sungreen

  • ...
  • Житель
  • Kostroma mon amour
    • sungreen.github.io
Re: Применить вращение в BGE python
« Ответ #9 : 17 Сентябрь 2016, 03:03:00 »
... посмотри файл в предыдущем сообщении, там новые координаты вершин печатаются при каждом клике ...
Для Кота

Оффлайн fredwriter

  • Житель
Re: Применить вращение в BGE python
« Ответ #10 : 17 Сентябрь 2016, 15:55:08 »
Спасибо, работает.

 


Яметрика

* По форуму

* Рекламный блок

* Последние вложения

1 (1).png
Скачано: 5543
Автор: LEXA ANЭGROWND
blender.png
Скачано: 5542
Автор: ipv2007
4.png
Скачано: 5541
Автор: hiroyukiss
2.png
Скачано: 5590
Автор: hiroyukiss

Скачано: 5678
Автор: Dilifa12