[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Генерация egg
serg-kkzДата: Понедельник, 27.06.2011, 09:30 | Сообщение # 1
Генерал-полковник
Группа: Модераторы
Сообщений: 803
Награды: 3
Репутация: 18
Статус: Offline
Чтоб сохранить в файл надо раскомментировать строку Create_egg.writeEgg("Territor.egg").

Прикрепления: 7889344.rar (6.1 Kb) · 5943587.jpg (191.7 Kb)


ООП  -  

Сообщение отредактировал 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++ и все smile и батник.

ООП  -  
 
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, У тебя питон отдельно wacko ? А ты вообще панду как ставил? eek

Тебе нужно было только выделенное красным заменить на путь где у тебя установлена панда. Вот:

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
Я раньше натыкался на эту странность, но что-то подзабыл. Получается что да, и правда зачем нужны данные после использования.

ООП  -  
 
  • Страница 1 из 1
  • 1
Поиск: