Სარჩევი:

3D Viewer: 4 ნაბიჯი
3D Viewer: 4 ნაბიჯი

ვიდეო: 3D Viewer: 4 ნაბიჯი

ვიდეო: 3D Viewer: 4 ნაბიჯი
ვიდეო: 📺 SAMSUNG UE55RU7300UXUA მრგვალი ეკრანის ტელევიზორი / 55 ინჩი 2024, ივლისი
Anonim
3D მაყურებელი
3D მაყურებელი

გამარჯობა! პროგრამირებისადმი ჩემი ინტერესის დასაკმაყოფილებლად და იმედია დაგეხმარებით თქვენი დაკმაყოფილებაში, მე მინდა გაჩვენოთ 3D Viewer, რომელიც javascript- ში მაქვს კოდირებული. თუ გსურთ გაეცნოთ 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 = -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

განათება = 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 თამაშის შემუშავებაში.

გირჩევთ: