surface.DrawPoly

  surface.DrawPoly( table vertices )

Açıklama

Maksimum 4096 köşe noktasına sahip dokulu bir çokgen (aslında bir üçgen yelpazesi) çizer. Sadece dışbükey (konveks) çokgenlerle düzgün çalışır. İçbükey (konkav) çokgenleri de render etmeyi deneyebilirsiniz, ancak işlerin karışmayacağının bir garantisi yoktur.

Çoğu surface kütüphanesi fonksiyonunun aksine, tam sayı olmayan koordinatlar yuvarlanmaz.

Tutarlı sonuçlar elde etmek için fonksiyonu çağırmadan önce çizim rengini ve dokusunu sıfırlamanız gerekir. Aşağıdaki örneklere bakın.
Bu, 2 boyutlu bir render bağlamı gerektiren bir render fonksiyonudur.

Bu, yalnızca 2 Boyutlu Render Hook'ları içinde çalışacağı anlamına gelir.

Argümanlar

1 table vertices
Tamsayı köşe noktaları içeren bir tablo. PolygonVertex yapısı sayfasına bakın.

Köşe noktaları saat yönünde sıralanmalıdır.

Örnek

Ekranın sol üst köşesine kırmızı bir üçgen çizer.

local triangle = { { x = 100, y = 200 }, { x = 150, y = 100 }, { x = 200, y = 200 } } hook.Add("HUDPaint", "PolygonTest", function() surface.SetDrawColor( 255, 0, 0, 255 ) draw.NoTexture() surface.DrawPoly( triangle ) end )
Çıktı:

Örnek

Ekranın sol üst köşesine sarı bir çokgen çizer.

local triangle = { { x = 100, y = 200 }, { x = 150, y = 100 }, { x = 200, y = 200 }, { x = 150, y = 300 }, { x = 100, y = 300 }, } hook.Add("HUDPaint", "PolygonExample", function() surface.SetDrawColor( 255, 255, 0, 255 ) draw.NoTexture() surface.DrawPoly( triangle ) end )
Çıktı:
drawpoly_example.png

Örnek

surface.DrawPoly kullanarak bir daire çizen yardımcı bir fonksiyon.

function draw.Circle( x, y, radius, seg ) local cir = {} table.insert( cir, { x = x, y = y, u = 0.5, v = 0.5 } ) for i = 0, seg do local a = math.rad( ( i / seg ) * -360 ) table.insert( cir, { x = x + math.sin( a ) * radius, y = y + math.cos( a ) * radius, u = math.sin( a ) / 2 + 0.5, v = math.cos( a ) / 2 + 0.5 } ) end local a = math.rad( 0 ) -- Bu, mutlak olmayan segment sayıları için gereklidir table.insert( cir, { x = x + math.sin( a ) * radius, y = y + math.cos( a ) * radius, u = math.sin( a ) / 2 + 0.5, v = math.cos( a ) / 2 + 0.5 } ) surface.DrawPoly( cir ) end hook.Add("HUDPaint", "PolygonCircleTest", function() surface.SetDrawColor( 0, 0, 0, 200) draw.NoTexture() draw.Circle( ScrW() / 2, ScrH() / 2, 200, math.sin( CurTime() ) * 20 + 25 ) --Kullanım: --draw.Circle( x, y, yarıçap, segmentler ) end )

Tüm sunucular · GmodTR Launcher · Rehber · GMod Wiki · GmodTR nedir? · Sunucu ekle · Discord