我在3D空间中有一个由4个点组成的扁平方形,每个点由(x,y,z)值组成。我已旋转此方块并将其转换为2D点,因此它现在由(x,y)值组成。
我知道如果广场背对着我我不应该渲染它(它实际上是立方体的背面)并且这可以通过找到构成2D的点的“缠绕数”来计算方。
我在Lua中的代码几乎可以使用,但是当它们不是“面向”我的时候,它隐藏了一些方面。这有什么问题?我错过了什么吗?
...谢谢
local function isPolygonClockwise( pointList )
local area = 0
for i = 1, #pointList-1, 2 do
local pointStart = { x=pointList[i].x - pointList[1].x, y=pointList[i].y - pointList[1].y }
local pointEnd = { x=pointList[i + 1].x - pointList[1].x, y=pointList[i + 1].y - pointList[1].y }
area = area + (pointStart.x * -pointEnd.y) - (pointEnd.x * -pointStart.y)
end
return (area < 0)
end
作为Lua,pointList是从1开始的,而不是从0开始的。
以下是一个点列表,这些点会导致立方体的正面几乎向右指向时呈现,但非常肯定仍然面临:
160.0588684082
-124.87889099121
160.0588684082
124.87889099121
41.876174926758
70.065422058105
41.876174926758
-70.065422058105
该列表开始原始为逆时针缠绕,作为每个角落的x和y值的-100或100的简单值列表。
答案 0 :(得分:0)
刚刚意识到增量值是错误的,因为它计算了点列表中的每个值,这意味着在索引1之后x和y值被计数两次......
ul.progress-tracker {
margin: 15px 0;
padding: 0;
overflow: hidden;
&: before, &: after {
clear: both;
}
li {
list-style: none;
&: first-child {
a: before {
display: none;
}
}
&:last-child {
padding-right: 8px;
a {
margin: 0;
min-width: 30.09%;
padding: 3px 0 0 8px;
&: after {
display: none;
}
}
}
a {
content: "";
display: block;
float: left;
height: 8px;
background: tint($light-blue, 60%);
text-align: center;
padding: 3px 4px 0 8px;
position: relative;
margin: 0 10px 0 0;
text-decoration: none;
color: #fff;
min-width: 31%;
&: before {
content: "";
border-color: transparent;
border-top: 4px solid transparent;
border-bottom: 4px solid transparent;
border-left: 4px solid $light-gray;
position: absolute;
left: 0;
top: 0;
}
&:after {
content: "";
border-top: 4px solid transparent;
border-bottom: 4px solid transparent;
border-left: 4px solid tint($light-blue, 60%);
position: absolute;
right: -4px;
top: 0;
z-index: 1;
}
}
a.completed {
background-color: $primary-green;
&: after {
border-left-color: $primary-green;
}
}
}
}