За трансформацията на координати на 3D модели
вещество
Преди всичко
Често може да виждате 3D изображения на телевизионни екрани и дисплеи в игри, но как да покажете обекти, които съществуват в 3D пространството, като герои и сгради, които се движат по екрана, на 2D екран?
В 2D игрите има само двуизмерни елементи на "X и Y" като координатни стойности, а дисплеят също е 2D, така че ако нарисувате обект, като посочите координатната позиция на X и Y, интуитивно ще разберете как ще бъде нарисуван на коя позиция.
В 3D обаче не е толкова лесно. Както подсказва името, 3D е "3 измерения" и има три координатни информации: "X, Y и Z". Тъй като координатите са различни от дисплея, който е 2D, не е възможно да се нарисува обектът такъв, какъвто е.
След това това, което трябва да направите, е да "преобразувате триизмерната информация в двуизмерна". Това обикновено се нарича "трансформация на координати". Имайте предвид, че тази трансформация на координати е от съществено значение за 3D програмирането.
Има няколко вида координатни трансформации за преобразуване на 3D в 2D, но има три основни типа координатни трансформации, с които програмистите се занимават: "трансформация на света", "трансформация на изглед" и "трансформация на проекция". Тук ще обясним всичко, свързано с трансформацията на координати.
Координатни системи за лява и дясна ръка
В 3D има две координатни системи, "лява координатна система" и "дясна координатна система", които имат различни ориентации за всяка координата, както е показано на фигурата по-долу.
Direct3D използва предимно координатна система за лява ръка, но има и функции за изчисляване за координатни системи за дясна ръка. XNA обаче предоставя методи за изчисление само за координатни системи за дясна ръка. Това изглежда е в съответствие с факта, че други приложения често използват координатни системи за дясна ръка.
Всички съвети на XNA на този сайт използват координатната система за дясна ръка.
Локална координатна система (моделна координатна система)
Всеки модел има координатна система, центрирана върху началото. Когато създавате модел със софтуер за моделиране, мисля, че е по-лесно да се разбере, ако си представите създаването му с произхода като център.
Световна координатна система
Световната координатна система ви позволява да поставите модела навсякъде. Ако не правите нищо в тази трансформация на света, моделът ще бъде поставен в началото по същия начин като локалните координати. Разположението е не само да се движите от началото, но и да се въртите и мащабирате.
Преглед на координатната система
След като поставите модела в световни координати, имате нужда от информация за това къде гледате и къде гледате 3D пространството. Това наричаме "трансформации на изгледи". Трансформациите на изглед обикновено често се представят като камери.
Параметрите, необходими за това преобразуване, са "позиция на камерата", "точка на интерес на камерата" и "посока на камерата нагоре". Ориентацията на камерата се определя от тези три параметъра. Фигурата по-долу показва камерата от гледна точка на трета страна.
Фигурата по-долу всъщност се вижда от гледна точка на камерата с подредбата, показана на фигурата по-горе (на този етап все още не сме преобразували координатите в екрана, така че това е само изображение).
В предишното обяснение изглежда, че камерата е позиционирана и координатите се трансформират, но при действителното изчисление световните координати се преобразуват според позицията и ориентацията на камерата. Следователно произходът е позицията на камерата, както е показано на фигурата по-долу.
Проективна координатна система
След като сте решили от коя позиция да гледате 3D пространството, следващата стъпка е да обработите показването на "малки обекти, които са далеч" и "големи неща, които са наблизо". Това се нарича проективна трансформация. Има два метода за трансформация на проекцията, "перспективна проекция" и "ортографска проекция", но често използваното изображение "перспективна проекция" е както следва.
Перспективната проекция използва следните параметри: ViewAngle, Aspect Ratio, Forward Clip Position и Rear Clip Position. Областта, обозначена с "frustum" на фигурата по-горе, най-накрая ще се появи на екрана.
"ViewAngle" определя обхвата на гледане, видим от камерата. Намаляването на ъгъла увеличава, увеличаването му намалява. Ъгълът на видимост ще бъде вертикалната стойност на устойката.
Съотношението на страните се използва за определяне на хоризонталния зрителен ъгъл, докато ъгълът на видимост е вертикален ъгъл. Хоризонталният ъгъл обикновено се определя от "ъгъла на гледане × съотношението на страните", а съотношението на страните е основно стойността на "ширината ÷ височината" на екрана, който се опитвате да покажете. Ако промените тази стойност, показаният 3D обект ще изглежда разтегнат хоризонтално или вертикално.
Позицията на клипа напред и позицията на задната скоба са зададени, за да се определи дали обектът се показва в предния или задния диапазон. Поради естеството на компютъра не е възможно да се показва до безкрайност, така че ще зададем ограничение. Тази стойност също влияе върху точността на Z-буфера, така че не се препоръчва да го включвате в областта за рисуване извън диапазона, който не е необходимо да се показва.
Перспективният трансформиран обект се преобразува в пространство като това по-долу. Обектите, които са били близо до камерата, се увеличават, а обектите, които са били далеч, се намаляват.
Това е илюстрирано в лесна за разбиране диаграма по-долу.
Ако наистина го погледнете от гледна точка на камерата, изглежда по-долу.
Друг метод на проективна трансформация е ортографската проекция, която проектира видима област като тази по-долу. Тъй като ширината и височината са постоянни, независимо от дълбочината, размерът на обекта не се променя с дълбочината.
Координатна система на екрана
След трансформацията на проекцията тя се преобразува в координатите на действителния екран. Въпреки че е екран, позицията и обхватът на дисплея се променят в зависимост от настройките на прозореца, зададени на устройството. Въпреки това, в случай на игри, клиентските координати на прозореца често са прозорецът за изглед такъв, какъвто е, така че не мисля, че трябва да се притеснявате твърде много.
Координатите на екрана (0, 0) се преобразуват от прожекционните координати (-1, 1, z). По същия начин координатите на екрана (ширина, височина) се преобразуват от координатите на проекцията (1, -1, z).