如何通过矢量和角度

时间:2015-06-17 17:16:33

标签: vector lua garrys-mod

我有一个3D游戏,我将创建一个作为屏幕工作的矩形,游戏本身可以使用向量到位置。所以我将创建一个矩形,只有这些参数可用:

开始位置 - >向量(x,y,z)。 对象(x,y,z)的角度(旋转)。 矩形的大小。

现在对象也需要向右侧掠过,所以他们也使用天使(x,y,z)。

示例:

position:-381.968750 -28.653845 -12702.185547
angle: -0.000 90.000 90.000

我将创建的内容有点难,但想法很简单。

我选择2个完全不同的位置和角度,并将从第一个矢量创建到第二个矩形。

我只能创建一个包含起点和角度的矩形。 我可以设置大小(x,y)

所以我现在将插入2个具有2个不同角度的位置(向量)

矩形将具有第一和第二角度之间的中间值,因此(90和0) - > 45

矩形将从起始向量开始,并以自己的大小结束,因此我没有机会直接使用结束向量。

传奇照片:

绿色=>开始和结束位置(向量)。

red =>标记区域。

蓝色=>我将如何使用矩形。

enter image description here

    aem_point = vgui.Create( "AEM.Main.Panel" )
if IsValid(aem_point) then
    aem_point:SetSize( 2,2 ) -- <-the size that i can set   
    aem_point:SetPos( 0, 0 )
    aem_ph = vgui.Create( "DHTML", aem_point )  
    aem_ph:SetSize( aem_point:GetSize() )
    aem_ph:SetPos(aem_point:GetPos())
    aem_ph:SetVisible( true )
    aem_ph:SetHTML([[
        <html>
        <body style="margin:0px;padding:0px;font-size:20px;color:red;border-style: solid;border-color: #ff0000;background-color:rgba(255,0,0,0.1);">

        </body>
        </html>
    ]] ) 
end

    hook.Add( "PostDrawOpaqueRenderables", "DrawSample3D2DFrame" .. math.random(), function()
        if first and dat_finish then
vgui.Start3D2D( input_position, input_angle, 1 ) -- <-and position&vec
            aem_point:Paint3D2D()
            vgui.End3D2D()
        end
    end )   

1 个答案:

答案 0 :(得分:1)

哦,你想从2个矢量位置创建一个3d2d平面?

    Vec1 = A
    Vec2 = B
    input_position = ( Vec1 + Vec2 ) / 2

你将遇到的一个问题是你需要3个点来生成一个平面,所以当你可以获得屏幕的位置来获得它的角度时,你需要另一个点。

如果您的这些屏幕是静态设置的,就像您手动将它们的位置放入lua代码并且不想让它移动或任何东西一样,只需手动放入角度是迄今为止最简单的方法。

upright

slanted

both

如您所见,这两个平面都位于相同的两个点上,但它们具有不同的角度。

我在表达式2中编写了演示,如果您有任何其他问题,请详细说明这是如何工作的。

    A = entity(73):pos()
    B = entity(83):pos()

    if(first())
    {
        holoCreate(1)
        holoCreate(2)
    }
    holoPos(1,(A+B)/2)

    holoScaleUnits(1,vec( abs(B:y() - A:y()) ,  1  ,  abs(sqrt(  ( B:z() - A:z() ) ^ 2  +  ( B:x() - A:x() ) ^ 2  ))))
    holoAng(1,ang(0,90,45))

    holoPos(2,(A+B)/2)

    holoScaleUnits(2,vec( abs(sqrt(  ( B:x() - A:x() ) ^ 2  +  ( B:y() - A:y() ) ^ 2  )) ,  1  , abs(B:z()-A:z())))
    holoAng(2,ang(0,45,0))