health

[tahir][bigposts]

vehicles

[tahir][bigposts]

business

[tahir][bigposts]

Game maker 3D dersleri 7:Dönüşümler

Dönüşümler
Dönüşüm, dünyadaki şeylerin çizildiği yeri değiştirmenize izin verir. Örneğin, blok çizme işlevi sadece eksen-paralel blokları çizebilir. İlk önce bir dönüş dönüşümü ayarlayarak döndürülmüş bloklar oluşturabilirsiniz. Ayrıca spritelar her zaman xy düzlemine paralel çizilir. Bir dönüşüm ayarlayarak bunu değiştirebilirsiniz. İki tür işlev vardır: dönüştürmeyi ve dönüşümleri ekleyen işlevleri ayarlayan işlevler.

d3d_transform_set_identity () Kimliği dönüştürmeyi ayarlar (dönüşüme gerek yoktur).
d3d_transform_set_translation (xt, yt, zt) Belirtilen vektör üzerinden bir çeviriye dönüşümü ayarlar.
d3d_transform_set_scaling (xs, ys, zs) Dönüşümü belirtilen miktarlarla bir ölçeklemeye ayarlar.
d3d_transform_set_rotation_x (angle) Dönüşümü, belirtilen miktarla x ekseni etrafında bir dönüşe ayarlar.
d3d_transform_set_rotation_y (açı) Dönüşümü, belirtilen miktarla y ekseni etrafında bir dönüşe ayarlar.
d3d_transform_set_rotation_z (angle) Dönüşümü, belirtilen miktarla z ekseni etrafında bir dönüşe ayarlar.
d3d_transform_set_rotation_axis (xa, ya, za, angle) Dönüşümü, belirtilen miktarla vektör tarafından gösterilen eksen etrafında bir dönüşe ayarlar.
d3d_transform_add_translation (xt, yt, zt) Belirtilen vektörün üzerine bir çeviri ekler.
d3d_transform_add_scaling (xs, ys, zs) Belirtilen miktarlarla bir ölçekleme ekler.
d3d_transform_add_rotation_x (açı) Belirtilen miktarla x ekseni etrafına bir dönüş ekler.
d3d_transform_add_rotation_y (açı) Belirtilen miktarla y ekseninin çevresinde bir dönüş ekler.
d3d_transform_add_rotation_z (açı) Belirtilen miktarla z ekseni etrafına bir dönüş ekler.
d3d_transform_add_rotation_axis (xa, ya, za, angle) Belirtilen miktarla vektör tarafından gösterilen eksen etrafında bir dönüş ekler.

Döndürmenin ve ölçeklendirmenin, çekilecek nesneye göre değil, dünyanın kökenine göre olduğunu fark edin. Nesne menşe değilse, aynı zamanda istediğimiz gibi değil, başka bir yere hareket edecektir. Yani örneğin Bir nesneyi kendi x ekseni üzerinde döndürün, önce onu orijine çevirmeli, sonra döndürmeli ve sonunda onu tekrar konumuna çevirmeliyiz. Dönüşümler eklemek için kullanılan işlevler budur.
Aşağıdaki örnekler bunu daha iyi açıklayabilir. Pozisyonda çizmek istediğimiz bir sprite sprimiz olduğunu varsayalım (100,100,10). Bunu yapmak için aşağıdaki kodu kullanabiliriz


{
  d3d_transform_set_translation(100,100,10);
  draw_sprite(spr,0,0,0);
  d3d_transform_set_identity();
}


Bir çeviri kullandığımız için artık hareketli grafiği (0,0) pozisyonunda çizmemiz gerektiğini unutmayın. (Bu, geçerli örneğin 0 derinliğine sahip olduğunu varsayar! Eğer emin değilseniz, önce derinliği ayarlayın.) Bunu birinci şahıs nişancıda kullanırsak, sprite'ı göremeyiz. Bunun nedeni hala xy-düzlemine paralel olmasıdır. X ekseni (veya y ekseni) boyunca 90 derece döndürmek istiyoruz. Yani bir rotasyon eklememiz gerekiyor. Düzeni hatırla: önce sprite'ı döndürmeli ve sonra tercüme etmeliyiz. Bu yüzden aşağıdaki kodu kullanabiliriz.
{
  d3d_transform_set_identity();
  d3d_transform_add_rotation_x(90);
  d3d_transform_add_translation(100,100,10);
  draw_sprite(spr,0,0,0);
  d3d_transform_set_identity();
}

Bazen, geçici olarak, mevcut dönüşümü kaydetmek istersiniz, örneğin, ek bir dönüşüm eklemek ve sonra eski olanı geri yüklemek (bu genellikle hiyerarşik modeller çizilirken gerçekleşir). Bu amaçla, mevcut dönüşümü bir yığına aktarabilir ve daha sonra onu mevcut dönüşüm haline getirmek için yığından çıkartabilirsiniz. Bunun için aşağıdaki işlevler vardır:
d3d_transform_stack_clear () Dönüşüm yığını temizler.d3d_transform_stack_empty () Dönüştürme yığınının boş olup olmadığını döndürür.d3d_transform_stack_push () Yığındaki mevcut dönüşümü iter. Yığın üzerinde oraya itmek için bir oda olup olmadığını döndürür (eğer bir anda haşhaş dönüşümünü unutursanız, yığında odadan dışarı çıkarsınız).d3d_transform_stack_pop () Yığından üst dönüşümü çıkarır ve onu geçerli olanı yapar. Yığında bir dönüşüm olup olmadığını döndürür.d3d_transform_stack_top () Geçerli olanın üst dönüşümü yapar, ancak yığından kaldırmaz. Yığında bir dönüşüm olup olmadığını döndürür.d3d_transform_stack_discard () Üst dönüşümü yığıntan kaldırır ancak geçerli olanı yapmaz. Yığında bir dönüşüm olup olmadığını döndürür.
Dönüşümü kullanmak güçlü bir mekanizmadır. Ama dikkatli olun ve işiniz bittiğinde dönüşümü daima kimliğe geri getirin.


No comments:

Post a Comment