Kendi 3D motorumu JavaScript'te yuvarlıyorum ve sadece tuval çizimi kullanıyorum, WebGL kullanmıyorum. Bu başka bir Minecraft klonu; Kutuları seviyorum, beni yargılama.
Şimdiye kadar, tek bir şey hariç her şey harika çalışıyor: 3D'de, bazı köşeler yakın kırpma düzleminin arkasına geçtiğinde, ekrandaki yansımaları garip çıkıyor (bir uçağı izlemek için kullanılan diğer köşelerin önünde olduğu varsayılarak).
Bu noktaları kırpmayı denedim ama sonra bu köşeleri kullanan yüzeylerde görüyorum. WebGL / OpenGL'de grafik kartı bu noktalarla ilgilenir ve uçak doğru bir şekilde oluşturulur, ancak donanıma erişimim yok, bu yüzden bunu kendim kodlamalıyım.
Ne yapacağımdan tam olarak emin değilim, şu anda akla gelen son şey, oyuncunun yakın kırpma düzleminin arkasındaki noktaların projeksiyonunu tersine çevirmek. tepe noktası.
İşte düşüncelerim:
Ne olduğunu gösteren bazı resimler:
Uzaktan mavi kutu mükemmel bir şekilde işliyor.
Bazı köşeler oyuncunun yakın kırpma düzleminin arkasına geçtiğinde ters projeksiyon yaparım, ancak doğru görünmüyor:
focalLength *= -1;
2d.x = x*focalLength/z;
2d.y = y*focalLength/z;
Yüzlerini çizmek için kullanılan tüm köşeler oynatıcının arkasında olduğundan arkadaki gri kutunun tamamen kaldırıldığını unutmayın.
Yukarı veya aşağı baktığında olan şey budur.
Bunun arkasındaki matematiği ne yapacağımı bilmiyorum, birisinin aynı problemle zaten karşılaştığını ve bana yardımcı olabileceğini umuyorum.
lineTo(x,y)
işlev hala çağrılabilirdi, sadece nasıl davrandığını bilmiyorum ... bu tuhaf bir boyut, katılıyorum.