Мазмуну:

3D Viewer: 4 кадам
3D Viewer: 4 кадам

Video: 3D Viewer: 4 кадам

Video: 3D Viewer: 4 кадам
Video: Som ET - 45 - Moon - Apollo 14 - U.S. Flag on the Moon #Shorts 2024, Ноябрь
Anonim
3D Viewer
3D Viewer

Салам! Программалоого болгон кызыгуумду канааттандыруу үчүн жана сиздикин канааттандырууга жардам берүү үчүн, мен сизге JavaScript менен коддолгон 3D Viewer көрсөткүм келет. Эгерде сиз 3D оюндары боюнча түшүнүгүңүздү өркүндөткүңүз келсе же өзүңүздүн 3D оюнду түзгүңүз келсе, анда бул 3D прототип сиз үчүн идеалдуу.

1 -кадам: Теория

Теория
Теория

Бул 3D көрүүчүнүн теориясын түшүнүү үчүн, сиз жөн гана айланаңызга болгон көз карашыңызды текшере аласыз (бул бир гана маанилүү жарык булагына ээ болууга жардам берет). Байкаңыз:

  1. Сизден алыстагы объекттер көрүү талааңыздын кичине бөлүгүн ээлейт.
  2. Жарык булагынан алысыраак болгон объекттер кара түстө көрүнөт.
  3. Беттер жарык булагына параллелдүү (перпендикулярдуу) болуп калганда, алар кара түстө көрүнөт.

Мен бир чекиттен (көз алмасына окшош) келип чыккан бир топ сызыктар менен аян талаасын көрсөтүүнү чечтим. Көз чарасынын ар бир бөлүгү бирдей чагылдырылышын камсыз кылуу үчүн, чукул топ сыяктуу, сызыктарды бирдей жайгаштыруу керек. Жогорудагы сүрөттө, топтун ортосунан алыстап баратканда, баштык топтон келген сызыктар кандай аралыкта болуп калганын байкаңыз. Бул объектилер борбордук чекиттен алыстаган сайын линиялардын тыгыздыгы төмөндөгөндүктөн, программанын 1 байкоосун ишке ашырууну элестетүүгө жардам берет.

Саптар программанын негизги көрүнүш бирдиги болуп саналат жана алардын ар бири дисплейде пикселге түшүрүлөт. Сызык объекти менен кесилишкенде, анын тиешелүү пиксели жарык булагынан алыстыгына жана жарык булагына болгон бурчуна жараша түстүү болот.

2 -кадам: Ишке ашыруу теориясы

Ишке ашыруу теориясы
Ишке ашыруу теориясы

Программаны жөнөкөйлөтүү үчүн, жарыктын булагы борбордук чекит менен бирдей (көздүн кареги: карта карала турган жана сызыктар келип чыккан чекит). Жарыкты бетиңиздин жанында кармоо сыяктуу, бул көлөкөлөрдү жок кылат жана ар бир пикселдин жарыктыгын алда канча оңой эсептөөгө мүмкүндүк берет.

Программа ошондой эле сфералык координаттарды колдонот, анын башында көздүн борбору жайгашкан. Бул сызыктарды оңой түзүүгө мүмкүндүк берет (ар биринин уникалдуу тетасы бар: горизонталдуу бурч жана phi: вертикалдуу бурч) жана эсептөөлөрдүн негизин түзөт. Ошол эле тетасы бар саптар ошол эле саптагы пикселдерге картага түшүрүлөт. Тиешелүү бурчтардын фисси пикселдердин ар бир катарында көбөйөт.

Математиканы жөнөкөйлөтүү үчүн, 3D карта жалпы өзгөрмөлүү (жалпы x, y же z) тегиздиктерден турат, ал эми калган эки жалпы эмес өзгөрмө ар бир тегиздиктин аныктамасын бүтүрүп, диапазондо чектелген.

Чычкан менен айлананы кароо үчүн, сфералык жана xyz координат системаларынын ортосундагы айлануу учурунда программанын теңдемелери вертикалдуу жана горизонталдуу айланууга таасир этет. Бул көрүнүш сызыктарынын "баштуу топ" топтомунда айланууну алдын ала түзүү таасирин тийгизет.

3 -кадам: Математика

Төмөнкү теңдемелер программага ар бир объектинин кайсы сызыктар менен кесилишерин жана ар бир кесилиш тууралуу маалыматты аныктоого мүмкүнчүлүк берет. Мен бул теңдемелерди негизги сфералык координаталык теңдемелерден жана 2D айлануу теңдемелеринен алдым:

r = аралык, t = тета (горизонталдык бурч), p = phi (вертикалдуу бурч), A = Y огунун айлануусу (вертикалдуу айлануу), B = Z огунун айлануусу (горизонталдуу айлануу)

Kx = (sin (p)*cos (t)*cos (A)+cos (p)*sin (A))*cos (B) -sin (p)*sin (t)*sin (B)

Ky = (sin (p)*cos (t)*cos (A)+cos (p)*sin (A))*sin (B)+sin (p)*sin (t)*cos (B)

Kz = -син (p)*cos (t)*sin (A)+cos (p)*cos (A)

x = r*Kx

y = r*Ky

z = r*Kz

r^2 = x^2+y^2+z^2

жарык = Klight/r*(Kx же Ky же Kz)

p = arccos ((x*sin (A)*cos (B)+y*sin (A)*sin (B)+z*cos (A))/r)

t = arccos ((x*cos (B)+y*sin (B) -p*sin (A)*cos (p))/(r*cos (A)*sin (p)))

4 -кадам: Программа

Программа
Программа

Бул прототип 3D көрүүчү сизге 3D виртуалдык чындыктын иштешин түшүнүүгө жардам берди деп үмүттөнөм. Дагы бир нече өркүндөтүү жана коддоо менен, бул көрүүчү, албетте, 3D оюнду иштеп чыгууда колдонулушу мүмкүн.

Сунушталууда: