Castle game engine. Управление трехмерными моделями. Размер - Castle Game Engine - Программирование - Каталог статей - Учись! Slider en CSS3 et JS

^
Категории раздела
Реклама
Статистика
Яндекс.Метрика


Онлайн всего: 39
Гостей: 39
Пользователей: 0

копирайт
Copyright Игорь Ret-Ar Матыцин © 2017
 
поделиться
Мы Вконтакте
Google+
реклама
Свидетельство
Вход на сайт
Популярное
[14.10.2015][ОГЭ]
Площадь четырёхугольника можно вычислить по формуле s=d1*d2*sin a/2 , где d1 и d2 — длины диагоналей четырехугольника, а —угол между диа (0)
[21.12.2014][ЕГЭ (П)]
Диагональ правильной четырёхугольной призмы наклонена к плоскости основания под углом 30°. Боковое ребро равно 3. Найдите диагональ призмы. (0)
[21.12.2014][ЕГЭ (П)]
В случайном эксперименте симметричную монету бросают триж¬ды. Найдите вероятность того, что решка выпадет все три раза (0)
[15.04.2015][ЕГЭ (П)]
В прямоугольном параллелепипеде ABCDA1B1C1D1 известны длины рёбер: АВ = 3, AD = 4, АА1 = 32. Найдите площадь сечения, про¬ходящего через вер (0)
[21.12.2014][ЕГЭ (П)]
Корень(9 - 4*корень(5)) - корень(5) или √9-4√5-√5 (0)
[21.12.2014][ЕГЭ (П)]
В кубе ABCDA1B1C1D1 точки Е, F, Е1 и F1 являются серединами рёбер ВС, DC, B1C1 и D1C1 соответственно. Объём призмы, отсекаемой от куба плоск (0)
[15.04.2015][ЕГЭ (П)]
13. Первый сплав содержит 5% меди, второй — 11% меди. Масса второго сплава больше массы первого на 4 кг. Из этих двух спла¬вов получили трет (0)
[14.10.2015][ОГЭ]
После уценки телевизора его новая цена составила 0,57 старой. На сколько процентов уменьшилась цена телевизора в результате уценки? (0)
[14.10.2015][ОГЭ]
10. Отрезки АС и BD — диаметры окружности с центром О. Угол АСВ равен 78° . Найдите угол AOD. Ответ дайте в градусах (0)
[01.11.2015][ОГЭ]
Два катета прямоугольного треугольника равны 17 и 4. Найдите его площадь (2)
ГДЗ
Главная » Статьи » Программирование » 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)
Просмотров: 1764 | Рейтинг: 0.0/0