1

我有一个 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

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

照片上的传奇:

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

红色 => 标记区域。

蓝色 => 我将如何拥有矩形。

在此处输入图像描述

    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 )   
4

1 回答 1

2

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

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

您将遇到的一个问题是您需要 3 个点来生成一个平面,因此虽然您可以获得屏幕的位置来获得它的角度,但您将需要另一个点。

如果您的这些屏幕是静态设置的,例如您手动将它们的位置放入 lua 代码中并且不打算让它移动或其他任何东西,那么手动放入角度是迄今为止最简单的方法。

直立

倾斜的

两个都

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

我在表达式 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))
于 2016-09-29T19:26:11.820 回答