Delphi ile küre yapıp fare ile döndürmek?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
muratturan
Üye
Mesajlar: 16
Kayıt: 22 May 2009 01:53

Delphi ile küre yapıp fare ile döndürmek?

Mesaj gönderen muratturan »

Delphi xe7 de Viewport3d ' nin üzerine sphere koydum. Google earth tarzı bir program yapmak istiyorum. Küreye dünya haritasını giydirdim. herşey güzel. yakınlaştırma uzaklaştırma sorun yok. Küreyi fare ile döndürmek istiyorum ancak ya fazla dönüyor ya eksik. Delphi ile google earth tarzı program yazmak icin en iyi tavsiyeyi alabilirmiyim? yada küreyi nasıl hassas ve düzgün döndürebileceğimi... kürenin onmouse olayına şöyle bir kod yazdım ama hesaplama yaptırmak ve her açı için farklı miktarda döndürme gerekiyor sanırım. belki aramızdan bunun kolay yolunu bilen yada hazır kodu olan biri çıkar.

Kod: Tümünü seç

procedure TForm1.daireMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Single; RayPos, RayDir: TVector3D);
begin
tuttu := true;
end;
--------------------------------------------------------
procedure TForm1.daireMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Single; RayPos, RayDir: TVector3D);
begin
tuttu := false;
end;
----------------------------------------------------------
procedure TForm1.daireMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Single; RayPos, RayDir: TVector3D);
begin
if tuttu = true then
BEGIN
if  x > mx then  // x ekseni büyüyor
 begin
  mx := x;
  daire.rotationangle.X :=  daire.rotationangle.X+1;
 end;

 if  y > my then  // y ekseni büyüyor
 begin
my := y;
//  daire.rotationangle.y :=  daire.rotationangle.y+1;
 end;

 if  x < mx then  // x ekseni küçülüyor
 begin
  mx := x;
  daire.rotationangle.X :=  daire.rotationangle.X-1;
 end;

 if  y < my then  // y ekseni küçülüyor
 begin
my := y;
 // daire.rotationangle.y :=  daire.rotationangle.y-1;
 end;
END;
 end;
ertank
Kıdemli Üye
Mesajlar: 1657
Kayıt: 12 Eyl 2015 12:45

Re: Delphi ile küre yapıp fare ile döndürmek?

Mesaj gönderen ertank »

Merhaba, Fare tıklandığında farenin koordinat değerlerini bir değişken içinde saklamıyorsunuz. Hesaplamalarınız bu yüzden hatalı gibi duruyor.
muratturan
Üye
Mesajlar: 16
Kayıt: 22 May 2009 01:53

Mesaj gönderen muratturan »

ertank yazdı: 17 Kas 2023 10:29 Merhaba, Fare tıklandığında farenin koordinat değerlerini bir değişken içinde saklamıyorsunuz. Hesaplamalarınız bu yüzden hatalı gibi duruyor.
Öncelikle cevap için tesekkürler. Pek kimsenin cevap vermek istemeyeceği sıradışı bir soruydu.

Farenin kordinatları onmousemove olayında x ile geliyor bende mx ile tutuyorum. Fare hangi eksende kaç pixel hareket ediyorsa o kadar topu o yönde dönderiyrum. Kabaca bi yöntem olduğunun farkındayım. ince hesaplama yapmak icin ekran çözünürlüğü kürenin zoomlama sonrası boyutları, 3d sebebiyle yanlara dogru görüntünün daralması ve daha aklıma gelmeyen bir çok seyi bile hesaplayıp o oranda döndürsem bile sanırım başarılı olamayacağım. Bu sebeple, küreyi fareyle tuttuğum noktaya bi pointer koyup, fareyinin bulunduğu noktaya gelinceye dek ihtiyac duyduğu kadar x y eksenlerinde hareket ettirmenin daha dogru olacağına karar verdim. Ama bunun icinde sphere de kordinat yada kontrol edebileceğim bir işaretleme yöntemi bulamadım. Kürenin tuttuğum noktasinı alamıyorum. Bu yuzden de sormak zorunda kaldım. Daha iyi bir yöntem komponet yada biseyler varmı ?
Kullanıcı avatarı
loaded
Üye
Mesajlar: 122
Kayıt: 12 Eki 2010 09:45
Konum: Konya
İletişim:

Re: Delphi ile küre yapıp fare ile döndürmek?

Mesaj gönderen loaded »

Merhaba
Zamanında bende ilgilenmiştim bu konuyla nette ufak tefek örnekler bulmuştum fakat tüm yollar OpenGL'ye çıkmıştı.
Sonrasında 2 boyutlu CAD uygulaması geliştirdim. Windows için https://youtu.be/5yhI1uq-3yM devamında pascal kullanarak aynı uygulamayı daha da geliştirerek Androide aktardım. https://youtu.be/gBS0AMrJ50s
Buradan edindiğim tecrübe ile diyebilirim ki, OpenGL'ye hakim olmanız sonrasında Earth benzeri birşeyleri yapabilirsiniz diye düşünüyorum.
Kalk ve işe yarar bir şey yap! Çünkü Allah (c.c.) yeniden başlayanların yardımcısıdır.
Cevapla