Главная » 2011 » Январь » 27 » Наш собственный "Утяжелённый грузовой куб Aperture Science"
20:04
Наш собственный "Утяжелённый грузовой куб Aperture Science"

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

№1


Поместим на форму два объекта: GLScene и GLSceneViewer.

GLScene – инспектор объектов нашей сцены.
GLSceneViewer – окно в котором отображается наша сцена.

Если хотите, то можете поменять цвет GlSceneViewer1 в его свойствах поставив Buffer.BackgroundColor=clWhite

Двойным щелчком левой кнопки мыши на GLScene1 входим в инспектор объектов и создадим простой объект Cube (Scene objects => Add object => Basic geometry => Cube ).


Далее создадим камеру (Cameras => Add camera) и источник света (Scene objects => Add object => LightSource).


Теперь в GLSceneViewer1 в разделе Camera выбираем GLCamera1.


Займёмся настройкой камеры: Выбрав GLCamera1 в Object Inspector’е находим раздел TargetObject и выбираем Cube1.
А теперь поменяем координаты камеры (т.к. всем объектам в момент
создания задаются одинаковые координаты и наша камера просто не увидит
кубик) в разделе Position устанавливаем x = 1, y = 1 , x = 1 (писать
без знака равно естественно). Установим такие же координаты и источнику
света GLLightSource1.


Теперь немного программного кода (на события OnMouseDown и OnMouseMove у GlSceneViewer1):


procedure TForm1.GLSceneViewer1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

begin

     mx:=x; my:=y; //Запомнить координаты мыши

end;



procedure TForm1.GLSceneViewer1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);

begin

     if Shift<>[] then begin //Если нажата клавиша

          GLCamera1.MoveAroundTarget(my-y, mx-x); //Перемещаем камеру вокруг целевого объекта

          GLLightSource1.Position:=GLCamera1.Position; //Пусть источник освещения будет рядом с камерой

          mx:=x; my:=y;

     end;

end

И в разделе public не забудьте объявить переменные mx и my:


Код на языке Delphi
Public

   mx, my : Integer

Должно получиться что-то вроде этого:




Теперь с помощью мышки мы можем вращать камеру вокруг куба.


4. Текстуры


Во-первых можно изменять цвет объекта без использования текстур.

В Object Inspector’е выбрав раздел Material нажимаем на троеточие:






В появившемся окне Material Editor можно менять цвет объекта. При
запуске приложения будет заметно что световые эффекты остались, но при
использовании текстуры световых эффектов не будет видно (затемнение и
т.д.). Чтобы они стали видны TextureMode надо указать в tmModulate.


Чтобы наложить текстуру на объект необходимо в Material Editor’е выбрать раздел Texture:




Нажав на троеточие указать путь к текстуре (ВНИМАНИЕ!!! Текстура
должна быть формата *.BMP иначе при использовании других форматов
текстура не будет отображаться. Чтобы использовать текстуры других
форматов, необходимо подключить соответствующие модули в раздел USES.
Например JPEG, для *.jpg).




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


5. Примитивное движение - вращение


Для движения нам понадобится GLCadencer (поместите на форму).


Поставьте GLCadencer1.Scene=GLScene1




Теперь от вас необходимо только писать:


Cube1.Turn(deltaTime*X) – Вращение объекта (в нашем случае куба), где X скорость вращения.


Cube1.Roll(deltaTime*X) – Вращение(качение) объекта, трудно объяснить словами лучше один раз увидеть.



procedure TForm1.GLCadencer1Progress(Sender: TObject; const deltaTime, newTime: Double);

begin

  Cube1.Turn(deltaTime*10);

end;

или



procedure TForm1.GLCadencer1Progress(Sender: TObject; const deltaTime, newTime: Double);

begin

  Cube1.Roll(deltaTime*10);

end;

№2

А теперь способ который предпочтительнее применять. Смысл способа, создание куба  в run time.
Code
<br>//В uses нужно добавить если нет GLObjects<br>
<br>var<br>Cube1:TGLCube;<br>
<br>begin<br>
<br>  Cube1:=TGLCube.CreateAsChild(GLScene1.Objects);
<br>//Мы создали наш куб дочерним объектом в сцене
<br>//Далее можно делать с ним всё что угодно<br>
  Cube1.Position.X:=1;
<br>  Cube1.Position.Y:=1;
<br>  Cube1.Position.Z:=0;
<br>  Cube1.Material.Texture.Image.LoadFromFile('\texture.bmp');
         Cube1.Material.Texture.Image.Disabled:=false;
<br>//Вообще по уму нужно использовать библиотеку материалов, но для куба хватит прямого доступа к текстуре)<br>  GLCamera1.TargetObject:=Cube1;
<br>//Ну конечно нужно в таргет указать наш кубик.<br>

В общем то и все , как вы видите работа в ран тайме проста, позже я покажу более правильный способ создания объектов.
Категория: Статьи | Просмотров: 1175 | Добавил: De:Light | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Вы вошли как: Гость
07:37
Вы вошли как: Гость
Календарь
«  Январь 2011  »
ПнВтСрЧтПтСбВс
     12
3456789
10111213141516
17181920212223
24252627282930
31
Категории
Новости [11]
Статьи [23]
GLscene,Web Design,IT,etc...
Счетчик

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