Castle game engine. Управление трехмерными моделями. Размер - Castle Game Engine - Программирование - Каталог статей - Учись!
Главная Регистрация Вход RSS
Приветствую Вас, Гость
Категории раздела
Случайное решение
[25.01.2016][ЕГЭ (П)]
Найдите корень уравнения 5^(4-х) = 25 (0)
[11.02.2016][ОГЭ]
Последовательность (ап) задана формулой а =74/(n+1). Сколько этой последовательности больше 2? (0)
[05.04.2015][ЕГЭ (П)]
Поезд Екатеринбург—Москва отправляется в 7:23, а прибывает в 9:23 на следующий день (время московское). Сколько часов поезд находится в пути (0)
[13.10.2015][ЕГЭ (П)]
На рисунке изображён график дифференцируемой функции у = f (x) и отмечены семь точек на оси абсцисс: х1, х2, х3, х4, х5, х6, х7. (0)
[10.04.2014][ОГЭ]
Тройка чисел x, y и z удовлетворяют неравенству x-y>z. Какому из следующих неравенств не удовлетворяет эта тройка чисел. (0)
[11.02.2016][ОГЭ]
Расстояние от Юпитера до Солнца равно 778,1 млн км. В каком случае записана эта же величина? (0)
[01.11.2015][ОГЭ]
Арифметическая прогрессия задана условиями: а1= -5, а(n + 1) = аn + 12. Найдите сумму первых 9 её членов. (0)
[24.09.2015][ОГЭ]
Какое из следующих утверждений верно? 1)Центр описанной около треугольника окружности всегда лежит внутри этого треугольника. (0)
Статистика
Яндекс.Метрика
Поделиться
Реклама
Вход на сайт
Популярное
[14.10.2015][ОГЭ]
Площадь четырёхугольника можно вычислить по формуле s=d1*d2*sin a/2 , где d1 и d2 — длины диагоналей четырехугольника, а —угол между диа (0)
[21.12.2014][ЕГЭ (П)]
Диагональ правильной четырёхугольной призмы наклонена к плоскости основания под углом 30°. Боковое ребро равно 3. Найдите диагональ призмы. (0)
[15.04.2015][ЕГЭ (П)]
В прямоугольном параллелепипеде ABCDA1B1C1D1 известны длины рёбер: АВ = 3, AD = 4, АА1 = 32. Найдите площадь сечения, про¬ходящего через вер (0)
[21.12.2014][ЕГЭ (П)]
В случайном эксперименте симметричную монету бросают триж¬ды. Найдите вероятность того, что решка выпадет все три раза (0)
[11.03.2016][ОГЭ]
Найдите площадь квадрата, описанного около окружности радиуса 9. (0)
[21.12.2014][ЕГЭ (П)]
Корень(9 - 4*корень(5)) - корень(5) или √9-4√5-√5 (0)
[14.10.2015][ОГЭ]
После уценки телевизора его новая цена составила 0,57 старой. На сколько процентов уменьшилась цена телевизора в результате уценки? (0)
[15.04.2015][ЕГЭ (П)]
13. Первый сплав содержит 5% меди, второй — 11% меди. Масса второго сплава больше массы первого на 4 кг. Из этих двух спла¬вов получили трет (0)
[14.10.2015][ОГЭ]
12. На клетчатой бумаге с размером клетки 1x1 изображён параллелограмм. Найдите его пло¬щадь (0)
[14.10.2015][ОГЭ]
10. Отрезки АС и BD — диаметры окружности с центром О. Угол АСВ равен 78° . Найдите угол AOD. Ответ дайте в градусах (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)
Просмотров: 1941 | Рейтинг: 0.0/0