Турист пиши конвертер файлов из макса в формат игры, я буду модели молевать.
Создание игр
Сообщений 1 страница 17 из 17
Поделиться22008-02-07 17:56:22
Создаешь файл : Systheme Grid.ms, туда вписываешь следующий код (В ноутпаде) :
utility SYSExport "Model export for Delphi"
(
local ostream, tabs = ""
group "Options"
(
checkbox cb_exportSelOnly "Selected Only"
checkbox cb_exportTexVerts "Export texture vertices"
)
group "Frames"
(
spinner sp_start "From:" range:[animationrange.start,animationrange.end,animationrange.start] type:#Integer
spinner sp_end "To:" range:[animationrange.start,animationrange.end,animationrange.end] type:#Integer
spinner sp_step "Step:" range:[animationrange.start + 1,animationrange.end,animationrange.start + 1] type:#Integer
)
button btn_export "Save As..." width:100
button btn_about "About" width:100
-------------------------------------------------------------------------------------
function ExportTarget obj =
(
Format (tabs+"myobj.target = Targetobject()\n") to:ostream
Format (tabs+"myobj.target.name = \"%\"\n") obj.target.name to:ostream
Format (tabs+"myobj.target.transform = %\n") obj.target.transform to:ostream
Format (tabs+"myobj.target.position += createPos\n") to:ostream
)
-------------------------------------------------------------------------------------
function ExportGeneric obj =
(
Format (tabs+"%\n") (ClassOf obj) to:ostream
for prop in GetPropNames obj do
(
local propname = prop as String
local propval = GetProperty obj prop
if (ClassOf obj) == Hedra and prop == #vertices then continue
if propval != undefined then
Format (tabs+"\t% %\n") propname propval to:ostream
)
if obj.target != undefined then
ExportTarget obj
Format (tabs+"end %\n") (ClassOf obj) to:ostream
)
-------------------------------------------------------------------------------------
function ExportMesh meshObj =
(
Format (tabs+"TriMesh()\n") to:ostream
Format (tabs+"numverts numfaces\n") to:ostream
Format (tabs+" % %\n") meshObj.numverts meshObj.numfaces to:ostream
-- Write vertices
if meshObj.numVerts > 0 then
(
Format (tabs+"Mesh vertices:\n") to:ostream
for i = 1 to meshObj.numVerts do
(
Format (tabs+"\t% % %\n") ((GetVert meshObj i).x) ((GetVert meshObj i).y) ((GetVert meshObj i).z) to:ostream
)
Format (tabs+"end vertices\n") to:ostream
)
-- Write faces
if meshObj.numFaces > 0 then
(
Format (tabs+"Mesh faces:\n") to:ostream
for i = 1 to meshObj.numFaces do
(
Format (tabs+"\t% % %\n") ((GetFace meshObj i).x as Integer) ((GetFace meshObj i).y as integer) ((GetFace meshObj i).z as Integer) to:ostream
)
Format (tabs+"end faces\n") to:ostream
)
Format (tabs+"end mesh\n") to:ostream
)
-------------------------------------------------------------------------------------
function ExportTexVertices MeshObj =
(
Format (tabs+"numtverts numtvfaces\n") to:ostream
Format (tabs+" % %\n") meshObj.numTVerts meshObj.numfaces to:ostream
-- Write texture vertices
if MeshObj.numTVerts > 0 then
(
Format (tabs+"Texture vertices:\n") to:ostream
for i = 1 to meshObj.NumTVerts do
(
Format (tabs+"\t% % %\n") (GetTVert meshObj i).x (GetTVert meshObj i).y (GetTVert meshObj i).z to:ostream
)
Format (tabs + "end texture vertices\n") to:ostream
)
-- Write texture faces
if meshObj.numfaces > 0 then
(
Format (tabs+"Texture faces:\n") to:ostream
for i = 1 to meshObj.numfaces do
(
Format (tabs+"\t% % %\n") ((GetTVFace meshObj i).x as Integer) ((GetTVFace meshObj i).y as Integer) ((GetTVFace meshObj i).z as Integer) to:ostream
)
Format (tabs + "end texture faces\n") to:ostream
)
)
-------------------------------------------------------------------------------------
function ExportNode node =
(
Format "New object\n" to:ostream
if SuperClassOf node == GeometryClass and ClassOf node == Editable_mesh then
ExportMesh node
else if (not (ClassOf node == Targetobject and node.isTarget)) then
ExportGeneric node
else
return false
return true
)
-------------------------------------------------------------------------------------
function RecursiveExportNode node =
(
if (ExportNode node) == false then
return false
-- Recurse children before writing this node
for child in node.children do
RecursiveExportNode child
Format "\n\n" to:ostream
)
-------------------------------------------------------------------------------------
function ExportGMS =
(
if cb_exportSelOnly.checked then
(
for node in selection do
ExportNode node
)
else
(
for node in rootnode.children do
RecursiveExportNode node
)
)
-------------------------------------------------------------------------------------
function GetSaveFileStream =
(
fname = GetSaveFileName types:"Systheme Grid (*.sy3)|*.sy3|All Files(*.*)|*.*|"
if fname == undefined then
return undefined
ostream = CreateFile fname
if ostream == undefined then
(
MessageBox "Couldn't open file for writing !"
return undefined
)
return ostream
)
-------------------------------------------------------------------------------------
on btn_about pressed do
(
MessageBox "Bengamin" title:"Systheme"
) -------------------------------------------------------------------------------------
on btn_export pressed do
(
ostream = GetSaveFileStream()
if ostream != undefined then
(
i = sp_start.value
while i <= sp_end.value do
(
slidertime = i
ExportGMS()
i += sp_step.value
)
if cb_exportTexVerts.checked then
(
for node in selection do
(
if SuperClassOf node == GeometryClass and ClassOf node == Editable_mesh then
(
Format "New Texture:\n" to:ostream
ExportTexVertices node
Format "end of texture\n" to:ostream
)
)
)
Format "end of file" to:ostream
Close ostream
)
)
--------------------------------------------------------------------------------------
on sp_start changed value do
(
slidertime = sp_start.value
)
) -- End SYSExportВот инструкция :
Systheme Grid Model Export
1.Конвертируем объект в сетку (Editable Mesh).
2.Reset XForm'ом удаляем все левые действия с объекта.
3.Делаем UVW Map с разверткой для правильного наложения текстур (лучше bmp,jpg).
4.Перейти на командную панель (она расположена справа) и выберать вкладку с изображением молотка.
5.Нажать кнопку MAXScript, внизу панели развернется свиток MAXScript'a.
6.Нажать кнопку "Run Script" ("Запуск Макроса"), появится диалоговое окно открытия файла.
7.Запустить файл Systheme Grid.ms
8.Раскрыть спиок утилит и выделить строку "Model export for Delphi"
9.Ввести значения.
10.Нажать кнопку "Save As...", в диалоговом окне введите имя файла и нажать кнопку сохранить.
Как работает утилита: При экспорте файла, берется значение из поля "From" и ползунок
счетчика кадров расположенный внизу экрана премещается на позицию, соответствующую
этому значению. Затем в выходной файл экспортируется объект в том виде, в каком он
пребывает на данный момент на экране. После чего снова передвигается ползунок кадров
на величину, введенную в поле "Step". Снова записывается модель соответствующая этому кадру.
И так до тех пор, пока ползунок не переместится на позицию соответствующую значению,
введенному в поле "To". Поскольку в данном примере мы не создавали анимацию, то нам
нужен был только один кадр. Утилита экспортировала кадр №1, затем добавила к нему
значение 100. Номер кадра стал равен 101. Поскольку это значение больше значения
введенного в поле "To", процесс экспорта на этом остановился. Если бы в поле From было
введено значение 0, то было бы экспортировано 2 кадра с номерами 0 и 100 соответственно.
Если пометить галочкой опцию "Selected Only", то экспортироваться будут только выделенные
объекты, это иногда бывает очень нужно, в противном случае будут экспортированы все
объекты сцены.
Можно экспортировать в файл модели координаты текстур, для этого надо поставить
галочку возле соответствующей надписи. При экспорте модели с текстурами есть
только одно ограничение, можно использовать только один файл текстуры т.е. придется
уместить все текстуры, скажем, в один bmp размером 1024*1024. Предварительно текстуру
нужно конечно же "натянуть" в самом максе.Предшествуя вопросы. Такой экспорт сохраняет модель в текст с координатами вершин и полигонов.
Базовый экспорт был не мной разработан, я лишь доделал маненько под свои нужды.
Главное - работает 
Поделиться32008-02-07 19:52:50
Этим программеры должны заниматься. Кстати прогу гони которая людей рисует из зап. частей
Кстати чем неудобен такой экспорт это тем, что можно будет конвертнуть только один объект, к примеру человека, а если к нему скелет добавить, то получится фигня все будет моргать а толку мало! Вспомни Дроновский движок!
Поделиться42008-02-10 00:38:54
Вот карту первую накидал
Поделиться52008-02-11 11:05:58
Fil
А зачем тебе скелет в игре???
Скелет нужен в максе - ты делаешь несколько анимаций (К примеру перезарядка и стрельба).
Потом, в игре, если у тебя нажимается левая кнопка мыши то играет анимация стрельбы, если кнопка R то играет перезарядка. Ниче моргать (Если нормально сделать) не будет.
Людей рисуют (Я уже говорил неонакратно) полигоналями в максе. Чем меньше поликов - тем лучше. Надо добивать текстурой.
Насчет карты = я в свое время делал редактор карт - в бейсике - там фишка была в том что карта сохранялась матрицей с пунктами типа 201434, карта и редактор весили нереально мало (Бейсик и карта в текстовом формате). Редактор выглядел как поле 40*40 (Вроде бы) и каждая клетка была рисунком. Рисунку приравнивалось значение текущего места (Т.е. вода, дорога). Если найду (Делал давно) то скину. Правдо он не доделан но вполне работал (Там вроде 30 мест было).
Дроновский движок эт самый лучший двиг для неккомерческих проектов - быстро дешево и хорошо. Залог красоты игрухи - не в двиге. А в трехмерщиках и двудешниках.
Вдогонку. Таким экспортом действительно мона будет конвертить тока одну модель. А кто тебе мешает конвертить поочередно несколько моделей, и связывать дочерние объекты с материнскими путем позиций и смещений от материнского объекта?
Отредактировано Bengamin (2008-02-11 11:08:57)
Поделиться62008-02-11 14:35:22
Если ты действительно хочешь сделать игру на подобие контры без нормальной физики, с безмозглыми ботами, которые в стоячем положении согнуты буквой з и т.п., то можешь писать на дроне все что хочешь, зачем ущемлять себя в чем то и не использовать все возможности движка? А пользуясь конвертером, ты не сможешь использовать все! Почему не заставить бота к примеру танцевать буга буга и не дать возможность игрокам менять одежду и т.п. А людей собирать поликами в максе ты заколебешься!!! Я над одним тут целую вечность сижу! Да и если ты такой умный и во всем этом разбираешься, то что ты тогда игру свою не наваял на дроновском двиге то?
Поделиться72008-02-11 15:56:45
Потому что на дроновском двиге я сделал 1 коммерческий проект (Случайно попал), причем сделал нормально. Не понятно почему ты считаешь что невозможно сделать физику в дроне. Это ваще то делается математическими формулами. Под любым движком. Заставить бота танцевать? Ну сделай в максе и не надо компасировать мозг двигу. Зачем его грузить? Менять одежду? то же самое. Делаешь в максе одежду - подцепляешь в двиг - вот и все )
Поделиться82008-02-11 16:59:44
У тебя это все просто так, чтоб к примеру поменять одежду в обливе, там стока операций надо проделать. Интересно узнать как ты собираешься менять одежду на теле? Обьясни ка пожалуйста! Вот есть голый бот, как ты не имея скелетной привязки заставишь напялить на бота платье и двигать одновременно с телом? СОгнешь руку в анимации, платье надо будет анимировать тоже, а как узнать какую последовательность действий будет выполнять игрок? Что прописывать миллионы часов анимации на каждый случай? Как ты вообще реализуешь привязку к телу?
Поделиться92008-02-11 17:04:17
И вообще чем языком молоть начал бы делать че нибудь!
Поделиться102008-02-11 20:40:20
Ппц да успокойтесь вы, хватит объёмом мозга мериться, и так все знают что вы умные)))
ЗЫ: ы вам в помощь, и ня вам в моск)
Поделиться112008-02-12 16:22:56
А зачем мне делать что нибудь бесплатно?
Единственное что я делаю бесплатно - пытаюсь поднять Систему, пытаюсь (правдо оч медленно, практически никак, к моему глубочайшему сожалению - нехватка времени) сделать скины для ДжаМПа.
Объясню тебе как на бота напялить одежду, очень просто и без скелетной привязки (Ни в одной игре не используется вообще скелетная привязка, ну эт так, к слову).
Есть максовская сцена, где стоит перс с своей анимацией на движение (Ради бога - голый). Есть у тебя отдельно (*.max) одежда для этого бота. Накладываешь привязкой одежду к персу. Дальше юзаешь модуль Reactor, или мона без него стандартными средставми деформации юзаца, у тебя получается меш-одежда повторяющая контуры персонажа с математическими движениями ткани (Ни в одном двиге ты не сделаешь ткань реально так как мона сделать в максе). Далее накладываешь на неё текстуру, идешь по модулю Systheme Grid, конвертишь в файл. Теперь в двиге просто тупо добавляешь объект и он у тебя накладывается на человечка твоего. Если не накладывается точка в точку то либо в максе надо центр тела поставить точно по центру перса либо в двиге переписать смещение фигуры (Канешн лучше в максе). Все. В чем проблемы? Ненадо никаких костей в двиге и анимации миллионов поликов (Хотя зачем в игрушке миллионы поликов???).
Поделиться122008-02-12 17:54:44
Корп блин!
(Ни в одной игре не используется вообще скелетная привязка, ну эт так, к слову).
Это говорит только о том что ты не юзал движки игр, а только языком трепишь, возьму идеальный пример скелетной привязки - это игра обливион. Если не веришь приходи я те покажу(я в нее не одну модельку платьев сделал), что здесь полная работа со скелетом и с распределением веса вершин! А если ты кроме Сириуса нихера не делал, то молчи вообще.
(Хотя зачем в игрушке миллионы поликов???).
Крендель читать научись, я четко написал милионы часов анимации, а не полики!
Поделиться132008-02-15 21:52:26
Это не идеальный пример ) Это единственный пример ) И причем обливион нельзя считать образцом для двига. Слишком высокие требования (Отчасти из за скелетки), а смысла мало.
Кстати движков я юзал достаточно, для того чтоб понять их плюсы и минусы.
А че за Сириус? Sidreal чтоле? Так это не мой двиг, это видоизмененный Quake 3 Aren'овский (Кстати там тоже нет скелетки).
Ты слишком усложняешь задачу. Какие миллионы часов анимации? Ты о чем? Читай выше как сделать быстро и нормально.
Поделиться142008-03-13 23:28:39
Скоро макака захватит мир))) В неё будут играть миллионы... *Безумный смех ещё более бузумного человека*
Поделиться152008-03-14 06:46:15
Конечно, Турист найди как нить меня в аське сконектимся поговорим про редактор уровней.
Поделиться162008-04-15 18:45:29
Во кульно чуваки забабахать собственную игру это тема... Я маленько шарю в максе могу карты рисовать если конечно возьмете к себе в команду...
Подучусь моленько глядишь чтонит ьболее клевое нарисую... Я быстро учусь, Фил подтвердит... 
Поделиться172008-04-15 23:14:53
подвержду, ой подивердю, ой ну кароч вы поняли 