我有一个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 =>标记区域。
蓝色=>我将如何使用矩形。
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 )
答案 0 :(得分:1)
哦,你想从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))