Compare commits

...

3 Commits

3 changed files with 17 additions and 26 deletions

View File

@ -875,7 +875,7 @@ void main()
if (leftChild >= bvhLength) if (leftChild >= bvhLength)
{ {
uint zIndex = bvhChildren[index].y / 65535; uint zIndex = bvhChildren[index].y / 65535;
float angle = (float(bvhChildren[index].y) / 65535.0 - zIndex) * 2 * PI; float angle = (bvhChildren[index].y / 65535.0 - zIndex) * 2 * PI;
mat2 rotation = {{cos(angle), -sin(angle)}, {sin(angle), cos(angle)}}; mat2 rotation = {{cos(angle), -sin(angle)}, {sin(angle), cos(angle)}};
vec2 localUV = uv - (bound.xy + bound.zw) / 2; vec2 localUV = uv - (bound.xy + bound.zw) / 2;

View File

@ -46,10 +46,11 @@ void ShortCutTree::monotonization(vector<PointVector>& inL, vector<LinePtr>& out
void ShortCutTree::generateShortCutsegmentement(ShortCutNode& nowTreeNode) { void ShortCutTree::generateShortCutsegmentement(ShortCutNode& nowTreeNode) {
Point p = {0, 0}; Point p = {0, 0};
set<pair<int, int> > pointSet; vector<int> v;
for (int & lineIndex : nowTreeNode.lineSet) { for (int & lineIndex : nowTreeNode.lineSet) {
int type = allLine[lineIndex]->judgeBoundIntersection(nowTreeNode.bound.z(), nowTreeNode.bound.y(), nowTreeNode.bound.w(), false), lineIndexBegin, lineIndexEnd; int type = allLine[lineIndex]->judgeBoundIntersection(nowTreeNode.bound.z(), nowTreeNode.bound.y(), nowTreeNode.bound.w(), false), lineIndexBegin, lineIndexEnd;
if (type >= 2) { if (type >= 2) {
v.push_back(numLine);
if (type == 2) { if (type == 2) {
p = allLine[lineIndex]->getEnd(); p = allLine[lineIndex]->getEnd();
} }
@ -58,34 +59,26 @@ void ShortCutTree::generateShortCutsegmentement(ShortCutNode& nowTreeNode) {
} }
lineIndexBegin = getPointIndex({ p.x, nowTreeNode.bound.w() }); lineIndexBegin = getPointIndex({ p.x, nowTreeNode.bound.w() });
lineIndexEnd = getPointIndex(p); lineIndexEnd = getPointIndex(p);
auto iter = pointSet.find({ lineIndexBegin, lineIndexEnd }); lineIndexs.push_back(lineIndexBegin);
if (iter != pointSet.end()) { lineIndexs.push_back(lineIndexBegin);
pointSet.erase(iter); lineIndexs.push_back(lineIndexEnd);
} lineIndexs.push_back(lineIndexEnd);
else { numLine++;
pointSet.insert({ lineIndexBegin, lineIndexEnd });
}
} }
} }
if (nowTreeNode.windingIncrement != 0) { if (nowTreeNode.windingIncrement != 0) {
v.push_back(numLine);
int lineIndexBegin = getPointIndex({ nowTreeNode.bound.z(), nowTreeNode.bound.y()}); int lineIndexBegin = getPointIndex({ nowTreeNode.bound.z(), nowTreeNode.bound.y()});
int lineIndexEnd = getPointIndex({ nowTreeNode.bound.z(), nowTreeNode.bound.w() }); int lineIndexEnd = getPointIndex({ nowTreeNode.bound.z(), nowTreeNode.bound.w() });
auto iter = pointSet.find({ lineIndexBegin, lineIndexEnd }); lineIndexs.push_back(lineIndexBegin);
if (iter != pointSet.end()) { lineIndexs.push_back(lineIndexBegin);
pointSet.erase(iter); lineIndexs.push_back(lineIndexEnd);
} lineIndexs.push_back(lineIndexEnd);
else {
pointSet.insert({ lineIndexBegin, lineIndexEnd });
}
}
for (auto& iter : pointSet) {
nowTreeNode.lineSet.push_back(numLine);
lineIndexs.push_back(iter.first);
lineIndexs.push_back(iter.first);
lineIndexs.push_back(iter.second);
lineIndexs.push_back(iter.second);
numLine++; numLine++;
} }
for (int& lineIndex : v) {
nowTreeNode.lineSet.push_back(lineIndex);
}
} }
bool ShortCutTree::handleShortCutNode(ShortCutNode& fa, ShortCutNode& nowTreeNode, double yValue, vector<ShortCutNode>& v, int& sumIncrement) { bool ShortCutTree::handleShortCutNode(ShortCutNode& fa, ShortCutNode& nowTreeNode, double yValue, vector<ShortCutNode>& v, int& sumIncrement) {

View File

@ -3,12 +3,10 @@
#include "StraightLine.h" #include "StraightLine.h"
#include "BvhTree.h" #include "BvhTree.h"
#include <queue> #include <queue>
#include <set>
using std::queue; using std::queue;
using std::map; using std::map;
using std::for_each; using std::for_each;
using std::set;
struct ShortCutNode { struct ShortCutNode {
typedef vector<Point> vectorPoint; typedef vector<Point> vectorPoint;