Mündəricat:

3D Viewer: 4 addım
3D Viewer: 4 addım

Video: 3D Viewer: 4 addım

Video: 3D Viewer: 4 addım
Video: Stream Tools 2.0.0 (December 2023 release) 2024, Iyul
Anonim
3D Baxıcı
3D Baxıcı

Salam! Proqramlaşdırma marağımı təmin etmək və inşallah sizin maraqlarınızı təmin etmək üçün sizə JavaScript ilə kodladığım bir 3D Viewer göstərmək istərdim. 3D oyunları anlayışınızı daha da inkişaf etdirmək və ya hətta öz 3D oyununuzu yaratmaq istəyirsinizsə, bu 3D görüntüləyici prototip sizin üçün idealdır.

Addım 1: nəzəriyyə

Nəzəriyyə
Nəzəriyyə

Bu 3D görüntüleyicinin nəzəriyyəsini başa düşmək üçün ətrafınıza necə baxdığınızı araşdıra bilərsiniz (yalnız bir əhəmiyyətli işıq mənbəyinə sahib olmağa kömək edir). Diqqət yetirin:

  1. Sizdən daha uzaq olan obyektlər görmə sahənizin daha kiçik bir hissəsini tutur.
  2. İşıq mənbəyindən uzaq olan cisimlər daha qaranlıq görünür.
  3. Səthlər işıq mənbəyinə daha paralel (daha az dik) olduqda, daha qaranlıq rəngdə görünürlər.

Bir nöqtədən (göz kürəsinə bənzər) qaynaqlanan bir dəstə xətti olan bir görmə sahəsini təmsil etmək qərarına gəldim. Bir sünbül topu kimi, görmə sahəsinin hər bir hissəsinin bərabər şəkildə təmsil olunmasını təmin etmək üçün xətlərin bərabər şəkildə ayrılması lazımdır. Yuxarıdakı şəkildə, sünbül topundan gələn xətlərin topun mərkəzindən uzaqlaşdıqca necə daha çox aralığa çıxdığına diqqət yetirin. Bu, cisimlərin mərkəz nöqtəsindən uzaqlaşdıqca xətlərin sıxlığı azaldığından proqramın müşahidə 1 -in həyata keçirilməsini görselleştirmeye kömək edir.

Xəttlər, proqramdakı əsas görmə vahididir və hər biri ekranda bir piksellə müqayisə olunur. Bir xətt bir obyektlə kəsişdiyi zaman, ona uyğun olan piksel, işıq mənbəyindən uzaqlığına və işıq mənbəyinə olan bucağına görə rənglənir.

Addım 2: İcra nəzəriyyəsi

İcra nəzəriyyəsi
İcra nəzəriyyəsi

Proqramı sadələşdirmək üçün işıq mənbəyi mərkəzi nöqtə ilə eynidir (göz kürəsi: xəritənin baxıldığı və xətlərin qaynaqlandığı nöqtə). Üzünüzün yanındakı bir işığa bənzər şəkildə, bu kölgələri yox edir və hər pikselin parlaqlığını daha asan hesablamağa imkan verir.

Proqram eyni zamanda sferik koordinatlardan istifadə edir, görmə mərkəzinin başlanğıc nöqtəsindədir. Bu, xətlərin asanlıqla yaradılmasına imkan verir (hər birinin özünəməxsus tetası: üfüqi bucaq və phi: şaquli bucaq) və hesablamaların əsasını təşkil edir. Eyni teta olan xətlər, eyni cərgədəki piksellərlə müqayisə olunur. Müvafiq açıların phisləri hər bir piksel sətri boyunca artır.

Riyazi hesablamanı asanlaşdırmaq üçün, 3D xəritəsi ümumi dəyişən (ümumi x, y və ya z) olan təyyarələrdən ibarətdir, digər iki qeyri-ümumi dəyişən isə hər bir müstəvinin tərifini tamamlayaraq bir sıra daxilində məhdudlaşdırılır.

Siçan ilə ətrafa baxmaq üçün, sferik və xyz koordinat sistemləri arasında çevrilmə zamanı proqramın tənlikləri şaquli və üfüqi dönmə faktorudur. Bu, "sünbül topu" görmə xətləri üzərində bir fırlanma hazırlamaq təsirinə malikdir.

Addım 3: Riyaziyyat

Aşağıdakı tənliklər, hər bir obyektin hansı xətləri kəsdiyini və hər kəsişmə haqqında məlumatı təyin etməyə imkan verir. Bu tənlikləri əsas sferik koordinat tənliklərindən və 2D fırlanma tənliklərindən əldə etdim:

r = məsafə, t = teta (üfüqi bucaq), p = phi (şaquli açı), A = Y oxu ətrafında fırlanma (şaquli fırlanma), B = Z oxu ətrafında fırlanma (üfüqi fırlanma)

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 = -sin (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

işıqlandırma = Klight/r*(Kx və ya Ky və ya 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)))

Addım 4: Proqram

Proqram
Proqram

Ümid edirəm ki, bu 3D görüntüleyicinin prototipi, 3D virtual reallıqların işini başa düşməyinizə kömək etdi. Bir az daha mükəmməlləşdirmə və kodlaşdırma ilə bu tamaşaçı, əlbəttə ki, 3D oyun inkişafında istifadə etmək potensialına malikdir.

Tövsiyə: