Стая 3D, Delphi, FM платформа за приложения - Блогове на общността - Общността на Embarcadero
Не съм взимал от известно време.
Какво се очаква от вас
Нещо толкова леко и нежно, като десерт с бифидус.
Прегледайте този видеоклип, сега имате правилната мотивация. Между другото, учителят измисли този проблем по следния начин. Той те погледна, помисли какво да попита. После погледна към стената. До тавана. Към друга стена. Еврика! (извика той, тичайки мислено из стаята на персонала, не съвсем облечен). Направи ми 3D стая, приятелю. Тази задача има важно (важно!) научно и практическо значение. Ти, мила моя, ще си тръгнеш (плачейки) с тази задача за един семестър и няма да откъснеш учителя от истинската наука. Съгласете се, това ще бъде вашият доста осезаем принос.
Бяга да направи
1. Стартира Delphi XE5, направи нов проект "Fire Monkey Desktop Application". Смесвайки HD (2D) и 3D по-късно, нека първо направим просто HD приложение.
2. Записваме проекта в специално създадена папка.
3. Поставете Panel и TViewPort3D на "обикновената" форма. Последният компонент ще ни служи като "прозорец към пространствения свят" на плоската стена на HD формата.
4. Впоследствие можете да поставите контроли на панела, които осигуряват функционалността на приложението като цяло. Бутони, копчета и още копчета са най-добрите приятели на ученици и учители!
5. Оставям плоския панел на въображението за вас и вашия ръководител.
6. Нека направим Viewport3D1 да изглежда като стая. Постигнете съответствие - превъртете през „целевия слайд“ в ума си (това вече са изчезнали духовни практики). Нека не ги пренебрегваме!

7. Да започнем с компонентите на TDummy. Dummy си е манекен, той е "родител" за други вече "телесни" FM 3D компоненти.
8. Ще имаме „един основенDummy_room : TDummy", така че по-късно да ви е удобно да завъртите цялата сцена както по време на проектиране, така и по време на изпълнение. Вертикалната ос върви надолу, така че трябва да завъртите "около оста Y" - свойството RotationAngle.Y.
9. Ще украсим стените с TPath3D компоненти. Това е плоска пространствена фигура. Не се занимавам с теория - просто добавете отделен TDummy за всяка стена и след това сложете TPath3D "под него".

11. Внимание! Вдясно е показана само деформирана фигура с изкривени пропорции. Ще го оправим по-късно! Тук просто трябва да разберем, че линията е затворена.
12. Въпрос, как да "завъртя дупка" във форма SVG? Много просто. Просто опишете "дупка". Това е дясната страна с прозорци.

Братко, ако не си наваксал защо, значи вече сме постигнали успех! Прехвърлете се бързо в друга специалност. Програмирането е доста скучно, ако мозъкът не скача автоматично като бесен шпаньол след хвърлени по него пръчки, гумени играчки, топки за тенис, гнили ябълки и т.н. Мисля, че схващате идеята. Ще коригираме пропорциите!
13. И така, всяка "стена" е TDummy - празна за офсетно въртене и TPath3D под нея, което дефинира "стената". Повярвайте ми, за движение и манипулация е по-удобно да измъчвате безплътен TDummy, докато TPath3D е необходим за "чисто" изкуство. По-лесно е да мислим, ако разделим „позиционирането“ и „формата“ на класове компоненти, които са функционално отговорни за различни аспекти на поведението на модела на компонента.
14. Още веднъж: разделихме „позициониране“ и „оформяне“ на класове компоненти, които са функционално отговорни за различни аспекти на поведението на модела на компонента, за да опростим работата по време на проектиране. Научете и дайте на учителя. Нека се радва за способността ви да говорите красиво.
15. Започнете смалък - TDummy за цялата стая, TDummy за една от стените, TPath3D всъщност за стената. След това вече "завъртете" и "преместете" стената поради нейната Dummy_xxx_wall. Dummy_room оставете, за да завъртите цялата сцена.
16. Отделно за TPath3D. Има доста изтъркано свойство WrapMode, което трябва да бъде зададено на "wrOriginal", за да запази пропорциите. Тогава свойствата на TPath3D на типа Width, Height вече няма да са необходими. Пропорциите ще бъдат такива, каквито зададете "кривата".
17. Добавете TLightMaterialSource, плъзнете го към TViewPort3D в структурата. След това това ще помогне при копиране на компоненти (ако е необходимо) заедно с главния "прозорец за изглед".
18. Чувствайте се свободни да зададете свойствата на TPath3D, както е показано по-долу:

ZWrite -> невярно; Непрозрачност-> 0,5; TwoSides ->Истина. Накратко, ако нещо се обърка, проверете свойствата. Засадата може да бъде само тук.
19. След като направите всички стени, завъртете TFloatAnimation към главния TDummy на сцената. Сами ще разберете свойствата, английският ще ви помогне.
20. Долна решетка - TGrid3D. Височина ->10; Ширина->10; Марки-> 1. Това е просто. Тя не се нуждае от TDummy, проверете нейния RotationAngle.X -> 90. Достатъчно. След това преместете надолу с 1,5, като използвате свойството Position.Y.
21. Лошата новина е, че мащабът на координатите в FM и в svg е някак си различен. Така че в бъдеще, когато автоматично генерирате модела, "всички ъгли се сближиха", трябва да намерите коефициента на съответствие между координатите в описанието на пътя във формат svg и координатите в Position.X (например). Но това ще ви е домашното.
22. Забравил за светлината. По подразбиране той има "модел на успоредни лъчи", независимо къде се намира във формата. Неговите RotationAngle.X, RotationAngle.Y, RotationAngle.Z са важни.
23. Ако добавите нов проект към ProjectGroup – „мобиленприложение", тогава можете да направите страхотно пренасяне към Android (iOS). Копирайте всички компоненти в „мобилната" форма, след което ще получите всичко автоматично.

24. Е, ако "предците" са ви донесли "iPhone", тогава тук можете да се отлепите. От същия изходен код, можете ли да познаете?

25. Успех! Надявам се това да ви помогне да изпълните задачата навреме. Ще се наградите (за знания по програмиране, 3D моделиране и решаване на важен научен проблем с награда) с таблет, ако нямате такъв. Можете да пишете под него по същия начин, както под Windows в Delphi XE5. Ако това е въпрос по темата „как да изтръгнем родителите“, тогава кажете - „Увлякох се с програмирането“ и „Обещавам, че ще покажа работата си върху Nexus 7“. Наистина ми върви, и ти ще го получиш.
Няколко отговора на "глупави" въпроси за "защита":
- Защо избрахте Delphi? - Налични 3D компоненти. Мога лесно да създавам 3D модели на реални обекти по време на проектиране и изпълнение.
- Защо избрахте Delphi (отново)? - Мултиплатформена разработка, базирана на един код за Windows, Mac OS, iOS и Android.
- Защо избра Delphi (да гледаш в очите)? - Бърза среда за разработка на RAD. Спестяваме време за рутинни операции (визуална разработка), повече време/ресурси за приложената част.
- Къде можете да кандидатствате? - Навсякъде: строителство, медицина, образование, инженерни системи, икономика и др.
- Каква оценка искате? - Работата е завършена в срок и изцяло. Студентът доказа своите знания, умения и способности за създаване на работещи приложения в рамките на задачата за моделиране на геометрията на обекти в 3D с визуализация на сцени. Работата заслужава оценка „отлична“.