Генерация egg
|
|
serg-kkz | Дата: Понедельник, 27.06.2011, 09:30 | Сообщение # 1 |
Генерал-полковник
Группа: Модераторы
Сообщений: 803
Награды: 3
Репутация: 18
Статус: Offline
| Чтоб сохранить в файл надо раскомментировать строку Create_egg.writeEgg("Territor.egg").
ООП -
Сообщение отредактировал serg-kkz - Понедельник, 27.06.2011, 09:35 |
|
| |
DancingOx | Дата: Воскресенье, 05.02.2012, 20:20 | Сообщение # 2 |
Лейтенант
Группа: Пользователи
Сообщений: 40
Награды: 0
Репутация: 3
Статус: Offline
| Скачал, раскомментил, запустил из Eclipse. Создаёт файл Territor.egg, но в нём только первая строка: Code <CoordinateSystem> { Y-Up } Также, показывает пустое серое пандовское окно. Ошибок не выдаёт, в чём дело?
Пробовал разобраться сам: Code from pandac.PandaModules import Point3, EggData, StringStream, loadEggData, NodePath import direct.directbase.DirectStart import cStringIO from random import randint egg = cStringIO.StringIO() ryad, sum_pol = 10, 100 egg.write('<Texture> 1 {"Tiles/1.png" <Scalar> uv-name { UVTex }}' '<Texture> 2 {"Tiles/2.png" <Scalar> uv-name { UVTex }}' '<Texture> 3 {"Tiles/3.png" <Scalar> uv-name { UVTex }}' '<VertexPool> Plane {') def PolygonPos(i): return Point3((i%ryad) - 3.5, int(i/ryad) - 3.5, 0) Index0, Index1, Index2, Index3 = 0, 1, 2, 3 for i in range(sum_pol): Pos = PolygonPos(i) X = Pos[0] Y = Pos[1] egg.write('<Vertex> '+str(Index0)+' {'+str(X-0.5)+' '+str(Y-0.5)+' 0 <UV> UVTex { 0 0 } <Normal> { 0 0 1 }}') egg.write('<Vertex> '+str(Index1)+' {'+str(X+0.5)+' '+str(Y-0.5)+' 0 <UV> UVTex { 1 0 } <Normal> { 0 0 1 }}') egg.write('<Vertex> '+str(Index2)+' {'+str(X+0.5)+' '+str(Y+0.5)+' 0 <UV> UVTex { 1 1 } <Normal> { 0 0 1 }}') egg.write('<Vertex> '+str(Index3)+' {'+str(X-0.5)+' '+str(Y+0.5)+' 0 <UV> UVTex { 0 1 } <Normal> { 0 0 1 }}') Index0, Index1, Index2, Index3 = Index0+4, Index1+4, Index2+4, Index3+4 egg.write('}') Index0, Index1, Index2, Index3 = 0, 1, 2, 3 for i in range(sum_pol): egg.write('<Polygon> {<TRef> { '+str(randint(1,3))+' } <VertexRef> { '+str(Index0)+' '+str(Index1)+' '+str(Index2)+' '+str(Index3)+' <Ref> { Plane }}}') Index0, Index1, Index2, Index3 = Index0+4, Index1+4, Index2+4, Index3+4
print egg.readlines() # выдаёт [] print egg.getvalue() # выдаёт <Texture> 1 {"Tiles/1.png" <Scalar> uv-name { UVTex }}<Texture> 2 и т.п.
Create_egg = EggData() print Create_egg.read(StringStream(egg.getvalue())) # выдаёт 1 Territor = render.attachNewNode(loadEggData(Create_egg)) print Create_egg.writeEgg("Territor.egg") # write file # выдаёт 1
egg.close() run() Однако, print egg.readlines() выдаёт пустой список, а print egg.getvalue() даёт строку <Texture> 1 {"Tiles/1.png" <Scalar> uv-name { UVTex }}<Texture> 2 и т.п. Также, функции Create_egg.read и Create_egg.writeEgg возвращают единицы, что, видимо, говорит о том, что парсинг и запись в файл прошли успешно. Вроде всё годно, но почему же тогда такой результат?
|
|
| |
serg-kkz | Дата: Воскресенье, 05.02.2012, 21:03 | Сообщение # 3 |
Генерал-полковник
Группа: Модераторы
Сообщений: 803
Награды: 3
Репутация: 18
Статус: Offline
| А если через батник? Я проверил все нормально. А нафиг через eclipse? только проблемы искать. Я давно забил на редакторы, Notepad++ и все и батник.
ООП -
|
|
| |
DancingOx | Дата: Воскресенье, 05.02.2012, 21:08 | Сообщение # 4 |
Лейтенант
Группа: Пользователи
Сообщений: 40
Награды: 0
Репутация: 3
Статус: Offline
| Запускал и через батник, правда пришлось путь исправить на C:\Python26\python.exe. Разницы-то немного - там только пауза добавлена. Результат тот же самый, - серое окно и .egg-файл с одной строчкой.
Про Eclipse: Подсветка, автодополнение, встроенная консоль, менеджер проектов для меня полезны, по крайней мере, пока. =)
|
|
| |
serg-kkz | Дата: Воскресенье, 05.02.2012, 21:14 | Сообщение # 5 |
Генерал-полковник
Группа: Модераторы
Сообщений: 803
Награды: 3
Репутация: 18
Статус: Offline
| DancingOx, У тебя питон отдельно ? А ты вообще панду как ставил?
Тебе нужно было только выделенное красным заменить на путь где у тебя установлена панда. Вот:
C:\Panda3D-1.7.2\python\python.exe REC.py
ООП -
|
|
| |
DancingOx | Дата: Воскресенье, 05.02.2012, 21:24 | Сообщение # 6 |
Лейтенант
Группа: Пользователи
Сообщений: 40
Награды: 0
Репутация: 3
Статус: Offline
| Да, питон отдельно, ибо он у меня на компе намного раньше появился, чем панда. Когда поставил панду, у меня оказалось сразу два питона. Но это оказалось решаемым, ответ на такой вопрос нашёлся на оффсайте: http://www.panda3d.org/manual/index.php/General_Preparation С путём всё нормально, во всяком случае, скрипт не запустился бы, еслиб питон не был найден.
Сообщение отредактировал DancingOx - Воскресенье, 05.02.2012, 21:30 |
|
| |
serg-kkz | Дата: Воскресенье, 05.02.2012, 21:43 | Сообщение # 7 |
Генерал-полковник
Группа: Модераторы
Сообщений: 803
Награды: 3
Репутация: 18
Статус: Offline
| А... понял. Нужно сначало строку закоментировать. Вот:
Code Territor = render.attachNewNode(loadEggData(Create_egg))
И можно сохранять. И да мышкой поверти, если не раскомментировал для сохранения.
ООП -
|
|
| |
DancingOx | Дата: Понедельник, 06.02.2012, 01:29 | Сообщение # 8 |
Лейтенант
Группа: Пользователи
Сообщений: 40
Награды: 0
Репутация: 3
Статус: Offline
| serg-kkz, спасибо! То, что надо, - всё получилось. Оказалось, чтобы модельку увидеть, нужно внимательнее крутить камеру всеми тремя кнопками. =) .egg-файл тоже записался, когда я закомментил, как ты написал. Получается, что функция loadEggData, принимающая объект Create_egg в качестве аргумента, очищает его содержимое?
Сообщение отредактировал DancingOx - Понедельник, 06.02.2012, 01:30 |
|
| |
serg-kkz | Дата: Понедельник, 06.02.2012, 13:24 | Сообщение # 9 |
Генерал-полковник
Группа: Модераторы
Сообщений: 803
Награды: 3
Репутация: 18
Статус: Offline
| Я раньше натыкался на эту странность, но что-то подзабыл. Получается что да, и правда зачем нужны данные после использования.
ООП -
|
|
| |