Показаны сообщения с ярлыком TODO. Показать все сообщения
Показаны сообщения с ярлыком TODO. Показать все сообщения

понедельник, 10 октября 2016 г.

Код оператора будущего аддона.

    Разобрался с выбором объекта и с прочими появившимися проблемами. Что еще надо сделать:
a) Добавить модификатор Solidify, и соответственно применение его.
b) Оформить некоторые переменные как Property
c) Написать первую версию Гуя, и разместить его в DATA

    Выпотрошил пример Simple Operator из примеров блендера и заменил функционал. Замучился я с применением модификатора взрыва, никак не хотел он нормально применяться, пришлось каждый раз пересчитывать его данные, как итог, результат не похож на настроенный оригинал. Все остальное позже доделаю, а пока можно почитать, да и потестить ( с подсветкой синтаксиса и комментариями!):


воскресенье, 10 апреля 2016 г.

Хорошо, когда некогда возиться...

   По причине недостатка времени пришлось залезть в модуль bpy для ускорения работы - ну вот не могу я три десятка блоков клонировать три раза, каждый раз смещая и поворачивая клон на 90 градусов, да еще применяя поворот. А надо ведь еще переименовать каждый блок, чтобы имя объекта совпадало с именем меша, да еще добавить каждому блоку игровое проперти с определенным значением - ручками будет нудно и долго. Проперти надо добавлять, потому что у меня редактор должен использовать bge, а проперти будет служить указанием типа, для сборки в список имен блоков одного типа. Я еще не решил как оно лучше будет сделать. И наверное, надо выстроить блоки в линию.
    Запишу, читателям может пригодится, мне как страховка от склероза.

*****
Клонировать и покрутить:

import bpy
# получаем выделенный объект
object = bpy.context.object
# дублируем
bpy.ops.object.duplicate()
# поскольку после дублирования выделенным становится клон, то переполучаем
# выделенный объект.
object = bpy.context.object
# двигаем, тут понятно и так
object.location[1] = object.location[1] - 4.0
# вращаем, угол задается в радианах
bpy.ops.transform.rotate(value = 1.5708, axis = (0.0, 0.0, 1.0))
# применяем вращение
bpy.ops.object.transform_apply(rotation = True)

*****
Создать новое проперти и изменить его значение:

import bpy
# получаем выделенный объект
object = bpy.context.object
# создаем новое проперти типа STRING
bpy.ops.object.game_property_new(type = 'STRING', name = 'TYPE')
# получаем к новому проперти доступ по имени и изменяем значение
object.game.properties.get('TYPE').value = 'bla-bla'

*****
Переименовать объект и меш:

import bpy
# получаем выделенный объект
object = bpy.context.object
# Переименовываем сам объект блока
object.name = 'NEW_NAME'
# Переименовываем меш блока
object.data.name = 'NEW_NAME'



среда, 2 марта 2016 г.

Блоки.

Наклепал еще блоков.
Сделал все текстуры формата dds.
Наложил большую текстуру маски, правда еще толком не настроил.


понедельник, 29 февраля 2016 г.

Сделал десяток блоков.

    Нужно еще:
1) Настроить нормально материалы, добавить большую черно-белую маску, что бы не так заметна была плитка текстур.
2) Переделать текстуры на размер кратным 2. У меня их там всего пяток, так что недолго.
3) Переименовать блоки и как объекты, и как меши.
5) Сделать еще кучу блоков поворота и блоки плавного спуска. Дофига еще.
6) Создать таблицу высот для каждого блока.

Пока выглядит так:



понедельник, 18 января 2016 г.

Пожалуй успех.

   Как и собирался, собрал из векторов матрицу ориентации и присобачил к "юниту", что бы посмотреть, как оно будет вести себя. "Юнит" в кавычках, потому что настоящий юнит находится за пределами видимости камеры, а желтая болванка сложной формы это объект, отвечающий за отображение. "Юнит" ведет себя нормально, учитывая, что "опорные точки" находятся довольно далеко за пределами его корпуса. Если что - опорные точки находятся на углах белого прямоугольника. Там еще и направления осей ориентации отображаются соответствующим цветом, только их корпус "юнита" закрывает. Болванка имеет физический тип No Collision. Сделал ландшафт более плавным, для красоты. Придется, по видимому делать карту высот помельче.



   Что еще надо сделать: во-первых, определять координаты пустышек и всех опорных точек через вектора направления, а то у меня все координаты задаются ручками в скрипте, во-вторых, надо сделать "покататься" по более крупному ландшафту в произвольном направлении, просто для удовольствия, и поэтому, в-третьих,  надо вменяемое управление камерой.

суббота, 3 октября 2015 г.

Геометрия наносит ответный удар.

    Внезапно выяснил, что сделал перепад высот между уровнями a и d слишком большим, даже пологий спуск получается порядка пятидесяти градусов, что несколько занадто. Пришлось делать максимальную высоту в полтора метра вместо трех. Как результат - все предыдущие блоки отправились в пустыню в утиль. Начал делать всё снова, а раз уж пошла такая пьянка, несколько изменил геометрию, используя как образец для подражания вид кочки горы из сеговской Dune II:
 
    Однако без косяков не обошлось, плавные спуски надо переделывать, наверное уже в пятый или шестой раз. Геометрия, блин. Зато насобачился клепать их быстро, если бы еще без ошибок... Параллельно поправил материалы, сделал более жесткую границу между материалами, убрал реакцию на освещение, слегка выкрутив параметр Emit, убрал перебамп путем полного отключения и сделал размытие текстурной маске. Результат ниже:

вторник, 30 июня 2015 г.

Опять переписал генератор регионов.

   Уже наверное, пора ярлык вводить - "переписал генератор регионов". Однако, буду еще переписывать, похоже, есть такое ощущение... Еще добавил для регионов генерацию словаря связанных регионов, со списком индексов общих блоков для каждого. Оно будет надо сильно впоследствии, для вывода юнита в соседний регион.
  Так и не сообразил, как указать высоту блока, тем более, что блок может иметь сразу несколько высот. Типа "b,c,b,a" - весь диапазон высот присутствует. Это для "а,а,а,а" или "с,с,с,с" - никаких проблем.  Надо думать...
Ниже код, хотя без кода классов, оно малопонятно. Длиннота:

воскресенье, 7 июня 2015 г.

Начал набрасывать генератор регионов.

   Зато пока сообразил, как сделать, чуть мозг не поломал, но вроде сдвинулось с мертвой точки, тьфу-тьфу-тьфу... Здорово помог MyPaint - редактор графический. Рисовал вручную точки, соединял их линиями, пытался прикинуть, как оно должно работать. Немножко отвлекся, нарисовал картинку, смотрите ниже. Код пока еще страшный, состоит только из генератора списка блоков. Наверное вынесу его в отдельную функцию - пригодится для расчета полей зрения и вообще... Сам класс региона я написал аж в двух вариантах, и оба пойдут в утиль. Еще надо написать определение связанных регионов. Код ниже:


пятница, 24 апреля 2015 г.

Перенес ландшафт в основную сцену.

Еще переключил камеру в перспективный вид и слегка наклонил - получилось лучше. И так, по мелочи поковырялся. Больше ничего не делал.


понедельник, 30 марта 2015 г.

Похоже приплыли...

Со времени последнего сообщения не было сделано НИЧЕГО. Некогда. Пишу эти строки, а за окном дождь идет, поэтому появилось чуток времени. Так что выбрасываю промежуточный вариант, кому интересно, посмотрите. Когда продолжу, не знаю.


четверг, 12 марта 2015 г.

Хвастать вредно. Юбилей.

    Сперва о плохом. Не писал потому, что во-первых, был несколько занят, и занятость эта в ближайшее время будет увеличиваться до зимы, во-вторых, создание миникарты с помощью модуля видеотекстуры потерпело крах. Почему-то плоттер видеобуфера вешается, при слишком частых обращениях. И фиг бы с ним, но и Блендер тоже подвешивается намертво, приходится вырубать консоль, с которой он запущен. Пришлось подключать bgl,  в котором я ни в зуб ногой. Спасибо пользователю dron, который когда-то давно, еще в далекой-далекой галактике  на БУ, сделал пример использования этого самого бгл. Потихоньку ковыряюсь.

    Теперь о хорошем. Пример dron работает вне зависимости от того, понимаю я, что там происходит, или нет. Поэтому пишу класс миникарты, тупо копипастя код, осталось только изучить Веды. Поэтому есть подвижки, но хвастать пока нечем.
    Дальше - у моего WIP на момент написания сообщения 999 просмотров. Ура-ура, юбилей прямо вот-вот. 

суббота, 7 марта 2015 г.

Добавил промежуточный уровень.

Разный способ создания блоков ландшафта дал о себе знать - швы между блоками безобразны и вельми отвратны. Ну да мне все равно - для прототипа пойдет. Все равно этот вырвиглазный кубизм надо убирать, тем более что я и материалы ухитрился криво наложить.

пятница, 6 марта 2015 г.

Все получилось.

 Алгоритм оказался ОЧЕНЬ удачным.


Прогресс есть.

Но пока небольшой. Имена мешей генерируются, хотя вылезла проблема с тем, что для определения некоторый типов мешей алгоритм может быть проще, чем для других. Сижу, думаю, может можно как-то упростить? Есть еще вариант, надо думать.
Мне еще добавлять промежуточный уровень, для плавных спусков.
А так, все работает, как надо.


понедельник, 2 марта 2015 г.

Похвастаюсь.

    Работа над редактором блочного ландшафта медленно, но неуклонно движется в перед. "Наше дело правое и мы победим". Благодаря Flogger-K, который натолкнул на мысль, удалось разобраться с определением типа блока по соседним, без всяких "если блок выше такой-то, и блок правее такой-то, а блок левее совсем не такой, то..." Алгоритм более тормозной, но многообещающий. Если получится все правильно оформить, то распишу подробнее.

вторник, 24 февраля 2015 г.

Пока хвастать нечем #2

 Пробовал создать интерфейс. Вроде получается. Если бы не необходимость создания универсального скрипта, то просто накидал бы кнопок с видами блоков ландшафта и не парился бы. 
Надо написать еще выбор конкретного блока, в зависимости от высоты соседних, как в примере забора. Ниже картинка, смотреть особо не на что.

понедельник, 23 февраля 2015 г.

Пока хвастать нечем.

Для редактора блочного ландшафта сделал визуализацию, хотя пока и "не фонтан".  Надо еще поправлять. Уже тестил на карте 1024Х блоков, тормоза есть, но небольшие. Еще нужно запилить изменение соседних блоков от изменяемого и повыкидывать лишнее.

пятница, 30 января 2015 г.

Делаю редактор блочного ландшафта.

Пока упрощенный - надо еще понять, как правильно все сделать. Есть успехи:
1) Уже генерируется базовый ландшафт, состоящий из блоков с высотой 0. То есть "чистое поле". Размер произвольный, тестировал от 8Х8 до 256Х256 блоков.
2) Вроде окончательно решен вопрос с определением индекса блока ландшафта, на который указывает курсор мыши. Да и вообще любой объект, имеющий координаты.
3) Выборочно заменяются блоки ландшафта на другие.