Сайт начал процедуру переезда на новый хостинг

Новый сайт
LOGO
Главная Регистрация Вход RSS
Приветствую Вас, Гость
Категории раздела
Случайное решение
[15.05.2015][ЕГЭ (П)]
На диаграмме показан средний балл участников 10 стран в тестиро¬вании учащихся 8-го класса по естествознанию в 2007 году (по 1000- балльной (0)
[14.10.2015][ОГЭ]
12. На клетчатой бумаге с размером клетки 1x1 изображён параллелограмм. Найдите его пло¬щадь (0)
[19.09.2015][ЕГЭ (П)]
Стороны основания правильной шестиугольной пирамиды равны 10, боковые рёбра равны 13. Найдите площадь боковой поверхности этой пирамиды. (0)
[05.04.2015][ЕГЭ (П)]
Диаметр основания конуса равен 14, а дли¬на образующей — 25. Найдите площадь осевого сечения этого конуса (0)
[14.10.2015][ОГЭ]
Флагшток удерживается в вертикальном положении при помощи троса. Расстояние от основания флагштока до места крепления троса на земле равно 3 (0)
[17.08.2013][Pascal, Delphi, Lazarus]
Lazarus. Составной оператор. (0)
[29.01.2016][ОГЭ]
Решите уравнение 5x^2+8x+3=0 (0)
[24.09.2015][ОГЭ]
Высота АН ромба ABCD делит сторону CD на отрезки DH — 8 и СН = 2. Найдите высоту ромба (0)
Статистика
Яндекс.Метрика
Поделиться
Реклама
Вход на сайт
Популярное
[14.10.2015][ОГЭ]
Площадь четырёхугольника можно вычислить по формуле s=d1*d2*sin a/2 , где d1 и d2 — длины диагоналей четырехугольника, а —угол между диа (0)
[11.03.2016][ОГЭ]
Найдите площадь квадрата, описанного около окружности радиуса 9. (0)
[21.12.2014][ЕГЭ (П)]
Диагональ правильной четырёхугольной призмы наклонена к плоскости основания под углом 30°. Боковое ребро равно 3. Найдите диагональ призмы. (0)
[15.04.2015][ЕГЭ (П)]
В прямоугольном параллелепипеде ABCDA1B1C1D1 известны длины рёбер: АВ = 3, AD = 4, АА1 = 32. Найдите площадь сечения, про¬ходящего через вер (0)
[14.10.2015][ОГЭ]
12. На клетчатой бумаге с размером клетки 1x1 изображён параллелограмм. Найдите его пло¬щадь (0)
[21.12.2014][ЕГЭ (П)]
Корень(9 - 4*корень(5)) - корень(5) или √9-4√5-√5 (0)
[11.02.2016][ОГЭ]
На клетчатой бумаге с размером клетки 1x1 изображена трапеция. Найдите длину её средней линии. (0)
[29.01.2016][ОГЭ]
Биссектриса равностороннего треугольника равна 9Корень(3) . Найдите его сторону. (0)
[21.12.2014][ЕГЭ (П)]
В случайном эксперименте симметричную монету бросают триж¬ды. Найдите вероятность того, что решка выпадет все три раза (0)
[14.10.2015][ОГЭ]
После уценки телевизора его новая цена составила 0,57 старой. На сколько процентов уменьшилась цена телевизора в результате уценки? (0)
Свидетельство
Главная » Статьи » Программирование » Castle Game Engine

Castle game engine. Управление трехмерными моделями. Размер

Для различных демонстраций необходимо менять размеры и положения трехмерных объектов непосредственно при показе модели. Но это делать трудно, так как необходимо перестраивать модель во время работы. VRML модель  это просто текстовый  файл оформленный несложным способом. Поэтому если изменять этот файл то и модель изменится.

Мы попробуем это сделать на примере примитивов VRML.  И начнем с куба.

В VRML куб описывается таким кодом:

    Cube {

               width    2

                height   2

                depth     1

         }

Изменяя эти параметры можно легко изменить, если эти параметры хранить в переменных.

У нашей программы создадим вот такой дизайн:

Соответственно на форме должны быть вот эти объекты:

    CastleControl1: TCastleControl;; // сюда загружаем модель

    Memo1: TMemo; // сюда записываем новый код модели

    TrackBar1: TTrackBar; // ползунок для изменения параметра  width   

    TrackBar2: TTrackBar;  // ползунок для изменения параметра  height

    TrackBar3: TTrackBar;   // ползунок для изменения параметра    depth    

Так как модель должна изменяются динамически, то работать будем в событии On Change объектов  TrackBar.

Первое что нужно сделать это записать код модели в memo.  Будем использовать код

memo1.Append('             ');

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

 

memo1.Append('#VRML V1.0 ascii');

    memo1.Append('Cube {');

    memo1.Append('width '+Inttostr(trackBar1.Position));

    memo1.Append('height '+Inttostr(trackBar2.Position));

    memo1.Append('depth '+Inttostr(trackBar3.Position));

    memo1.Append('}');

 

Inttostr(trackBar1.Position) – в этот код позволяет целочисленное значение положения TrackBar, перевести в текст и добавить к коду модели.

Когда код собран, его необходимо записать в файл. Будем так же использовать функции memo:

memo1.Lines.SaveToFile('exp.wrl');

А теперь осталось только открыть эту модель:

  CastleControl1.Load('exp.wrl');

    CastleControl1.MainScene.Spatial := [ssRendering, ssDynamicCollisions];

    CastleControl1.MainScene.ProcessEvents := true;

И в конце необходимо очистить Memo, иначе у нас получится много кубиков.

Для того чтобы экономить код, не будем создавать On Change для каждого  TrackBar, а создадим только для первого. Затем для второго и третьего TrackBar в окне инспектора событий на вкладке события в поле On Change выбираем TrackBar1Change

И осталось только спрятать memo, в событии On Create для формы набираем:

memo1.Hide; 

Теперь  можно запускать проект!))) (Не забудьте сохранить проект куда-нибудь)

Категория: Castle Game Engine | Добавил: Ret-Ar (11.10.2013)
Просмотров: 2262 | Рейтинг: 0.0/0