Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

array of array of real; [D7, WinXP]


Pa5ha ©   (2004-07-26 23:29:00) 

Мне нужно в свою прогу (3д-рендер) добавить з-буффер. Только размер экрана и как следствие буффера могут изменяться пользователем. Как лучше организовать хранение? Я хотел ч/з двумерный динамический массив. Вопрос: как изменять его размеры (так, чтоб он остался прямоугольным)?

Можете предложить и другие варианты организации буффера...


parovoZZ   (2004-07-28 23:32:00) [1]

А я размер массива передавал в параметрах функции и чего-то у меня не работало. Сечас попробовал, но без выпендрёжа, блин горелый, действительно размер меняется. Это просто чедеса какие-то.


Pa5ha   (2004-07-28 23:03:00) [2]

2 parovoZZ
Как Вы видите, мы сдесь разговариваем о космосе...


Ertong   (2004-07-28 07:24:00) [3]


>  Это правда?

Для динамического массива ДА


Думкин   (2004-07-28 07:16:00) [4]

> [15] parovoZZ ©   (27.07.04 23:22)

Практика - лучший ответ, правда?
5 строчек кода или часы ожидания ответа в форуме.


parovoZZ   (2004-07-27 23:22:00) [5]

Так SetLength позволяет изменять размер массива? Это правда?


Pa5ha   (2004-07-27 22:21:00) [6]

2 parovoZZ
Там же написано, что размер буффера меняется пользователем. Если делать сразу по максимуму, то память будет просто резервироваться и не использоваться - это неэкономично и глупо. А так мы берем стока, скока надо. Как вариант...


parovoZZ   (2004-07-27 19:15:00) [7]

Конкретно по сабжу ещё вопросик: зачем вообще нужны динамические массивы? Ведь его размер можно установить раз и навсегда (и то по константе).


Ertong   (2004-07-27 12:57:00) [8]


>  [11] Sapersky   (27.07.04 12:19)

Сенкс за просвещение:)


Sapersky   (2004-07-27 12:19:00) [9]

А из-за книги Краснова многие думают, что отладка под DirectDraw (Direct3D) невозможна.

Щас читаю. Может кто-нибудь меня и здесь просветит:)


Просвещаю: в полноэкранном режиме, с которого почему-то начинают изложение авторы большинства книжек, отлаживать действительно проблематично. Но в оконном проблем совершенно никаких; даже страшный и ужасный Lock не приводит к немедленному зависанию - можно поставить DDLOCK_NOSYSLOCK, но у меня трассировка работала даже без этого. Видимо, доработали в MS это место со времён первого DX.
Причины, по которым нельзя было бы использовать оконный режим, найти трудно - разве что использование 8-битных режимов, но кто их сейчас испольэует? Всякий порядочный движок, ИМХО, должен уметь работать и в окне, и на полном экране; я лично сделал ещё возможность переключения "на ходу".
В плане отладки меня гораздо больше раздражает DirectInput, т.к. у него устройства постоянно теряются. Но и то - давно этим занимался, может, в чём-то не разобрался просто.


Ertong   (2004-07-27 11:11:00) [10]


>  [9] Думкин ©   (27.07.04 11:08)

Я искал в разделе по SetLength. Ладно, проехали.


Думкин   (2004-07-27 11:08:00) [11]

> [8] Ertong ©   (27.07.04 10:58)

Multidimensional dynamic arrays в Helpe

To declare multidimensional dynamic arrays, use iterated array of ... constructions. For example,

type TMessageGrid = array of array of string;
var Msgs: TMessageGrid;

declares a two-dimensional array of strings. To instantiate this array, call SetLength with two integer arguments. For example, if I and J are integer-valued variables,

SetLength(Msgs,I,J);

allocates an I-by-J array, and Msgs[0,0] denotes an element of that array.


Ertong   (2004-07-27 10:58:00) [12]


> Эта конструкция излишния для прямоугольных массивов.

Я понимаю. Просто я не знал, что SetLength может прнять больше параметров и нигде об этом не написано(всмысле я не нашел:)


Anatoly Podgoretsky   (2004-07-27 10:44:00) [13]

Ertong ©   (27.07.04 07:13) [4]
Эта конструкция излишния для прямоугольных массивов.


Ertong   (2004-07-27 10:41:00) [14]


> Это всё Фаронов.

Не читал :)


> А из-за книги Краснова многие думают, что отладка под DirectDraw
> (Direct3D) невозможна.

Щас читаю. Может кто-нибудь меня и здесь просветит:)


Sapersky   (2004-07-27 10:21:00) [15]

SetLength(ar,n);
for i:=0 to n-1 do SetLength(ar[n],m);


Это всё Фаронов. У него в книжке (по Delphi4 - не знаю как в других) этот метод преподносится как единственно верный.
А из-за книги Краснова многие думают, что отладка под DirectDraw (Direct3D) невозможна.
В общем, не всякому печатному слову верь...

Тада ещё вопрос: а как Lenght заюзать?

Наверное, Length(ar) - одно измерение, Length(ar[0]) - другое. Но проще размер хранить в доп. переменных, ИМХО.

Можете предложить и другие варианты организации буффера...

Если уж всё реализуется на софтвере, можно попробовать какие-нибудь изощрённые методы, например, слышал я о иерархическом Z-буфере - что-то вроде мипмэппинга для Z-буфера, или разбивки по quadtree... не помню точно.
Точнее, не слышал, а читал в книжке "Компьютерная графика. Полигональные модели" Шикина и Борескова. Для написания софтверного движка - рекомендую.


Ertong   (2004-07-27 07:13:00) [16]


> SetLength(ar, N, M)

Блин! А я всегда писал:
SetLength(ar,n);
for i:=0 to n-1 do SetLength(ar[n],m);
:))))))))))))))))))))))))))))


Pa5ha   (2004-07-27 00:46:00) [17]

Тада ещё вопрос: а как Lenght заюзать?


Pa5ha   (2004-07-27 00:09:00) [18]

Гы, спасибо!!!


Anatoly Podgoretsky   (2004-07-26 23:41:00) [19]

SetLength(ar, N, M)


Наверх

Титульная страница Поиск, карта сайта Написать письмо