![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Sniper |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 511 Регистрация: 8.5.2002 Репутация: нет Всего: 2 |
var
VertexCount: Integer; Vertex: array of TVector; procedure LoadWorld(Filename: String); var F: TextFile; begin AssignFile(F, Filename); Reset(F); while not Eof(F) do begin SetLength(Vertex, VertexCount+1); ReadLn(F, Vertex[VertexCount].X, Vertex[VertexCount].Y, Vertex[VertexCount].Z); Inc(VertexCount); end; CloseFile(F); end; Как её изметить, чтобы можно было загружать файл типа... a.k.a по три триагла в строчку! ..... -4.270096 -2.520900 -6.080324 4.475884 2.932476 -6.080324 4.475884 -2.520900 -6.080324 ..... -------------------- "Я испытываю отвращение к системе, разработаннной для "пользователя", если в слове "пользователь" закодировано уничижительное значение "тупой и примитивный". Кен Томпсон, создатель Unix |
|||
|
||||
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Конкретизируй вопрос для таких недоумков, как я. А то ничего непонятно.
И в твоем случае надо однозначно пользоваться связными списками, а не массивом, которому в каждой итерации надо реаллокацию делать. -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| Sniper |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 511 Регистрация: 8.5.2002 Репутация: нет Всего: 2 |
Смотри: функция выше читает файл типа
..... -4.270096 -2.520900 -6.080324 4.475884 2.932476 -6.080324 4.475884 -2.520900 -6.080324 ..... А мне нужно, чтобы читала ..... -4.270096 -2.520900 -6.080324 4.475884 2.932476 -6.080324 4.475884 -2.520900 -6.080324 ..... где .... - это тоже числа p.s не связанные списки и прочее не надо... у меня всё держится на дин массивах! А то прикручу и нифига работать не будет! %-) -------------------- "Я испытываю отвращение к системе, разработаннной для "пользователя", если в слове "пользователь" закодировано уничижительное значение "тупой и примитивный". Кен Томпсон, создатель Unix |
|||
|
||||
| stron |
|
|||
![]() Консультант ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1654 Регистрация: 17.7.2003 Где: Питер Репутация: нет Всего: 36 |
Либо я чего-то не понял, либо поменяй readln на read (хотя я наверное не понял!!)
А ещё в начале я бы обнулил VertexCount -------------------- подписи нет |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
А лучше было бы если бы файл был бы типизорованным: var F: File of TVector
-> читать в цикле таким образом : Read(f, Vertex[VertexCount]) Можно будет переделать и по 3 вертекса за 1 read, только тогда файл надо делать нетипизированным - но зачем тебе это, объясни? -------------------- С уважением, г-н Посол. |
|||
|
||||
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Я согласен с господином :p0s0l. В типизированном файле все твои вертексы будут занимать одно и то же количество байт (32 бит с одинарной точностью и 64 с двойной). Так намного удобнее будет с ними работать. Тем блолее, что чтение и запись будет происxодить на порядок быстрее.
На счет массивов: если ты пользуешься функциями :OpenGL (как я понял) для построения "мира", которые как параметр получают массив вертексов, то даже в таком случае быстрее будет считать в список и по нему сделать массив и переписать туда вертексы. Дело в том, что когда ты делаешь каждый раз выделение памяти с сохранением предыдущих данных, то сначала выделяется новый кусок памяти, потом туда переписываются данные из старого массива, и старый массив уничтожается. Ты прикинь сколько раз он обращается к памяти! Это получится (n^2)/2, где n - количество записей. А если ты сделаешь, как я сказал - сначала запишешь в список, а потом в массив - то получится 2n. Конечно, если решить неравенство: n*n/2<2n |*2 n*n-4n<0 n(n-4)<0 4>n>0 Вот так, значит когда количество вертексов (0~4), то твой способ более эффективен, в остальных случаях - мой. Я думаю, что количество вертексов у тебя, ну никак не меньше 20. -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
На счет SetLength - можно где-нибудь хранить кол-во вертексов, и сделать один раз перед циклом setlength, а в цикле убрать...
-------------------- С уважением, г-н Посол. |
|||
|
||||
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Точно! Например, если фаил типизированный, то (скажем по 32 бит на вертекс) делим его размер на 4 и получаем кол-во вертексов. Тогда это решит проблему. Но опять же файл должен быть типизированный...
-------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
Вернее лучше делить надо на SizeOf(TVertex):
-------------------- С уважением, г-н Посол. |
|||
|
||||
| Sniper |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 511 Регистрация: 8.5.2002 Репутация: нет Всего: 2 |
Хорошо, а как теперь это изьять из vertex? У меня это было так
var Triangle: array [0..2] of TVector; for i := 0 to (VertexCount - 1) div 3 do begin Triangle[0] := Vertex[i * 3]; Triangle[1] := Vertex[i * 3 + 1]; Triangle[2] := Vertex[i * 3 + 2]; end; нужно, чтобы так оно и было как сдесь представлено, а то мне придётся очень много кода заново переписывать!!!! %-( -------------------- "Я испытываю отвращение к системе, разработаннной для "пользователя", если в слове "пользователь" закодировано уничижительное значение "тупой и примитивный". Кен Томпсон, создатель Unix |
|||
|
||||
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Чтo-то тут не то... У тебя что массив треугольника (Triangle) все время перезаписывался? Как-то странно у тебя логика построена...
Да и вообще твой цикл можно записать так: for i := 0 to VertexCount-1 do Triangle[i mod 3] := Vertex[i]; Но смысла в этом цикле мало. Скажи, что ты пытаешься сделать и в чем твои затруднения. Не боись твой код никому не продадим. -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
И вообще, если будешь делать типизированный файл, и если у тебя мир и модели представлены только треугольниками, то можно писать/читать сразу треугольниками за один Read/Write - тогда var F : File of TTriangle...
А цикл-то и вправду интересный... -------------------- С уважением, г-н Посол. |
|||
|
||||
| Sniper |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 511 Регистрация: 8.5.2002 Репутация: нет Всего: 2 |
Ребята! Вы можете просто ответить на вопрос?
Оптимизировать будем позже! %-) >>А цикл-то и вправду интересный... потом выводятся треугольники glBegin(GL_TRIANGLES); gltexcoord2d(0,0); glVertex3fv(@Triangle[0]); gltexcoord2d(2,0); glVertex3fv(@Triangle[1]); gltexcoord2d(0,2); glVertex3fv(@Triangle[2]); glEnd; -------------------- "Я испытываю отвращение к системе, разработаннной для "пользователя", если в слове "пользователь" закодировано уничижительное значение "тупой и примитивный". Кен Томпсон, создатель Unix |
|||
|
||||
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Цикл можно оставить без изменений.
-------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| Sniper |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 511 Регистрация: 8.5.2002 Репутация: нет Всего: 2 |
neutrino Наконецто вы меня поняли! %-))))
-------------------- "Я испытываю отвращение к системе, разработаннной для "пользователя", если в слове "пользователь" закодировано уничижительное значение "тупой и примитивный". Кен Томпсон, создатель Unix |
|||
|
||||
| Sniper |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 511 Регистрация: 8.5.2002 Репутация: нет Всего: 2 |
Народ ну помогите мне! А!!!!
Простой вопрос....!!!! -------------------- "Я испытываю отвращение к системе, разработаннной для "пользователя", если в слове "пользователь" закодировано уничижительное значение "тупой и примитивный". Кен Томпсон, создатель Unix |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Структуру файла ты определяешь или нет?
Если ты, то используй типизированные файлы и никаких проблем не будет:
Только код я писал навскидку, могут быть небольшие проблемы. -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: 58 Всего: 112 |
В чем проблема-то ? -------------------- С уважением, г-н Посол. |
|||
|
||||
| Sniper |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 511 Регистрация: 8.5.2002 Репутация: нет Всего: 2 |
2 Vit у меня ещё тупой вопрос но всё же...
какой тогда, если пользовать этот код, должен быть формат файла? %-) Это сообщение отредактировал(а) Sniper - 27.9.2003, 09:05 -------------------- "Я испытываю отвращение к системе, разработаннной для "пользователя", если в слове "пользователь" закодировано уничижительное значение "тупой и примитивный". Кен Томпсон, создатель Unix |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Тот который получится... Реально он будет по 12 байт в 1 записи, записи будут следовать одна за другой без разделителя, в каждой записи X - первые 4 байта, Y- вторые 4 байта, Z - последние 4 байта
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |