如何通过向量和角度在三维区域中创建一个矩形

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

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

照片上的Legendary:

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

红色= >标记的区域。

蓝色=>我将拥有的矩形。

![进入图像描述](https://i.stack.imgur.com/0eDlT.jpg)

aem_point = vgui.Create(“ AEM.Main.Panel”)
如果IsValid(aem_point),则
    aem_point:SetSize(2,2) - <-我可以设置的大小
    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>
    ]] )
结束

挂钩添加(“ PostDrawOpaqueRenderables”,“ DrawSample3D2DFrame”..math.random(),function()
    如果第一个和dat_finish,则
vgui.Start3D2D(输入位置,输入角度,1) - <-并位置和vec
        aem_pointPaint3D2D()
        vgui.End3D2D()
    结束
结束)

点赞
用户3077998
用户3077998

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

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

一个问题是你需要三个点才能生成一个平面,因此,虽然你可以获得屏幕位置来获取其角度,但你需要另一个点。

如果这些屏幕是静态设置的,也就是说你将它们的位置手动放入lua代码中,不想让它们移动或做任何事情,那么手动放入角度是最简单的方法。

upright

slanted

both

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

我用Expression 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-29 19:26:11