в том то и дело, что аддоном такое не сделать, вот и нужно использовать отдельную програмку, но Pavel похоже не нашёл подходящей(хотя должны быть) и пилит свою.mac7 писал(а):вот и юзай аддоны потом
Список разделов › Blender 3D › Плагины
в том то и дело, что аддоном такое не сделать, вот и нужно использовать отдельную програмку, но Pavel похоже не нашёл подходящей(хотя должны быть) и пилит свою.mac7 писал(а):вот и юзай аддоны потом
Linux
да, не нашёл подходящей. Все программы игнорировали клавиши на нумпаде. Вместо Num 1 писали просто 1. И я уже забросил написание своего скрипта. И я не хочу использовать аддоны, потому что они игнорируют клавиши (в зависимости от режима работы, когда активны определённые инструменты).grayich писал(а):похоже не нашёл подходящей(хотя должны быть)
import winreg, os, sys
subkey = 'Applications\\thm_editor.py\\shell\\open\\command'
hkey = winreg.CreateKeyEx(winreg.HKEY_CLASSES_ROOT, subkey, 0, winreg.KEY_WOW64_64KEY | winreg.KEY_ALL_ACCESS)
if hkey:
thm_editor_path = os.path.abspath(__file__)
python_exe_path = sys.executable
command = '{0} "{1}" %1 %*'.format(python_exe_path, thm_editor_path)
winreg.SetValue(winreg.HKEY_CLASSES_ROOT, subkey, winreg.REG_SZ, command)
hkey.Close()
input('OK')
python "E:\reg_test.py"
pause
а, забыл что система координат в редакторе уровней отличается от блендеровской. Нужно поменять местами вторую и третью координату. Направление будет таким:mac7 писал(а):ты точно ничего не напутал
-0.6980723738670349, 0.6836029887199402, 0.2130303829908371
скорее нет. Там ведь нужно будет вычислять углы прямоугольных треугольников, которые являются проекциями на координатные плоскости XY, YZ, XZ? Или нет?mac7 писал(а):думаю ты поймешь как найти углы для 3d вектора
о, сработало. Правда значение по оси Y теряется. Как я понимаю, не хватает информации для восстановления Y. Одного вектора направления не достаточно, чтобы восстановить все компоненты поворота.Bibo писал(а):mathutils.Vector.to_track_quat
Преобразовать углы в матрицу поворота 3х3 (метод to_3x3). Каждый столбец полученной матрицы будет соответствовать локальным осям объекта. Обычно, объекты смотрят вдоль одной из своих локальных осей (или в противоположном направлении), следовательно, направляющему вектору будет соответствовать один из столбцов полученной матрицы (возможно в противоположном направлении). Например, камера в блендере смотрит в отрицательном направлении своей локальной оси Z, следовательно, вектор направления камеры соответствует противоположному направлению третьего столбца ее матрицы поворота.Pavel писал(а):То есть перевести углы Эйлера в вектор направления.
import struct
VERSION_1 = 1
VERSION_2 = 2
def read_file(version, data):
p = 0
# количество вершин (может быть несколько миллионов)
vertices_count = struct.unpack('I', data[p : p + 4])
p += 4
for vertex_index in range(vertices_count):
vertex_position = struct.unpack('3f', data[p : p + 12])
p += 12
# в каждой итерации цикла выполняется проверка этого условия,
# что замедляет функцию
if version == VERSION_2:
vertex_normal = struct.unpack('3f', data[p : p + 12])
p += 12
# здесь должен быть код, который читает файл и
# записывает его данные в переменную data
...
read_file(2, data)
import struct
def read_file_v1(data):
p = 0
# количество вершин (может быть несколько миллионов)
vertices_count = struct.unpack('I', data[p : p + 4])
p += 4
for vertex_index in range(vertices_count):
vertex_position = struct.unpack('3f', data[p : p + 12])
p += 12
def read_file_v2(data):
p = 0
# количество вершин (может быть несколько миллионов)
vertices_count = struct.unpack('I', data[p : p + 4])
p += 4
for vertex_index in range(vertices_count):
vertex_position = struct.unpack('3f', data[p : p + 12])
p += 12
vertex_normal = struct.unpack('3f', data[p : p + 12])
p += 12
# здесь должен быть код, который читает файл и
# записывает его данные в переменную data
...
version = 2
if version == 1:
read_file_v1(data)
elif version == 2:
read_file_v2(data)
import pprofile
profiler = pprofile.Profile()
with profiler:
# выполняемый код
...
profiler.print_stats()
profiler.dump_stats("D:\\profiler_stats.txt")
Line #| Hits| Time| Time per hit| %|Source code
------+----------+-------------+-------------+-------+-----------
1| 0| 0| 0| 0.00%|import bpy, mathutils
2| 0| 0| 0| 0.00%|
3| 0| 0| 0| 0.00%|from . import fmt, imp
4| 0| 0| 0| 0.00%|from .. import xray_io, utils, version_utils
import time
def funct_1(use_0, use_1, use_2, use_3, use_4, use_5, use_6, use_7, use_8, use_9):
list_1 = []
list_2 = []
list_3 = []
for i in range(10**6):
coeff = 1
if use_0:
coeff += 0
if use_1:
coeff += 1
if use_1:
coeff += 1
if use_2:
coeff += 2
if use_3:
coeff += 3
if use_4:
coeff += 4
if use_5:
coeff += 5
if use_6:
coeff += 6
if use_7:
coeff += 7
if use_8:
coeff += 8
if use_9:
coeff += 9
result_1 = i / coeff
result_2 = i % coeff
result_3 = i * 2 / coeff
list_1.append(result_1)
list_2.append(result_2)
list_3.append(result_3)
list_1.clear()
list_2.clear()
list_3.clear()
def funct_2():
list_1 = []
list_2 = []
list_3 = []
coeff = 1
coeff += 0
coeff += 1
coeff += 1
coeff += 2
coeff += 3
coeff += 4
coeff += 5
coeff += 6
coeff += 7
coeff += 8
coeff += 9
for i in range(10**6):
result_1 = i / coeff
result_2 = i % coeff
result_3 = i * 2 / coeff
list_1.append(result_1)
list_2.append(result_2)
list_3.append(result_3)
list_1.clear()
list_2.clear()
list_3.clear()
count = 30
start_time = time.time()
for i in range(count):
funct_1(True, True, True, True, True, True, True, True, True, True)
end_time = time.time()
time_1 = end_time - start_time
print('funct_1 time: {:.4f} seconds'.format(time_1))
start_time = time.time()
for i in range(count):
funct_2()
end_time = time.time()
time_2 = end_time - start_time
print('funct_2 time: {:.4f} seconds'.format(time_2))
print('{:.2f} %'.format((time_1 - time_2) / time_1 * 100))
input('OK!')
Linux
Сейчас этот раздел просматривают: 1 гость