示例#1
0
文件: source.cpp 项目: hanchao/llmr
// scan-line conversion
void _scanTriangle(const mbgl::vec2<double> a, const mbgl::vec2<double> b, const mbgl::vec2<double> c, int32_t ymin, int32_t ymax, ScanLine& scanLine) {
    edge ab = _edge(a, b);
    edge bc = _edge(b, c);
    edge ca = _edge(c, a);

    // sort edges by y-length
    if (ab.dy > bc.dy) { std::swap(ab, bc); }
    if (ab.dy > ca.dy) { std::swap(ab, ca); }
    if (bc.dy > ca.dy) { std::swap(bc, ca); }

    // scan span! scan span!
    if (ab.dy) _scanSpans(ca, ab, ymin, ymax, scanLine);
    if (bc.dy) _scanSpans(ca, bc, ymin, ymax, scanLine);
}
示例#2
0
文件: prime.cpp 项目: cbankston/hex
void Prime::render(uint8_t& r, uint8_t& g, uint8_t& b) {
  switch (pattern) {
    case PRIME_STROBE:
      _strobe(this, 10, 16);
      break;
    case PRIME_HYPER:
      _strobe(this, 34, 34);
      break;
    case PRIME_DOPS:
      _strobe(this, 3, 20);
      break;
    case PRIME_STROBIE:
      _strobe(this, 6, 46);
      break;
    case PRIME_PULSE:
      _pulse(this, 200, 50);
      break;
    case PRIME_SEIZURE:
      _strobe(this, 10, 190);
      break;
    case PRIME_TRACER:
      _tracer(this, 6, 46);
      break;
    case PRIME_DASHDOPS:
      _dashdops(this, 22, 3, 20, 7);
      break;
    case PRIME_BLINKE:
      _blinke(this, 10, 100);
      break;
    case PRIME_EDGE:
      _edge(this, 4, 16, 40);
      break;
    case PRIME_LEGO:
      _lego(this, 16);
      break;
    case PRIME_CHASE:
      _chase(this, 100, 20, 5);
      break;
    case PRIME_MORPH:
      _morph(this, 34, 34, 4);
      break;
    case PRIME_RIBBON:
      _strobe(this, 22, 0);
      break;
    case PRIME_COMET:
      _comet(this, 30, 16, 2);
      break;
    case PRIME_CANDY:
      _candy(this, 10, 16, 3, 8);
      break;
    default:
      break;
  }
  tick++;
  r = _r; g = _g; b = _b;
}
示例#3
0
void ReTriangulation::legalizeEdge(std::vector<Vec3f>* point, std::vector<Vec2i>& illegalEdge, std::vector<Vec3i>& triangles)
{
	GeometricFunc func;
	int i=0;
	while(1)
	{
		if(illegalEdge.empty())
			break;

		std::vector<int> triIdx;
		std::vector<int> pointIdx;

		if(illegalEdge.size()<=i)
			i=0;
		Vec2i edge=illegalEdge[i];
		
		// illegal한 edge를 포함하는 triangle들을 찾는다
		for(int j=0;j<triangles.size();j++)
		{
			if(func.isTriangleContainEdge(illegalEdge[i], triangles[j]))
			{
				triIdx.push_back(j);
				for(int k=0;k<3;k++)
				{
					if((triangles[j][k]!=edge[0])&&(triangles[j][k]!=edge[1]))
					{
						pointIdx.push_back(triangles[j][k]);
						break;
					}
				}
			}
		}

		if(triIdx.size()==2)
		{
			// 새로 생기는 edge가 illegal edge인지 검사한다.
			Vec2i _edge(pointIdx[0], pointIdx[1]);
			bool flag=true;
			for(int j=0;j<illegalEdge.size();j++)
			{
				if(func.isEdgeSame(illegalEdge[j], _edge))
				{
					flag=false;
					break;
				}
			}
			if(flag)
			{
				triangles[triIdx[0]]=Vec3i(pointIdx[0], pointIdx[1], edge[0]);
				triangles[triIdx[1]]=Vec3i(pointIdx[0], pointIdx[1], edge[1]);
				illegalEdge[i]=illegalEdge[illegalEdge.size()-1];
				illegalEdge.pop_back();
				i--;
			}
		}
		else
		{
			illegalEdge[i]=illegalEdge[illegalEdge.size()-1];
			illegalEdge.pop_back();
			i--;
		}
		i++;
	}
}