Механический наддув двигателя своими руками: установка компрессора. Материалы для работы

Практически все в нашей жизни зависит от электричества, но существуют определенные технологии, которые позволяют избавиться от локальной проводной энергии. Предлагаем рассмотреть, как сделать магнитный двигатель своими руками, его принцип работы, схема и устройство.

Типы и принципы работы

Существует понятие вечных двигателей первого порядка и второго. Первый порядок – это устройства, которые производят энергию сами по себе, из воздуха, второй тип – это двигатели, которым необходимо получать энергию, это может быть ветер, солнечные лучи, вода и т.д., и уже её они преобразовывают в электричество. Согласно первому началу термодинамики, обе эти теории невозможны, но с таким утверждением не согласны многие ученые, которые и начали разработку вечных двигателей второго порядка, работающих на энергии магнитного поля.

Фото – Магнитный двигатель дудышева

Над разработкой «вечного двигателя» трудилось огромное количество ученых во все времена, наиболее большой вклад в развитие теории о магнитном двигателе сделали Никола Тесла, Николай Лазарев, Василий Шкондин, также хорошо известны варианты Лоренца, Говарда Джонсона, Минато и Перендева.


Фото – Магнитный двигатель Лоренца

У каждого из них своя технология, но все они основаны на магнитном поле, которое образовывается вокруг источника. Стоит отметить, что «вечных» двигателей не существует в принципе, т.к. магниты теряют свои способности приблизительно через 300-400 лет.

Самым простым считается самодельный антигравитационный магнитный двигатель Лоренца . Он работает за счет двух разнозаряженных дисков, которые подключаются к источнику питания. Диски наполовину помещаются в полусферический магнитный экран, поле чего их начинают аккуратно вращать. Такой сверхпроводник очень легко выталкивает из себя МП.

Простейший асинхронный электромагнитный двигатель Тесла основан на принципе вращающегося магнитного поля, и способен производить электричество из его энергии. Изолированная металлическая пластина помещается как можно выше над уровнем земли. Другая металлическая пластина помещается в землю. Провод пропускается через металлическую пластину, с одной стороны конденсатора и следующий проводник идет от основания пластины к другой стороне конденсатора. Противоположный полюс конденсатора, будучи подключенным к массе, используется как резервуар для хранения отрицательных зарядов энергии.

Фото – Магнитный двигатель Тесла

Роторный кольцар Лазарева пока что считается единственным работающим ВД2, кроме того, он прост в воспроизведении, его можно собрать своими руками в домашних условиях, имея в пользовании подручные средства. На фото показана схема простого кольцевого двигателя Лазарева:

Фото – Кольцар Лазарева

На схеме видно, что емкость поделена на две части специальной пористой перегородкой, сам Лазарев применял для этого керамический диск. В этот диск установлена трубка, а емкость заполнена жидкостью. Вы для эксперимента можете налить даже простую воду, но желательно применять улетучивающийся раствор, к примеру, бензин.

Работа осуществляется следующим образом: при помощи перегородки, раствор попадает в нижнюю часть емкости, а из-за давления по трубке перемещается наверх. Это пока что только вечное движение, не зависящее от внешних факторов. Для того чтобы соорудить вечный двигатель, нужно под капающей жидкостью расположить колесико. На основе этой технологии и был создан самый простой самовращающийся магнитный электродвигатель постоянного движения, патент зарегистрирован на одну российскую компанию. Нужно под капельницу установить колесико с лопастями, а непосредственно на них разместить магниты. Из-за образовавшегося магнитного поля, колесо начнет вращаться быстрее, быстрее перекачиваться вода и образуется постоянное магнитное поле.

Линейный двигатель Шкондина произвел своего рода революцию в прогрессе. Это устройство очень простой конструкции, но в тоже время невероятно мощное и производительное. Его двигатель называется колесо в колесе, и в основном его используют в современной транспортной отрасли. Согласно отзывам, мотоцикл с мотором Шкондина может проехать 100 километров на паре литров бензина. Магнитная система работает на полное отталкивание. В системе колеса в колесе, есть парные катушки, внутри которых последовательно соединены еще одни катушки, они образовывают двойную пару, у которой разные магнитные поля, за счет чего они двигаются в разные стороны и контрольный клапан. Автономный мотор можно устанавливать на автомобиль, никого не удивит бестопливный мотоцикл на магнитном двигателе, устройства с такой катушкой часто используются для велосипеда или инвалидной коляски. Купить готовый аппарат можно в интернете за 15000 рублей (производство Китай), особенно популярен пускатель V-Gate.


Фото – Двигатель Шкондина

Альтернативный двигатель Перендева – это устройство, которое работает исключительно благодаря магнитам. Используется два круга – статичный и динамичный, на каждом из них в равной последовательности, располагаются магниты. За счет самооталкивающейся свободной силы, внутренний круг вращается бесконечно. Эта система получила широкое применение в обеспечении независимой энергии в домашнем хозяйстве и производстве.


Фото – Двигатель Перендева

Все перечисленные выше изобретения находятся в стадии развития, современные ученые продолжают их совершенствовать и искать идеальный вариант для разработки вечного двигателя второго порядка.

Помимо перечисленных устройств, также популярностью у современных исследователей пользуется вихревой двигатель Алексеенко, аппараты Баумана, Дудышева и Стирлинга.

Как собрать двигатель самостоятельно

Самоделки пользуются огромным спросом на любом форуме электриков, поэтому давайте рассмотрим, как можно собрать дома магнитный двигатель-генератор. Приспособление, которое мы предлагаем сконструировать, состоит из 3 соединенных между собой валов, они скреплены таким образом, что вал в центре повернут прямо к двум боковым. К середине центрального вала прикреплен диск из люцита диаметров четыре дюйма, толщиной в половину дюйма. Внешние валы также оснащены дисками диаметром два дюйма. На них расположены небольшие магниты, восемь штук на большом диске и по четыре на маленьких.


Фото – Магнитный двигатель на подвеске

Ось, на которых расположены отдельные магниты, находится в параллельной валам плоскости. Они установлены таким образом, что концы проходят возле колес с проблеском в минуту. Если эти колеса двигать рукой, то концы магнитной оси будут синхронизироваться. Для ускорения рекомендуется установить алюминиевый брусок в основание системы так, чтобы его конец немного касался магнитных деталей. После таких манипуляций, конструкция должна начать вращаться со скоростью пол оборота в одну секунду.

Приводы установлены специальным образом, при помощи которого валы вращаются аналогично друг другу. Естественно, если воздействовать на систему сторонним предметом, к примеру, пальцем, то она остановится. Этот вечный магнитный двигатель изобрел Бауман, но ему не удалось получить патент, т.к. на тот момент устройство отнесли к разряду непатентуемых ВД.

Для разработки современного варианта такого двигателя многое сделали Черняев и Емельянчиков.


Фото – Принцип работы магнита

Какие достоинства и недостатки имеют реально работающие магнитные двигатели

Достоинства:

  1. Полная автономия, экономия топлива, возможность из подручных средств организовать двигатель в любом нужном месте;
  2. Мощный прибор на неодимовых магнитах способен обеспечивать энергией жилое помещение до 10 вКт и выше;
  3. Гравитационный двигатель способен работать до полного износа и даже на последней стали работы выдавать максимальное количество энергии.

Недостатки:

  1. Магнитное поле может негативно влиять на здоровье человека, особенно этому фактору подвержен космический (реактивный) движок;
  2. Несмотря на положительные результаты опытов, большинство моделей не способны работать в нормальных условиях;
  3. Даже после приобретения готового мотора, его бывает очень сложно подключить;
  4. Если Вы решите купить магнитный импульсный или поршневой двигатель, то будьте готовы к тому, что его цена будет сильно завышена.

Работа магнитного двигателя – это чистая правда и она реально, главное правильно рассчитать мощность магнитов.

В прошлый раз мы рассмотрели способ организации «базы данных» без собственно самой базы данных. Сегодня продолжим тему создания «без-mysql’ного» сайтового движка разговором об каталогах, файлах и include’ах. Также будет немного теории и практики о собственно работе такого двигателя.

Основные принципы организации работы

Несложно догадаться, что организация устройства движка зависит от многих факторов, изменяющихся в каждом конкретном примере сайта. Это и предполагаемая структура информации, и особенности хостинга, на котором размещён сайт (наличие-отстутствие таких средств как php, ssi, доступность каких-либо баз данных, и т. п.), и не в меньшей степени при разработке устройства будущего движка нужно учитывать дизайн сайта, то есть структуру самих страниц.

Собственно, одной из целей создания движка для сайта есть как раз организация удобной работы по обновлению материалов, и, как предусловие, практически полное отделение дизайна сайта от собственно его полезного содержания (во загнул). Но в любом случае, будущий дизайн надо учитивать, каким образом - об этом немного позже.

Итак, само слово «разделение» подразумевает уже, как минимум, разделение страницы сайта на два файла - с шаблоном дизайна (который может быть общим для нескольких страниц) и файла с самим контентом, то есть информацией.

Кроме этих двух файлов нам понадобиться ещё один, включаемый во все динамические страницы (имеются ввиду страницы, содержащие php-код). В этом файле мы будем хранить все общие функции движка (собственно, их можно назвать «ядром»), а также определим некоторые полезные глобальные константы.

Основной задачей функций ядра будет чтение файлов с текстами статей, картинками или иными материлами сайта, а также вывод этого контента в нужной форме на экран. Третью функцию - ввод данных - мы не рассматриваем, так как способ хранения данных (файлы с разделителями) позволяет вводить информацию при помощи стандартных средств (любимого текстового редактора, например).

А под фразой «учитывать дизайн», высказанной немного выше, имелось ввиду создание системы шаблонов, или, проще говоря, набора оформлений разных страниц (html-файлов, по сути), где места под изменяемое содержание (заголовки, меню, тексты - всё, что генерируется динамически) оставлены пустыми. Подставлятся они будут «на лету» при обращении пользователя к определенной странице. Получается даже дополнительный выигрыш - кроме всего прочего, уменьшаеться объём хранимых на сервере файлов, так как оформление страниц не повторяется в каждом файле, а хранится в одном месте. Про удобство при возможном желании изменения дизайна, я думаю, и говорить не надо.

Расположение файлов

Итак, вернемся к собственно организации нашей системы. Основной принцип, который будет использоваться в нашем примере - это одноуровневость разделов. Но не волнуйтесь - это лишь для упрощения примеров. Если для вас это слишком серъёзное ограничение - просто придется подождать следующего выпуска, в котором мы поищем обходные пути.

Итак, у нас имеются каталоги, каждый из которых является разделом сайта (естественно, кроме служебных каталогов, таких, как “images”).

Это значит, что в каждом таком каталоге должен лежать так называемый «индексный файл» - страница, которая загружается по умолчанию при таком обращении к разделу: http://site.com/razdel. Имя этого файла (или возможные имена) вам нужно узнать у вашего хостера. Чаще всего это такие имена, как “index.html”, “index.php” и т. п. - расширение зависит от используемого серверного языка.

Значит, с именами файлов разобрались. Но что же нам положить в эти файлы? Вот теперь-то мы и переходим собственно к основной части сегодняшнего разговора.

В самом начале файла стоит вставить код включения ядра движка. Подобное обращение на языке php выглядит следующим образом:

// инициализация ядра include("bin/core.php");

В этом файле содержатся те самые функции чтения-вывода, описанные в прошлой статье. Таким образом, они теперь становяться доступными для использования.

В этом же файле стоит описать ещё некоторые полезные функции. Например, функция непосредственного получения какого-либо файла в виде строки (может пригодится):

function getinclude($path) { return str_replace("n", "", (implode(file($path), ""))); }

Новостная система

Ещё одной полезностью может оказаться функция для организации простейшей новостной системы. Но, не смотря на простоту реализации, она имеет достачно удобные фичи, такие как вывод в любом месте страницы блока с указанным количеством последних новостей и возможность организации архива новостей.

Суть её работы сводится к следуещему. Имеется текстовый файл с новостями, разделенными символом перевода строки (словом, каждая новость - в новой строке). Каждая строка разделена символом вертикальной черты («|») на два поля: дату и, собственно, саму новость.

Опредилив функцию новостной системы в нашем включамом файле («ядре»), мы получаем возможность на любой странице получить нужное количество последних новостей. Первым параметром передаётся часть пути, указывающая на размещение файла с новостями. Количество выводимых новостей, как вы уже догадались, задаётся вторым, необязательным, параметром.

Вот моя реализация функции новостной системы:

function getnews($path="", $lim=3) { $news = file($path."news.txt"); $result = ""; if ($lim == 0) { $lim = count($news); } for ($i=0; $i<$lim && $i

Что ж, на сегодня пока что всё. Продолжение следует…

статью о том, как сделать реактивный двигатель своими руками .

Внимание ! Строительство собственного реактивного двигателя может быть опасным. Настоятельно рекомендуем принять все необходимые меры предосторожности при работе с поделкой , а также проявлять крайнюю осторожность при работе с инструментами. В самоделке заложены экстремальные суммы потенциальной и кинетической энергии (взрывоопасное топливо и движущие части), которые могут нанести серьёзные травмы во время работы газотурбинного двигателя. Всегда проявляйте осторожность и благоразумие при работе с двигателем и механизмами и носите соответствующую защиту глаз и слуха. Автор не несёт ответственности за использование или неправильную трактовку информации, содержащейся в настоящей статье.

Шаг 1: Прорабатываем базовую конструкцию двигателя

Начнём процесс сборки двигателя с 3Д моделирования. Изготовление деталей с помощью ЧПУ станка значительно облегчает процесс сборки и уменьшает количество часов, которые будут потрачены на подгонку деталей. Главное преимущество при использовании 3D процессов – это способность видеть, как детали будут взаимодействовать вместе до того момента, как они будут изготовлены.

Если вы хотите изготовить действующий двигатель, обязательно зарегистрируйтесь на форумах соответствующей тематики. Ведь компания единомышленников значительно ускорить процесс изготовления самоделки и значительно повысит шансы на удачный результат.

Шаг 2:

Будьте внимательны при выборе турбокомпрессора! Вам нужен большой «турбо» с одной (не разделенной) турбиной. Чем больше турбокомпрессор, тем больше будет тяга готового двигателя. Мне нравятся турбины с крупных дизельных двигателей.

Как правило, важен не столько размер всей турбины, как размер индуктора. Индуктор – видимая область лопаток компрессора.

Турбокомпрессор на картинке – Cummins ST-50 с большого 18 колесного грузовика.

Шаг 3: Вычисляем размер камеры сгорания

В шаге приведено краткое описания принципов работы двигателя и показан принцип по которому рассчитываются размеры камеры сгорания (КС), которую необходимо изготовить для реактивного двигателя.

В камеру сгорания (КС) поступает сжатый воздух (от компрессора), который смешивается с топливом и воспламеняется. «Горячие газы» выходят через заднюю часть КС перемещаясь по лопастям турбины, где она извлекает энергию из газов и преобразует её в энергию вращения вала. Этот вал крутит компрессор, что прикреплён к другому колесу, что выводит большую часть отработанных газов. Любая дополнительная энергия, которая остаётся от процесса прохождения газов, создаёт тягу турбины. Достаточно просто, но на самом деле немного сложно всё это построить и удачно запустить.

Камера сгорания изготовлена из большого куска стальной трубы с крышками на обеих концах. Внутри КС установлен рассеиватель. Рассеиватель – эта трубка, что сделана из трубы меньшего диаметра, которая проходит через всю КС и имеет множество просверленных отверстий. Отверстия позволяют сжатому воздуху заходить в рабочий объём и смешиваться с топливом. После того, как произошло возгорание, рассеиватель снижает температуру воздушного потока, который входит в контакт с лопастями турбины.

Для расчета размеров рассеивателя просто удвойте диаметр индуктора турбокомпрессора. Умножьте диаметр индуктора на 6, и это даст вам длину рассеивателя. В то время как колесо компрессора может быть 12 или 15 см в диаметре, индуктор будет значительно меньше. Индуктор из турбин (ST-50 и ВТ-50 моделей) составляет 7,6 см в диаметре, так что размеры рассеивателя будут: 15 см в диаметре и 45 см в длину. Мне хотелось изготовить КС немного меньшего размера, поэтому решил использовать рассеиватель диаметром 12 см с длиной 25 см. Я выбрал такой диаметр, прежде всего потому, что размеры трубки повторяют размеры выхлопной трубы дизельного грузовика.

Поскольку рассеиватель будет располагаться внутри КС, рекомендую за отправную точку взять минимальное свободное пространство в 2,5 см вокруг рассеивателя. В моём случае я выбрал 20 см диаметр КС, потому что она вписывается в заранее заложенные параметры. Внутренний зазор будет составлять 3,8 см.

Теперь у вас есть примерные размеры, которые уже можно использовать при изготовлении реактивного двигателя. Вместе с крышками на концах и топливными форсунками – эти части в совокупности будут образовывать камеру сгорания.

Шаг 4: Подготовка торцевых колец КС

Закрепим торцевые кольца с помощью болтов. С помощью данного кольца рассеиватель будет удерживаться в центра камеры.

Наружный диаметр колец 20 см, а внутренние диаметры 12 см и 0,08 см соответственно. Дополнительное пространство (0,08 см) облегчит установку рассеивателя, а также будет служить в качестве буфера для ограничения расширений рассеивателя (во время его нагрева).

Кольца изготавливаются из 6 мм листовой стали. Толщина 6 мм позволит надежно приварить кольца и обеспечить стабильную основу для крепления торцевых крышек.

12 отверстий для болтов, которые расположены по окружности колец, обеспечат надежное крепление при монтаже торцевых крышек. Следует приварить гайки на заднюю часть отверстий, чтобы болты могли просто ввинчиваться прямо в них. Всё это придумано только из-за того, что задняя часть будет недоступна для гаечного ключа. Другой способ– это нарезать резьбу в отверстиях на кольцах.

Шаг 5: Привариваем торцевые кольца

Для начала нужно укоротить корпус до нужной длины и выровнять всё должным образом.

Начнём с того, что обмотаем большой лист ватмана вокруг стальной трубы так, чтобы концы сошлись друг с другом и бумага была сильно натянута. Из него сформируем цилиндр. Наденьте ватман на один конец трубы так, чтобы края трубы и цилиндра из ватмана заходили заподлицо. Убедитесь, что там будет достаточно места (чтобы сделать отметку вокруг трубы), так чтобы вы могли сточить металл заподлицо с отметкой. Это поможет выровнять один конец трубы.

Далее следует измерить точные размеры камеры сгорания и рассеивателя. С колец, которые будут приварены, обязательно вычтите 12 мм. Так как КС будет в длину 25 см, учитывать стоит 24,13 см. Поставьте отметку на трубе, и воспользуйтесь ватманом, чтобы изготовить хороший шаблон вокруг трубы, как делали раньше.

Отрежем лишнее с помощью болгарки. Не волнуйтесь о точности разреза. На самом деле, вы должны оставить немного материала и очистить его позже.

Сделаем скос с обеих концов трубы(чтобы получить хорошее качество сварного шва). Воспользуемся магнитными сварочными зажимами, чтобы отцентровать кольца на концах трубы и убедиться, что они находятся на одном уровне с трубой. Прихватите кольца с 4-х сторон, и дайте им остыть. Сделайте сварной шов, затем повторите операции с другой стороны. Не перегревайте металл, так вы сможете избежать деформации кольца.

Когда оба кольца приварены, обработайте швы. Это необязательно, но это сделает КС более эстетичной.

Шаг 6: Изготавливаем заглушки

Для завершения работ по КС нам понадобится 2 торцевые крышки. Одна крышка будет располагаться на стороне топливного инжектора, а другая будет направлять горячие газы в турбину.

Изготовим 2 пластины того же диаметра что и КС (в моём случае 20,32 см). Просверлите 12 отверстий по периметру для болтов и выровняйте их с отверстиями на конечных кольцах.

На крышке инжектора нужно сделать только 2 отверстия. Одно будет для топливного инжектора, а другое для свечи зажигания. В проекте используется 5 форсунок (одна в центре и 4 вокруг неё). Единственное требование – инжекторы должны располагаться таким образом, чтобы после окончательной сборки они оказались внутри рассеивателя. Для нашей конструкции – это означает, что они должны помещаться в центре 12 см круга в середине торцевой крышки. Просверлим 12 мм отверстия для монтажа форсунок. Сместимся чуть-чуть от центра, чтобы добавить отверстие для свечи зажигания. Отверстие должно быть просверлено для 14 мм х 1,25 мм нити, которая будет соответствовать свече зажигания. Конструкция на картинке будет иметь 2 свечи (одна про запас, если первая выйдет из строя).

Из крышки инжектора торчат трубы. Они изготовлены из труб диаметром 12 мм (внешний) и 9,5 мм (внутренний диаметр). Их обрезают до длины 31 мм, после чего на краях делают скосы. На обеих концах будет 3 мм резьба. Позже они будут свариваться вместе с 12 мм трубками, выступающими с каждой стороны пластины. Подача топлива будет осуществляться с одной стороны а инжекторы будут вкручены с другой.

Для того, чтобы сделать вытяжной колпак, нужно будет вырезать отверстие для «горячих газов». В моем случае, размеры повторяют размеры входного отверстия турбины. Небольшой фланец должен иметь те же размеры, что и открытая турбина, а также, плюс четыре отверстия для болтов, чтобы закрепить его на ней. Торцовый фланец турбины может быть сварен вместе из простого прямоугольного короба, который будет идти между ними.

Переходный изгиб следует сделать из листовой стали. Свариваем детали вместе. Необходимо, чтобы сварные швы шли по наружной поверхности. Это нужно для того, чтобы воздушный поток не имел никаких препятствий и не создавалась турбулентность внутри сварных швов.

Шаг 7: Собираем всё вместе

Начните с закрепления фланца и заглушек (выпускного коллектора) на турбине. Тогда закрепите корпус камеры сгорания и, наконец, крышку инжектора основного корпуса. Если вы всё сделали правильно, то ваша поделка должна быть похожа на вторую картинку ниже.

Важно отметить, что турбинные и компрессорные секции можно вращать относительно друг друга, ослабив зажимы в середине.

Исходя из ориентации частей, нужно будет изготовить трубу, которая соединит выпускное отверстие компрессора с корпусом камеры сгорания. Эта труба должна быть такого же диаметра, как выход компрессора, и в конечном счёте крепиться к нему шлангом соединителем. Другой конец нужно будет соединить заподлицо с камерой сгорания и приварить его на место, как только отверстие было обрезано. Для своей камеры, я использовать кусок согнутой 9 см выхлопной трубы. На рисунке ниже показан способ изготовления трубы, которая предназначена для замедления скорости воздушного потока перед входом в камеру сгорания.

Для нормальной работы нужна значительная степень герметичности, проверьте сварные швы.

Шаг 8: Изготавливаем рассеиватель

Рассеиватель позволяет воздуху входить в центр камеры сгорания, при этом сохранять и удерживать пламя на месте таким образом, чтобы оно выходило в сторону турбины, а не в сторону компрессора.

Отверстия имеют специальные названия и функции (слева направо). Небольшие отверстия в левой части являются основными, средние отверстия являются вторичными, и самые большие на правой стороне являются третичными.

  • Основные отверстия подают воздух, который смешивается с топливом.
  • Вторичные отверстия подают воздух, который завершает процесс сгорания.
  • Третичные отверстия обеспечивают охлаждения газов до того, как они покинут камеру, таким образом, чтобы они не перегревали турбинных лопаток.

Чтобы сделать процесс расчета отверстия легким, ниже представлена , что будет делать работу за вас.

Поскольку наша камера сгорания 25 см в длину, необходимо будет сократить рассеиватель до этой длины. Я хотел бы предложить сделать её почти на 5 мм короче, чтобы учесть расширение металла, во время нагрева. Рассеиватель по-прежнему будет иметь возможность зажиматься внутри конечных колец и «плавать» внутри них.

Шаг 9:

Теперь у вас есть готовый рассеиватель, откройте корпус КС и вставьте его между кольцами, пока он плотно не войдет. Установите крышку инжектора и затяните болты.

Для топливной системы необходимо использовать насос, способный выдавать поток высокого давления (по меньшей мере 75 л/час). Для подачи масла нужно использовать насос способный обеспечить давление в 300 тис. Па с потоком 10 л/час. К счастью, один и тот же тип насоса можно использовать для обеих целей. Мое предложение Shurflo № 8000-643-236.

Представляю схему для топливной системы и системы подачи масла для турбины.

Для надежной работы системы рекомендую использовать систему регулируемого давления с установкой обходного клапана. Благодаря ему поток, который прокачивают насосы всегда будет полным, а любая неиспользованная жидкость будет возвращена в бак. Эта система поможет избежать обратного давления на насос (увеличит срок службы узлов и агрегатов). Система будет работать одинаково хорошо для топливных систем и системы подачи масла. Для масляной системы вам нужно будет установить фильтр и масляный радиатор (оба из них будут установлены в линию после насоса, но перед перепускным клапаном).

Убедитесь, что все трубы, идущие к турбине выполнены из «жесткого материала». Использование гибких резиновых шлангов может закончиться катастрофой.

Ёмкость для топлива может быть любого размера, а масленый бак должен удерживать по меньшей мере 4 л.

В своей масляной системе использовал полностью синтетическое масло Castrol. Оно имеет гораздо более высокую температуру воспламенения, а низкая вязкость поможет турбине в начале вращения. Для снижения температуры масла, необходимо использовать охладители.

Что касается системы зажигания, то подобной информации достаточно в интернете. Как говорится на вкус и цвет товарища нет.

Шаг 10:

Для начала поднимите давление масла до минимума 30 МПа. Наденьте наушники и продуйте воздух через двигатель воздуходувкой. Включите цепи зажигания и медленно подавайте топливо, закрывая игольчатый клапан на топливной системе до тех пор, пока не услышите «поп», когда камера сгорания заработает. Продолжайте увеличивать подачу топлива, и вы начнете слышать рёв своего нового реактивного двигателя.

Спасибо за внимание

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

Каждый сайтостроитель в один прекрасный момент вдруг замечает, что он уже занимается не столько подготовкой новых метериалов для своего сайта, сколько банальными и рутинными вещами: там выковырял меню, заменил; там пересохранил, обновил; тут - copy, там - paste, а потом всё это save и upload. «Ну нет - думает вебмастер - так больше нельзя! Но что же делать?». А делать нужно движок для сайта...

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

Движком принято называть набор скриптов и программ, на основе которых держится, живёт и обновляется сайт. Движок может быть как простым PHP-скриптом и статьями, хранящимися в текстовых файлах определённого формата, так и сложным комплексом программных средств в связке с базами данных (MySQL, Oracle, etc.) и веб-службами, написанными на Java.

Лучшим (но при этом не самым сложным) был бы вариант с применением баз данных. Но чаще всего вебмастерам база данных недоступна, поскольку дают её (насколько мне известно) только на платных хостингах. Поэтому наш первый движок мы организуем при помощи PHP и набора файлов. При этом можно себя утешить тем, что на работоспособность нашего сайта не будут влиять дополнительные факторы риска, вносящиеся использованием баз данных (все, я полагаю, уже слышали о истории с дырой в Microsoft SQL Server 2000) (1).

Наш движок будет специалиально приспособленным под контент-проекты (то есть сайты, которые регулярно пополняются авторскими статьями или другими материалами). А это значит, что нам придётся сделать всё для удобного и быстрого обновления содержания сайта.

Итак, для начала нам надо опредилить пару функций для чтения данных из файла. Перед тем, как приводить исходные коды, рассмотрим имеющиеся у нас (вернее, в PHP) средства для работы с файлами (а те, кто не в курсе - сразу и узнают).

Функции чтения файлов в PHP.

...
$strings = file("myfolder/myfile.txt");
$first_string = $strings;
...

Сделаем такую себе самопальную базу данных. Для неё нам, во-первых, понадобятся такие функции: одна для чтения контента страницы (например, текста статьи) из внешнего файла - загрузка данных; функция для загрузки шаблона из файла - то есть, загрузка оформления (дизайна).

function loadTemplate($path)
/* функция загружает шаблон по указанному пути,
и возвращает его в виде строки, например,
для обработки функцией parceTemplate() */
{
$template = fopen($path, "r") or print("Не удалось загрузить файл шаблона [".$path."]");

If ($template)
return fread($template, filesize($path));
else
return false;

Fclose($template);
}

Function parceTemplate($template, $params_values)
/* функция синтаксически разбирает указанный шаблон,
заменяя названия параметров, служащих индексами
масива $params_values на их значения */
{
while (list($param, $value) = each($params_values))
{
$template = str_replace("¤{".$param."}¤", $value, $template);
}

Return $template;
}

Function readArticle($path)
/* функция читает указанный файл и возвращает
его содержимое в виде массива частей статьи,
разделенных конструкцией ¤{имя части}¤ */
{
$article = fopen($path, "r") or print("Не удалось загрузить файл статьи [".$path."]");

If ($article)
{
$astring = fread($article, filesize($path));
$result = split("[¤]{1}[{]{1}([ a-z_-]*)[}]{1}[¤]{1}", $astring);

$result = eregi_replace("[ ,]*([ - ]{1})[, ]*", " - ", $result);
$result = basename($path);
return $result;
}
else
{
return false;
}
}

Где-то здесь надо было бы прикрутить гранитную плиту с надписью «Регулярным выражениям от благодарных фанатов», поскольку без этой удобной штуки было бы очень сложно создать вышеприведённые функции. Рассмотрим немного подробнее, как эти выражения устроены.

Писать много раз об одном и том же нет смысла, поэтому я процитирую одну из статей о регулярных выражениях (Источник: http://sitemaker.ru/):

Регулярные выражения.

Немного истории.

Математик Стивен Клин впервые представил регулярные выражения в 1956, в результате его работы с рекурсивными наборами в естественном языке. Они были созданы как синтаксические наборы, использовавшиеся для нахождения соотвествий шаблонов в строках, которые позже помогали обращаться к появляющейся технологической информации, облегчая автоматизацию.

С тех пор, регулярные выражения прошли через множество итераций, и текущий стандарт сохраняется ISO (Международной организацией по стандартизации) и определен Open Group, совместным усилием различных технических некоммерческих организаций (2).

Соответствие символов.

Трудность регулярных выражений состоит в том, что Вы хотите искать или чему это должно соответствовать. Без этой концепции, RE бесполезны. Каждое выражение будет содержать некоторую команду о том, что искать:

Соответствие символов в регулярных выражениях
Оператор Описание Пример Результат
. Соответствует любому одному символу .ord Будет соответствовать «ford», «lord», «2ord», и т.д. в файле sample.txt.
Соответствует любому одному символу, заключенному в квадратные скобки ord Будет соответствовать только «cord», «nord» и «gord»
[^] Соответствует любому одному символу, не заключенному в квадратные скобки [^cn]ord Будет соответствовать «lord», «2ord» и т.д., но не «cord» или «nord»
Соответствует любой букве ord Будет соответствовать «aord», «bord», «Aord», «Bord» и т.д.
[^0-9] Соответствует любой нецифре в промежутке 0-9 [^0-9]ord Будет соответствовать «Aord», «aord» и т.д., но не «2ord» и т.д.

Операторы повторения.

Операторы повторения, или квантификаторы, описывают сколько раз нужно искать указанную строку. Они используются вместе с соответствующим символу синтаксисом, чтобы искать многократные вхождения символов. В различных приложениях их поддержка может изменяться или быть неполной, поэтому нужно прочитать документацию к приложению, если вдруг шаблон не работает как ожидалось.

Операторы повторения в регулярных выражениях
Оператор Описание Пример Результат
? Соответствует определенному символу единожды, если тот существует ?erd Будет соответствовать «berd», «herd», и т.д. и «erd»
* Соответствует определенному символу многократно, если тот существует n.*rd Будет соответствовать «nerd», «nrd», «neard» и т.д.
+ Соответствует определенному символу один или более раз [n]+erd Будет соответствовать «nerd», «nnerd» и т.д., но не «erd»
{n} Соответствует определенному символу точно n раз {2}erd Будет соответствовать «cherd», «blerd» и т.д., но не «nerd», «erd», «buzzerd» и т.д.
{n,} Соответствует определенному символу минимум n раз .{2,}erd Будет соответствовать «cherd» и «buzzerd», но не «nerd»
{n,N} Соответствует определенному символу минимум n раз, но не более чем N раз n[e]{1,2}rd Будет соответствовать «nerd» и «neerd»

Якоря описывают где соответствовать шаблону. Они могут быть удобными, когда Вы ищете общие строковые комбинации.

Якоря регулярных выражений
Оператор Описание Пример Результат
^ Соответствует началу строки ereg_replace("^/", "blah") Вставляет «blah» в начало строки
$ Соответствует концу строки ereg_replace("$/", "blah") Вставляет «blah» в конец строки
\< Соответствует началу слова ereg_replace("\<", "blah") Вставляет «blah» в начало слова
\ Соответствует «blahfield» и т.д.
\> Соответствует концу слова ereg_replace("\>", "blah") Вставляет «blah» в конец слова
\>blah Соответствует «soupblah» и т.д.
\b Соответствует началу или концу слова \bblah Соответствует «blahcake» и «countblah»
\B Соответствует середине слова \Bblah Соответствует «sublahper» и т.д.

(конец цитаты, источник описания: http://sitemaker.ru/)

Итак, продолжим. Созданные нами функции пригодятся для чтения статей из файлов и вывода списка самых новых статей. Причем для модификации всего этого нам нужно будет лишь написать новую статью в виде файла с определённым синтаксисом (см. ниже) и добавить её в папку на сервере.

Символы ¤{ и }¤ используется для отделения частей друг от друга. Имя части же никакого значения не имеет и может быть любым набором символов английского алфавита, пробела, подчеркивания или дефиса.

Для вывода списка статей используется цикл, перебирающий все файлы из нужного каталога. Если он натыкается на файл *.art, то сразу на радостях добавляет его в масив. В зависимости от указанного параметра, он может либо добавить имя этого файла, либо название содержащейся в нём статьи, либо сразу готовую ссылку на эту статью.

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

Некоторое время назад мы затрагивали тему создания компьютерных игр и рассказывали об уникальном бесплатном трехмерном движке, написанном на Delphi - GLScene (движок забирайте с нашего CD/DVD ). Тема создания полноценных трехмерных компьютерных игр была вам очень интересна, о чем можно было судить по количеству пришедших писем. Однако тогда мы решили, что рассказывать о программировании под движок - слишком сложно. С тех пор ваш уровень заметно возрос (об этом также можно судить по письмам и по активности на форуме журнала), вы стали более подкованы в вопросах программирования. Особенно после публикации цикла “Кладовая программиста ”.
С этого номера мы начинаем публикацию серии статей, в которых детально рассмотрим различные этапы создания трехмерной игры. Вы повысите свои навыки программирования и, что называется, заглянете за завесу тайны, отделяющую серьезных разработчиков игр от простых смертных.
Движок любой игры складывается из многих и часто независимых частей-кирпичиков: контроль столкновений, физическая модель, игровой интерфейс, главное меню, загрузка уровней и многое другое. Есть специфические кирпичики,
которые нужны только для какого-то одного жанра. Например, модуль погодных явлений важен и нужен в авиационном или морском симуляторе, а в стратегии реального времени он второстепенен или вообще не нужен, а в футбольном симуляторе ни к чему модуль выстрелов. Но несколько десятков кирпичиков присутствуют в любой игре. В серии статей мы расскажем о каждом из таких кирпичиков, покажем, как он реализуется и как его связать с остальными. К концу цикла вы сможете из этих кирпичиков собрать свою собственную компьютерную игру довольно высокого уровня.

Что это вы тут делаете?
Для тех, кто пропустил какие-то из предыдущих моих статей (или даже все), отвечу на возникшие у вас вопросы. Так сказать, небольшое техническое вступление.
Почему Delphi? Эта среда разработки и язык программирования Object Pascal достаточно гибкие, чтобы создать полноценную трехмерную игру практически любого жанра с современным уровнем графики. Многие возразят, что стандартом де-факто разработки компьютерных игр является MSVC++ или другие среды на основе С++ . Но подобные стандарты, как это часто бывает, складываются стихийно. Не будем смешивать два понятия - язык и среда разработки.
C++, безусловно, мощнее, чем Object Pascal. Но он и менее высокоуровневый, то есть в разы сложнее. Для новичков С++ подходит слабо. Object Pascal же не только простой, но и достаточно гибкий, чтобы на нем можно было разработать полноценную компьютерную игру современного уровня. Теперь о средах. Тут так категорично не скажешь. Среда разработки - дело вкуса и привычки каждого конкретного программиста. Поделюсь своим мнением на этот счет. MSVC++ генерирует немного более быстрый код, чем Delphi. Собственно, на этом преимущества заканчиваются (повторюсь, на мой субъективный и ни к чему не обязывающий взгляд). Козыри Delphi - большая скорость компиляции (в десятки и даже сотни раз быстрее, чем MSVC++), высокое качество средств отладки (в большинстве случаев Delphi указывает точно ту строку кода, в которой содержится ошибка, тогда как MSVC++ может указать строчку за несколько страниц от искомой) и удобный интерфейс.
Почему GLScene? Я повидал и перепробовал много бесплатных трехмерных движков, но остановился именно на этом. Его самое главное преимущество - GLScene постоянно совершенствуется. Разработчики не поставили точку и, скорее всего, не поставят ее никогда. Движок постоянно эволюционирует и впитывает в себя все новинки технического прогресса. Это единственный из известных мне бесплатных движков, про который никогда не скажут “устарел”. Несколько сотен постоянно работающих над “двигателем” энтузиастов не допустят этого. Как пример: в движке поддержка самых первых шейдеров появилась уже через несколько месяцев после того, как NVidia выпустила соответствующие инструментальные средства.
Еще одно преимущество: в комплекте с GLScene поставляются его полные исходники. Новичкам этот факт, наверное, вряд ли будет полезен. Хотя познакомиться с исходниками, написанными рукой профессионала, многого стоит. А вот бывалые программисты чувствуют основной смысл этих слов: ведь они смогут перекраивать движок как им
вздумается. Единственное условие в соответствии с лицензией MPL - любые изменения в исходниках должны быть доступны координатору проекта (сейчас координатор - Эрик Гранж ). Вдруг ваш код еще кому-нибудь пригодится?!
Несмотря на то что все примеры кода, которые будут приводиться в этом цикле статей, будут написаны на Delphi с применением GLScene, они будут полезны и тем, кто программирует на других языках и с другими графическими библиотеками. Ведь общие принципы создания графического движка не зависят ни о того, ни от другого. Итак... мы начинаем.

Зачем нужен трехмерный движок?
Товарищи новички, сосредоточьтесь! Возможно, то, что я сейчас скажу, с первого раза будет не очень понятно. Обязательно перечитайте и вникните: это один из основных принципов программирования вообще и разработки сложных систем (а игра - это сложная система) в частности. Представьте себе какую-нибудь проcтенькую игру. Пинг-понг, к примеру. Программист написал его на чистом OpenGL , исходники уместились строк эдак в 200. Что там будет движком, а что основным кодом игры? Так прямо сразу и не скажешь... А если подумать, такое разделение на движок и основной код вообще не нужно.
Теперь представьте, что мы хотим сделать более или менее серьезный 3D-action (десятки тысяч строк кода). И будем мы программировать таким же способом, как если бы мы делали тот самый пинг-понг. И скоро запутаемся! Да, этот код будет быстрым, там не будет ничего лишнего, но... не всякий программист сможет дописать его до конца. А ошибки в таком плотном коде искать - сущий ад. Значит, его надо как-то упорядочить. Проще всего это сделать с помощью выделения уровней абстракции .
Уровень абстракции - это одно из важнейших понятий модульного программирования. Представьте, что вы строитель, и вам нужно построить дом. Вы оперируете кирпичами: берете кирпич, кладете его на строящуюся стену, намазываете раствором, берете следующий кирпич... Кирпичи - ваш уровень абстракции. Теперь представьте, что вы застройщик. И вам нужно построить микрорайон. Вы говорите строителю, где строить дома, какие дома сносить. Дом - это ваш уровень абстракции. Было бы странно, если бы вы указывали строителю, какой кирпич куда класть. Вы сказали: вот здесь будет дом. Все остальные заботы берет на себя строитель. Ну а теперь представьте, что вы мэр города. И вам необходимо дать задание толпе застройщиков к такому-то году дать городу столько-то нового жилья. Вряд ли вы будете лично планировать, где какой дом должен стоять. Это работа застройщика. Уровень абстракции мэра - объем жилого фонда, который можно увеличивать, можно уменьшать, а как это будет выполняться - дело десятое. По большому счету на этом уровне абстракции все равно, из чего строятся дома: хоть из кирпичей, хоть из бивней мамонта. И у мэра в списке команд просто не может быть “положить кирпич ”, хотя любая его команда через несколько уровней абстракции к этому и приведет.
В более или менее сложной компьютерной программе или игре - то же самое. Каждый уровень абстракции отвечает за свою часть работы, опираясь на возможности более низкого уровня. Каждый уровень абстракции обеспечивает более высокому уровню удобный интерфейс для работы с объектами. В компьютерной игре нижний уровень абстракции - это язык программирования (хотя, на самом деле, можно копнуть еще глубже - до железа). Далее идут команды OpenGL API (если мы именно с его помощью программируем). На этом уровне мы можем отдать команду вроде “нарисовать полигон ” и “поменять местами видимую и теневую части видеобуфера ”. Потом - команды GLScene . На этом уровне мы можем дать команды вроде “построить куб ”, “загрузить модель в формате 3ds ” и “наложить на модель такую-то текстуру ”. А вот дальше -игровой движок. И, наконец, игровой код, который может давать игровому движку команды вроде “загрузить уровень ”, “выстрелить таким-то персонажем из такого-то оружия ” и “показать заставочный ролик ”. В идеальном случае каждый уровень абстракции пользуется командами только предыдущего уровня. Не всегда это возможно. Но к этому надо стремиться, так как в таком случае код будет быстрым, удобным и легкочитаемым.

Динамическое создание объектов
Мы рассмотрели вертикальную организацию компьютерной игры. Но каждый уровень абстракции можно разделить на смысловые блоки - модули. Деление это необязательно и всегда будет чисто условным, просто так проще программировать. Сегодня мы разберем маленький, но очень важный модуль-кирпичик - динамическое создание объектов, который присутствует во всех без исключения играх.
Предположим, вы создаете модуль вооружения и хотите запрограммировать очередь из пулемета. Все бы ничего, но откуда вы знаете, сколько игрок может выпустить пуль за всю игру? Через редактор объектов в IDE GLScene можно создавать любые объекты, но только если вы четко знаете, сколько и каких объектов вам нужно. В большинстве случаев это неприемлемо. К примеру, у вас в игре есть 20 уровней, у каждого уровня - свой набор объектов. И что же, создавать перед началом игры все объекты всех уровней? Это долго, да и займет огромное количество памяти. Единственный выход - создавать объекты прямо во время игры, динамически. В GLScene динамическое создание любого объекта состоит из двух стадий - создания экземпляра класса этого объекта и присвоения ему необходимых свойств. Возьмем уже упоминавшийся пример с очередями у пулемета и динамически создадим пулю. Предположим, пуля у нас будет промто-сферой. За сферы в GLScene отвечает класс TGLSphere . Казалось бы, можно написать так:
Sphere:=TGLSphere.Create
Однако команда работать не будет, так как каждому объекту в GLScene надо зарегистрироваться в очереди объектов. Кроме того, объект нельзя создать в “пустоте”, он должен быть привязан к какому-то объекту более высокого уровня. Корневой объект самого высокого уровня - glscene1.Objects (если объект компонента TGLScene у вас называется glscene1). Правильный вариант:
Sphere:=TGLSphere (glscene1.Objects.AddNewChild(TGLSphere))
Разберем эту строчку по частям. У корневого объекта glscene1.Objects мы вызываем метод AddNewChild , который добавляет в корень объект класса, указанный в параметре (в данном случае это сфера -
TGLSphere ). Так тоже можно: в параметры процедурам передавать не объекты, а целые классы. Зачем перед присвоением нужно преобразование типа к TGLSphere ? Дело в том, что метод AddNewChild , что бы вы ему в параметр ни передали, возвращает объект класса TGLBaseSceneObject . Нас это не устраивает, поэтому мы и преобразуем тип к TGLSphere. Получившийся объект присваивается переменной Sphere. Теперь с помощью этой переменной мы можем нашей пуле задать разные параметры, например положение в пространстве:
Sphere.Position.X:=
Sphere.Position.Y:=
Sphere.Position.Z:=
Или цвет:
Sphere.Material.FrontProperties.Diffuse=
Динамическое создание моделей мы разобрали, а теперь поговорим о динамическом их уничтожении. В самом деле, пуля когда-нибудь попадает в стену, человека или же улетает в голубую даль. С этого момента она больше не нужна. Если мы так и оставим ее, она будет занимать какую-то область памяти. Учитывая, сколько выстрелов делает среднестатистический кемпер, пока его нычку не обнаружат, нам всей памяти компьютера не хватит, чтобы хранить такое количество пуль. Поэтому любые объекты игры, которые стали ненужными, надо немедленно уничтожать. Единственный правильный способ сделать это - вызвать метод Free , например:
Sphere.Free
Частенько бывает необходимо проверить, существует ли объект, или его уже уничтожили. Для этого сравниваем объект с универсальной константой нуля - nil , например:
If Sphere<>nil then
Begin
{сферу еще не уничтожили,
значит, делаем здесь что-нибудь полезное}
End
Или же вызываем функцию Assigned , которая делает то же самое. И вот тут вас подстерегает один гигантский подводный камень, на который рано или поздно наталкивались все программисты. Если вы освободили объект методом Free , это не гарантирует, что переменная объекта стала равно nil ! То есть при определенном стечении обстоятельств в примере выше, даже если сфера уничтожена, условие будет выполняться. Если вы в условии после проверки обращаетесь с этой сфере (а так почти всегда и бывает), произойдет критическая ошибка, что чревато вылетом игры в синие форточки. Чтобы гарантировать, что освобожденный объект станет равным nil, используйте специальную процедуру FreeAndNil , например:
FreeAndNil(Sphere)
Теперь вы можете быть уверенными в том, что никогда не обратитесь к уже несуществующему объекту. Описанную процедуру создания и уничтожения объектов можно применять к любым объектам GLScene.

Зачем играм аккумулятор?
Рассмотрим пример выше с пулеметом. Обычно в играх пули - это не просто сферы, а сложные объекты, у которых к тому же еще и текстура имеется. Каждый раз, когда вы создаете пулю, освобождается участок памяти, устанавливаются свойства этой пули, загружается модель пули, загружается текстура (с винчестера!). Все это занимает определенное время. Если число пуль, которые изрыгает пулемет в секунду, очень велико, могут начаться дикие тормоза, особенно на слабых компьютерах. С уничтожением пуль такая же проблема: надо выгрузить объект, освободить память... То же самое относится не только к пулям, но и к любым объектам, которые часто появляются и исчезают, например к каплям дождя, искрам от электропроводки... Подобная расточительность системных ресурсов в компьютерных играх неприемлема. Вы же не хотите, чтобы вашу игру можно было запустить только на суперкрутой графической станции?
Выход простой. Прикидываем, сколько в среднем объектов подобного рода может существовать одновременно. Допустим, пулемет может выбросить несколько сотен пуль за десяток секунд, и за этот же десяток секунд пули обязательно долетят до цели. Перед началом игры создаем все сто пуль. Лучше всего это делать во время загрузки уровня. Небольшой задержки никто не заметит. Далее пули помещаются в список или массив, который называем аккумулятором . Делаем пули невидимыми или выносим их куда-нибудь за пределы игрового пространства. Как только пулемет начал стрелять, вместо того чтобы создавать пули, мы перемещаем в нужное место уже созданные пули из аккумулятора и делаем их видимыми. Как только пуля достигнет цели, мы не уничтожаем ее, а вновь делаем невидимой и помещаем в аккумулятор. В итоге для каждой пули мы экономим время создания и время уничтожения. А это очень и очень много! А что если мы немного ошиблись в своих прикидках, пули в аккумуляторе кончились, а пулемет продолжает стрелять? Тут уж ничего не поделаешь - придется новые пули создавать динамически, пока в аккумулятор не вернутся старые. И новые пули тоже не будем уничтожать, а запасем в аккумуляторе - вдруг еще понадобятся...

Атака клонов
Пусть у нас есть большой лес, в котором много-много одинаковых деревьев или, скажем, много деревьев нескольких разных видов. Пример похож на предыдущий, только мы тут ничего динамически не создаем и не уничтожаем - на этом уровне деревья есть всегда. Проблема будет при загрузке уровня. Создание стольких деревьев займет огромное время. Но ведь они все одинаковые! То есть мы раз за разом загружаем с винчестера и создаем в памяти копии одного и того же. Загрузили. Играем. Перед рендером каждого из деревьев выполняются подготовительные процедуры. Для каждого дерева они будут одними и теми же, но вызывать мы их будем опять большое число раз, по числу деревьев! Расточительно получается. И память под каждое дерево резервировать надо, и обработка каждого из них время занимает.
Вот бы загрузить одно-единственное дерево, а когда надо будет вывести на экран остальные деревья, просто показать графической библиотеке, откуда брать необходимые данные. Это ж какая экономия ресурсов получится, какой пророст FPS! Такие “ложные” деревья (и не только деревья - что угодно), о которых в памяти хранится только частная информация (положение в пространстве, углы поворота), а одинаковая информация хранится только один раз, называются прокси-объектами .
В GLScene для создания прокси-объектов существует специальный класс - TGLProxyObject . Пользоваться им очень просто. Сначала создаем объект-источник, то есть единственное дерево, например так:
Tree:=TGLFreeFrom(glscene1.objects.AddNewChild(TGLFreeFrom));
//Загружаем
его модель:
Tree.LoadFromFile(‘Tree.3ds’);
//Загружаем его текстуру:
Tree.Material.Texture.Disabled:=false;
Tree.Material.Texture.Image,LoadFromFile(‘tree.jpg’);
//А теперь создадим десять деревьев-клонов в случайных местах:
for i:=1 to 10 do begin
//Создаем очередной прокси-объект
proxy:=TGLProxyObject(glscene1.objects.AddNewChild(TGLProxyObject));
with proxy do begin
//В свойство MasterObject записываем наше дерево-образец
MasterObject:=Tree;
//Показываем, что наследоваться должна только структура объекта
ProxyOptions:=;
//Ориентацию дерева в пространстве надо оставить неизменной
Direction:= Tree.Direction;
Up:= Tree.Up;
//А вот положение задаем случайное
Position.X:=Random(100);
Position.Y:=Random(100);
//И повернем дерево на случайный угол, чтобы лучше смотрелось
RollAngle:=Random(360);
end;
end;
Теперь у нас есть десяток деревьев по цене одного. Обратите внимание, что если мы как-нибудь изменим объект-оригинал, это изменение мгновенно отразится на всех объектах-клонах.

* * *
Мы рассказали о первом кирпичике. В следующих статьях мы подарим вам целый грузовик таких кирпичей, из которых вы сможете построить трехмерный игровой движок своей мечты. Ну а чтобы вам было проще, на компакт мы выкладываем последнюю протестированную версию GLScene .