3D компютърна графика: Моделирайте своя свят

Изследвайте своя свят

Доколкото знам, не можем просто да залепим малко от нашия свят директно в компютъра (без да повредим компютъра, така или иначе). Най-доброто, което можем да направим, е да създадем компютърен модел на нашия свят. Като се има предвид това ограничение, как да моделираме нещо като стол например?

Обектите в нашия свят имат характеристики или свойства, като форма, размер, тегло, позиция, ориентация и цвят (и списъкът продължава и продължава). Нека разгледаме за момент само тяхната форма, положение и ориентация - тези свойства са това, което наричаме пространствени свойства. И нека започнем с нещо по-лесно за работа, отколкото със стол - куб, например.

Погледнете илюстрацията на фигура 1. Тя показва куб, седнал в иначе празна стая. (Добре, стаята също има врата, но това е само за да изглежда стаята по-скоро като стая.)

Фигура 1: Стая с куб

За да определим формата, позицията и ориентацията на куб, трябва да посочим местоположението на всеки от ъглите му. За да направим това, бихме могли да използваме език като този:

Първият ъгъл е на метър (или метър, ако предпочитате) над пода и на два метра и половина (или метри) от стената зад мен. Вторият ъгъл също е крак над пода и крак от стената вляво от мен.

Имайте предвид, че и двата ъгъла са посочени спрямо нещо друго (стената и / или пода). В нашия компютърен модел бихме могли да дефинираме пода и стената и да ги използваме като референтни точки, но се оказва много по-лесно просто да изберете една референтна точка (която ще наречем начало ) и вместо това да я използваме. За нашия произход ще използваме ъгъла, оформен от двете стени и пода. Фигура 2 показва местоположението на нашия произход.

Фигура 2: Начало и координатна ос

Сега трябва да посочим къде се намира всеки ъгъл по отношение на произхода. Можете да посочите пътя от началото до ъгъла на куба по няколко начина. За простота трябва да се споразумеем за стандарт. Нека направим следното:

Си представим, че всеки един от краищата, образувани от пресичането на стена и стената, или стена и пода, се дава име - ще ги наричат на оста х , на у ос , и Z ос , като посочената на фигура 2. И нека също така се договорим отпред, че ще определим местоположението на ъгъл, като следваме тази рецепта:

  • Първо, измерете колко трябва да изминем от началото по права линия, успоредна на оста x
  • След това измерете колко далеч трябва да изминем от тази точка по права линия, успоредна на оста y
  • И накрая, измерете колко далеч трябва да изминем от тази точка по права линия, успоредна на оста z

Фигура 3 показва пътя, който бихме следвали, за да стигнем до един от ъглите на куба.

Фигура 3: Намиране на вашия път

Като кратко стенографиране, нека напишем всички тези разстояния като:

  • Разстоянието от начало, успоредно на оста x
  • Разстоянието от начало, успоредно на оста y
  • Разстоянието от начало, успоредно на оста z

или (дори по-кратко):

(разстояние х, разстояние у, разстояние z) 

Тази тройка стойности се нарича координати на ъгъла . Можем да определим позицията в пространството на всеки ъгъл по подобен начин. Можем да открием например, че кубът е този пример има ъгли на:

(3 feet, 1 foot, 2 feet)

или

(3 feet, 1 foot, 3 feet)

или

(4 feet, 1 foot, 2 feet)

и така нататък.

Мерните единици (фута или метра например) не са важни за нашите цели. Важното е как единиците се съпоставят със стандартната единица екранна недвижима собственост - пиксела. Ще говоря повече за това картографиране малко по-късно.

Получаване на леко раздразнение

Разположението на ъглите на куба определя позицията и ориентацията на куба. Въпреки това, като се имат предвид само координатите на ъглите му, не можем да реконструираме куб (още по-малко стол). Наистина трябва да знаем къде са ръбовете, защото ръбовете определят формата.

Всички ръбове имат една много хубава характеристика - те винаги започват и завършват в ъглите. Така че, ако знаем къде са всички ръбове, със сигурност ще знаем къде са всички ъгли.

Сега ще направим едно голямо опростяващо предположение. В нашия модел на света ще поставим извън закона извити ръбове (ще научите защо по-късно); ръбовете винаги трябва да са прави линии. За да приближим извитите ръбове, ще поставим прави ръбове от край до край, както е показано на фигура 4.

Фигура 4: Апроксимация на права линия на крива

Тогава ръбовете се превръщат в нищо повече от прости отсечки от редове. А сегментите на линиите се определят от координатите на техните начални и крайни точки. Следователно моделът на обект не е нищо повече от колекция от редови сегменти, които описват неговата форма.

Визуализация: Вече не е само за релаксация

Сега, когато знаем как да моделираме обект, сме готови да се справим с проблема с представянето на модел на екрана на компютъра.

Помислете за компютърния екран като за прозорец към нашия виртуален свят. Ние седим от едната страна на прозореца, а виртуалният свят седи от другата. Фигура 5 илюстрира тази концепция.

Фигура 5: Нашият прозорец към виртуалния свят

Има много начини да поставите информацията в модела на прозореца (или на екрана на компютъра). Вероятно най-простото е това, което се нарича изометрична проекция .

Тъй като нашият модел има три измерения, а компютърният екран има само две, ние можем да картографираме модела към екрана, като първо премахнем координатата z (третата от трите координати) от всяка точка в модела. Това ни оставя координатите x и y за всяка точка. Координатите x и y се мащабират по подходящ начин (въз основа на мерните единици на модела) и се съпоставят с пикселите на екрана. Можем да използваме тези стъпки във всяка точка на интерес в модела, за да разберем къде ще се появи на екрана.

Оказа се, че не е необходимо всяка точка в нашия модел да се трансформира по този начин. Едно от последствията от апроксимирането на всеки ръб в модела с отсечки от линии е, че наистина трябва да преобразуваме само крайните точки на отсечка, а не всяка точка от отсечката. Това е вярно, защото простите проекции (като изометрична проекция) винаги трансформират линейни сегменти в линейни сегменти - линейните сегменти не се превръщат в криви. Следователно, след като знаете позициите на трансформираните крайни точки, ние можем да използваме вградените процедури на AWT за чертане на линии, за да нарисуваме самия сегмент на линията.

Мисля, че един пример може да е в ред. Ще създам три прости модела с еднаква форма в различни ориентации.

Таблица 1 съдържа данните, описващи проста форма на първо място. Всеки ред в таблицата съответства на ръб. Таблицата дава координатите на началната и крайната точка на ръба. Да приемем, че гледаме формата отвън по оста z.

Сегментиране Започнете Край
х у z х у z
A 25 0 -70 25 35 -35
Б. 25 35 -35 25 0 0
° С 25 0 0 25 -35 -35
д 25 -35 -35 25 0 -70
Е. 25 0 -70 -25 0 -70
F -25 0 -70 -25 35 -35
G -25 35 -35 -25 0 0
З. -25 0 0 -25 -35 -35
Аз -25 -35 -35 -25 0 -70
Таблица 1: Данни за проста форма - първа позиция

Аплетът на фигура 6 показва какво бихме видели.

За да видите този аплет, ви е необходим браузър с активиран Java. Фигура 6: Проста форма - първа позиция

Сега нека завъртим фигурата с няколко градуса. Таблица 2 съдържа данните, описващи същата форма във втората й позиция. Имайте предвид, че са се променили само позицията и ориентацията, но не и формата.

Сегментиране Започнете Край
х у z х у z
A 45 0 -58 34 35 -25
Б. 34 35 -25 23. 0 7
° С 23. 0 7 34 -35 -25
д 34 -35 -25 45 0 -58
Е. 45 0 -58 -2 0 -74
F -2 0 -74 -12 35 -41
G -12 35 -41 -23 0 -7
З. -23 0 -7 -12 -35 -41
Аз -12 -35 -41 -2 0 -74
Таблица 2: Данни за проста форма - втора позиция

Аплетът на фигура 7 показва какво бихме видели.

За да видите този аплет, ви е необходим браузър с активиран Java. Фигура 7: Проста форма - втора позиция

Три са чар, така че нека го завъртим още веднъж - този път нагоре с няколко градуса. Таблица 3 съдържа данните, описващи формата в третата й позиция.

Сегментиране Започнете Край
х у z х у z
A 45 -26 -52 34 19. -38
Б. 34 19. -38 23. 3 6
° С 23. 3 6 34 -42 -6
д 34 -42 -6 45 -26 -52
Е. 45 -26 -52 -2 -33 -66
F -2 -33 -66 -12 12 -52
G -12 12 -52 -23 -3 -6
З. -23 -3 -6 -12 -49 -20
Аз -12 -49 -20 -2 -33 -66
Таблица 3: Данни за проста форма - трета позиция

Аплетът на фигура 8 показва какво бихме видели.

За да видите този аплет, ви е необходим браузър с активиран Java. Фигура 8: Проста форма - трета позиция

Обобщавайки

Вече вероятно сте стигнали до заключението, че промяната на ориентацията на обект на ръка не е много забавно. И резултатът също не е много интерактивен. Следващият месец ще ви покажа как да манипулирате интерактивно обектите (и ние ще накараме компютъра да прави всички числа, които се смачкват - в края на краищата, не е ли този тип работни компютри, за които се предполага, че са добри?). Ще разгледаме и проблема с перспективата - по-специално ще ви покажа как да го включите във възгледите на нашия модел.

Тод Съндстед пише програми, откакто компютрите стават достъпни в настолни модели. Въпреки че първоначално се интересуваше от изграждането на разпределени обектни приложения в C ++, Тод премина към езика за програмиране Java, когато Java стана очевидният избор за такъв тип неща. Тод е съавтор на Java Language API SuperBible, който вече е в книжарниците навсякъде. В допълнение към писането, Тод е президент на Etcee, предоставяйки ориентирано към Java обучение, наставничество и консултации.

Научете повече за тази тема

  • За малко от всичко, свързано с 3D графика, вижте:

    //www.3dsite.com/3dsite/

  • Yahoo предоставя удобен начин за започване на търсенето на теми за 3D графика

    //www.yahoo.com/Computers_and_Internet/Graphics/3D/

  • Можете да изтеглите тази статия, изходния код и файловете на класа като gzipped tar файл:

    /javaworld/jw-05-1997/howto/jw-05-howto.tar.gz

  • Предишни статии с инструкции за Java
  • „Когато статичните изображения просто не правят разрез“ - Научете как да подправите вашите аплети и приложения

    с анимирани изображения.

  • „Как Java използва модела производител / потребител за обработка на изображения - Поглед отвътре“ - Научете повече за мощната техника за обработка на изображения на Java, след което следвайте моите прости процедури за изграждане на собствени компоненти на производител и потребител.
  • „Научете как аплетите зареждат асинхронно мрежови изображения“ - Ето подробен поглед върху начина, по който Java аплетите обработват изображения в мрежова среда.
  • „Рисуването на текст е лесно с три Java класа“ - Разберете как да създадете визуално привлекателен текст чрез това обяснение за това какви класове да използвате и как работят заедно.
  • „Изследване на HotSpot, обектно ориентирана програма за рисуване“ - Научете как парчетата от езика Java и библиотеката на класовете се съчетават чрез проучване на тази Java. програма
  • „Използване на графичния клас“ - Близък поглед върху класа „Графика“ и примитивите за рисуване, които той предоставя, и демонстрация на използването му.
  • „Observer and Observable“ - Въведение в Observer интерфейса и Observable класа, използвайки архитектурата Model / View / Controller като ръководство.
  • „Ефективният потребителски интерфейс“ - Въведение в интерфейса на Observer и клас Observable, използвайки архитектурата Model / View / Controller като ръководство.
  • „Java и обработка на събития“ - Как събитията се предават на компонентите на потребителския интерфейс, как се създават манипулатори на събития и др.
  • „Въведение в AWT“ - описание на инструментариума на потребителския интерфейс на Java.

Тази история „3D компютърна графика: Моделирайте своя свят“ първоначално е публикувана от JavaWorld.