Compare commits
3 Commits
11bed6c706
...
63996ec51a
Author | SHA1 | Date |
---|---|---|
yang.yongquan | 63996ec51a | |
yang.yongquan | f895211a5c | |
yang.yongquan | 5973c54a76 |
|
@ -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;
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue