我如何使surface.DrawTexturedRectRotated()从左侧旋转?

问题描述 投票:0回答:1

我使用surface.DrawTexturedRectRotated()制作了实心圆,但它从中心旋转,我想使其从左侧旋转。

I tried to rotate it but it makes full circle when its 180 degrees

function draw.FilledCircle( x, y, w, h, ang, color )
    for i=1,ang do
        draw.NoTexture()
        surface.SetDrawColor( color or color_white )
        surface.DrawTexturedRectRotated( x,y, w, h, i )
    end
end

我如何使其从左旋转?

lua garrys-mod
1个回答
0
投票

[如果您想要一个允许通过指定ang参数来创建类似于饼图的实心圆的函数,则最好的选择可能是surface.DrawPoly( table vertices )。您应该可以像这样使用它:

function draw.FilledCircle(x, y, r, ang, color)    --x, y being center of the circle, r being radius
    local verts = {{x = x, y = y}}    --add center point
    for i = 0, ang do
        local xx = x + math.cos(math.rad(i)) * r
        local yy = y + math.sin(math.rad(i)) * r
        table.insert(verts, {x = xx, y = yy})
    end

    --the resulting table is a list of counter-clockwise vertices
    --surface.DrawPoly() needs clockwise list
    verts = table.Reverse(verts)    --should do the job

    surface.SetDrawColor(color or color_white)
    draw.NoTexture()
    surface.DrawPoly(verts)
end

我按照surface.SetDrawColor()的建议将draw.NoTexture()放在this example之前。

您可能想使用for i = 0, ang, angleStep do来减少顶点数量,因此减少了硬件负载,但是这仅对小圆圈(如您的示例中的一个)可行,因此角度步长应为半径的某个函数考虑到每种情况。另外,还需要执行其他计算,以允许角度不被余数为零的角度步长除以。]

--after the for loop
if ang % angleStep then
    local xx = x + math.cos(math.rad(ang)) * r
    local yy = y + math.sin(math.rad(ang)) * r
    table.insert(verts, {x = xx, y = yy})
end

关于纹理,如果您的纹理不是纯色,则与矩形会有很大不同,但是快速浏览library并没有发现实现此目的的更好方法。

© www.soinside.com 2019 - 2024. All rights reserved.