health

[tahir][bigposts]

vehicles

[tahir][bigposts]

business

[tahir][bigposts]

Game Maker 3D dersleri 4: 3 boyutlu tasarım ve çizim

3 boyutlu çizim poligonları
Eski tarzda çizme problemi, bir sprite'ın veya çokgenin her zaman xy-düzleminde yatmasıdır, yani tüm köşeler aynı derinliğe sahiptir. Gerçek 3D için farklı derinliklerde köşelere sahip olmak isteyebilirsiniz. Bu andan itibaren derinlikten ziyade z-koordinatı hakkında konuşacağız. Bu yüzden koordinatları (x, y, z) tuples olarak belirtmek istiyoruz. Bunun için gelişmiş çizim fonksiyonlarının özel versiyonu vardır:

d3d_primitive_begin (tür) Belirtilen türden bir 3B ilkelini başlatın: pr_pointlist, pr_linelist, pr_linestrip, pr_trianglelist, pr_trianglestrip veya pr_trianglefan.
d3d_vertex (x, y, z) Önceden ayarlanmış olan renk ve alfa değerini kullanarak ilkel değere köşe (x, y, z) ekleyin.
d3d_vertex_color (x, y, z, col, alpha) İlk renkle kendi rengi ve alfa değeriyle köşe (x, y, z) ekleyin. Bu, sorunsuz bir şekilde değişen renk ve alfa değerleri ile ilkelleri oluşturmanıza olanak tanır.
d3d_primitive_end () İlkel öğenin açıklamasını sonlandırın. Bu işlev aslında onu çizer.

Örneğin, z = 0 düzleminde z = 0 düzleminde bir tetrahedron (üç taraflı piramit) çizmek için aşağıdaki kodu kullanabilirsiniz:
{
  d3d_primitive_begin(pr_trianglelist);
    d3d_vertex(100,100,0);
    d3d_vertex(100,200,0);    
    d3d_vertex(150,150,200);
    d3d_vertex(100,200,0);
    d3d_vertex(200,200,0);    
    d3d_vertex(150,150,200);
    d3d_vertex(200,200,0);
    d3d_vertex(100,100,0);    
    d3d_vertex(150,150,200);
    d3d_vertex(100,100,0);
    d3d_vertex(100,200,0);    
    d3d_vertex(200,200,0);
  d3d_primitive_end();
}

Şimdi bunu kullanırsanız, muhtemelen ekranda bir üçgen görürsünüz çünkü tetrahedronun üstü bakış açısından onun arkasında olacaktır. Ayrıca, sadece bir renk kullanarak, farklı yüzleri görmek zor olurdu. Aşağıda, bakış açısını değiştirmenin yollarını göreceğiz. Renk atamak, daha önce olduğu gibi vertices arasında draw_set_color (col) fonksiyon çağrıları eklenerek yapılabilir.

Ayrıca dokulu poygonları 3D olarak da kullanabilirsiniz. Belgedeki gelişmiş çizim işlevlerinde anlatılanla tamamen aynı çalışır. Fakat bu sefer temel fonksiyonların 3D varyantlarına ihtiyacınız var. Farkına varmanız gereken bir şey. Bir dokuda konum (0,0) sol üst köşedir. Ancak, projeksiyonları kullanırken (aşağıda belirtildiği gibi) sıklıkla sol alt köşe (0,0) olur. Böyle bir durumda dokuyu dikey olarak çevirmeniz gerekebilir.


d3d_primitive_begin_texture (kind, texid) Verilen doku ile belirtilen türdeki bir 3D ilkelini başlatın.
d3d_vertex_texture (x, y, z, xtex, ytex) Dokudaki konuma (xtex, ytex) sahip ilkelin üzerine önce ayarlanmış renk ve alfa değeriyle harmanlanarak, 頂te (x, y, z) ekleyin.
d3d_vertex_texture_color (x, y, z, xtex, ytex, col, alpha) Dokuda (xtex, ytex) konumu olan ilkelin üstüne kendi rengini ve alfa değerini harmanlayan vertex (x, y, z) ekleyin.
d3d_primitive_end () İlkelin açıklamasını sonlandırın. Bu fonksiyon aslında onu çizer.

Örneğin, mesafeye kaybolan bir arka plan resmi çizmek için aşağıdaki kodu kullanabilirsiniz

{
  var ttt;
  ttt = background_get_texture(back);
  d3d_primitive_begin_texture(pr_trianglefan,ttt);
    d3d_vertex_texture(0,480,0,0,0);
    d3d_vertex_texture(640,480,0,1,0);    
    d3d_vertex_texture(640,480,1000,1,1);
    d3d_vertex_texture(0,480,1000,0,1);
  d3d_primitive_end();
}



Bir üçgen ön ve arka tarafı vardır. Ön taraf, köşelerin saatin tersi yönünde tanımlandığı
 yan olarak tanımlanır.Normalde her iki taraf da çizilir. Ancak, kapalı bir şekle girerseniz, üçgen arka yüzü asla görülemeyeceği için bu israf olur. Bu durumda arka yüz celalemesini açabilirsiniz. Bu, çizim süresinin yaklaşık yarısından tasarruf etmenizi sağlar, ancak sizi poligonlarınızı doğru bir şekilde tanımlama görevi bırakır. Aşağıdaki işlev var:
d3d_set_culling (cull) Arka yüze celaleyi başlatmayı (true) veya arka yüzü celene atmayı 
(false) gösterir.

No comments:

Post a Comment