Exemplo n.º 1
0
void can_project_micropolygon() {
    MeshPoint mp1(-10, -10, 100);
    MeshPoint mp2(10, -10, 100);
    MeshPoint mp3(-10, 10, 100);
    MeshPoint mp4(10, 10, 100);
    MicroPolygon poly;
    poly.a = mp1;
    poly.b = mp2;
    poly.c = mp3;
    poly.d = mp4;

    FrameBuffer fb(500, 500);
    fb.projectMicroPolygon(poly);

    ASSERT_EQUAL_FLOAT(poly.a.getX(), 206.699, 0.1);
    ASSERT_EQUAL_FLOAT(poly.a.getY(), 206.699, 0.1);

    ASSERT_EQUAL_FLOAT(poly.b.getX(), 293.301, 0.1);
    ASSERT_EQUAL_FLOAT(poly.b.getY(), 206.699, 0.1);

    ASSERT_EQUAL_FLOAT(poly.c.getX(), 206.699, 0.1);
    ASSERT_EQUAL_FLOAT(poly.c.getY(), 293.301, 0.1);

    ASSERT_EQUAL_FLOAT(poly.d.getX(), 293.301, 0.1);
    ASSERT_EQUAL_FLOAT(poly.d.getY(), 293.301, 0.1);
}
Exemplo n.º 2
0
int main(int argc, const char *argv[])
{
  char *p=1;
  printf("p: %p\n", p);
  mp(p, 5);       
  printf("p: %p\n", p);
  mp1(&p, 5);       
  printf("p: %p\n", p);
  return 0;
}
Exemplo n.º 3
0
void unary_plus_test()
{
   quan::resistance::MR R1(4.7);
   quan::resistance::MR R2 = +R1;
   QUAN_CHECK_EQUAL(R1.numeric_value(),R2.numeric_value());
   quan::magnetic_permeability_<int>::mH_per_m mp1(987.51);
   quan::magnetic_permeability::mH_per_m mp2 = + mp1;
   QUAN_CHECK(mp1.numeric_value() == mp2.numeric_value());
   QUAN_CHECK(mp1.numeric_value() == 988);
}
Exemplo n.º 4
0
void bounding_box_for_microPolygon_has_right_coords() {
    MeshPoint mp1(-10, -10, 100);
    MeshPoint mp2(10, -10, 100);
    MeshPoint mp3(-10, 10, 100);
    MeshPoint mp4(10, 10, 100);
    MicroPolygon poly;
    poly.a = mp1;
    poly.b = mp2;
    poly.c = mp3;
    poly.d = mp4;

    FrameBuffer fb(500, 500);
    fb.projectMicroPolygon(poly);

    BoundingBox box = poly.getBoundingBox();
    ASSERT_EQUAL_INT(box.X_start, 206);
    ASSERT_EQUAL_INT(box.Y_start, 206);
    ASSERT_EQUAL_INT(box.X_stop, 294);
    ASSERT_EQUAL_INT(box.Y_stop, 294);
}
Exemplo n.º 5
0
int main(int argc, char** argv) {
    BinarySerializer bs;
    Point<double> p(2);
    p.mX[0] = 1;
    p.mX[1] = 2;
    bs << p;
    MultiPoint<double> mp(2,2);
    mp.mParam.mX[0] = 1;
    mp.mParam.mX[1] = 2;
    mp.mCrit.mX[0] = 3;
    mp.mCrit.mX[1] = 4;
    bs << mp;
    Point<double> q(2);
    bs.reset();
    bs >> q;
    //rintf("%s\n", q.toString().c_str());
    BNB_ASSERT((p.mX[0] == q.mX[0]) && (p.mX[1] == q.mX[1]));
    MultiPoint<double> mq(2,2);
    bs >> mq;
    //printf("%s\n", mq.toString().c_str());
    BNB_ASSERT((mp.mParam.mX[0] == mq.mParam.mX[0]) && (mp.mParam.mX[1] == mq.mParam.mX[1]));
    BNB_ASSERT((mp.mCrit.mX[0] == mq.mCrit.mX[0]) && (mp.mCrit.mX[1] == mq.mCrit.mX[1]));
    MultiPoint<double> mp1(2,3);
    mp1.mParam.mX[0] = 0;
    mp1.mParam.mX[1] = 1;
    mp1.mCrit.mX[0] = 3;
    mp1.mCrit.mX[1] = 4;
    mp1.mCrit.mX[2] = 5;
    MultiPoint<double> mp2(2,3);
    mp2.mParam.mX[0] = 10;
    mp2.mParam.mX[1] = 11;
    mp2.mCrit.mX[0] = 5;
    mp2.mCrit.mX[1] = 4;
    mp2.mCrit.mX[2] = 3;
    MPSimpBag<double> mpsbag;
    mpsbag.put(mp1);
    mpsbag.put(mp2);
    bs.reset();
    bs << mpsbag;
    bs.reset();
    MPSimpBag<double> mpsbagn;
    bs >> mpsbagn;
    //printf("%s\n", mpsbagn.toString().c_str());
    BNB_ASSERT(mpsbagn.size() == 2);
    bs.reset();

    Box<double> bx1(2);
    bx1.mA[0] = 1;
    bx1.mA[1] = 2;
    bx1.mB[0] = 3;
    bx1.mB[1] = 4;
    bs << bx1;
    Box<double> bx2(2);
    bs.reset();
    bs >> bx2;
    //printf("%s\n", BoxUtils::toString(bx2).c_str());
    BNB_ASSERT(bx1.mA[0] == bx2.mA[0]);
    BNB_ASSERT(bx1.mA[1] == bx2.mA[1]);
    BNB_ASSERT(bx1.mB[0] == bx2.mB[0]);
    BNB_ASSERT(bx1.mB[1] == bx2.mB[1]);
    
    SimpBoxBag<double> sb;
    sb.put(bx1);
    sb.put(bx2);
    bs.reset();
    bs << sb;
    bs.reset();
    SimpBoxBag<double> sb1;
    bs >> sb1;
    //printf("sb1: %s\n", sb1.toString().c_str());
    BNB_ASSERT(sb1.size() == 2);
    return 0;
}
Exemplo n.º 6
0
void BSplineCurveEvaluator::evaluateCurve(const std::vector<Point>& ptvCtrlPts,
	std::vector<Point>& ptvEvaluatedCurvePts,
	const float& fAniLength,
	const bool& bWrap) const
{
	int sampleRate = 120;
	ptvEvaluatedCurvePts.clear();
	vector<Point> ctrlPts;

	if (bWrap)
	{
		if (ptvCtrlPts.size() == 2)
		{
			Point tmp;
			Point mp0(ptvCtrlPts[0].x - fAniLength, ptvCtrlPts[0].y);
			Point mp1(ptvCtrlPts[1].x - fAniLength, ptvCtrlPts[1].y);
			Point p0(ptvCtrlPts[0].x + fAniLength, ptvCtrlPts[0].y);
			Point p1(ptvCtrlPts[1].x + fAniLength, ptvCtrlPts[1].y);
			for (int j = 0; j <= sampleRate; ++j)
			{
				tmp = calculateBSpline((float)j / sampleRate, mp0, mp1, ptvCtrlPts[0], ptvCtrlPts[1]);
				if (tmp.x >= 0)ptvEvaluatedCurvePts.push_back(tmp);
			}
			for (int j = 0; j <= sampleRate; ++j)
			{
				tmp = calculateBSpline((float)j / sampleRate, mp1, ptvCtrlPts[0], ptvCtrlPts[1], p0);
				if (tmp.x >= 0 && tmp.x <= fAniLength)ptvEvaluatedCurvePts.push_back(tmp);
			}
			for (int j = 0; j <= sampleRate; ++j)
			{
				Point tmp;
				tmp = calculateBSpline((float)j / sampleRate, ptvCtrlPts[0], ptvCtrlPts[1], p0, p1);
				if (tmp.x <= fAniLength)ptvEvaluatedCurvePts.push_back(tmp);
			}
		}
		else
		{
			Point tmp;
			Point mp0(ptvCtrlPts[ptvCtrlPts.size() - 2].x - fAniLength, ptvCtrlPts[ptvCtrlPts.size() - 2].y);
			Point mp1(ptvCtrlPts[ptvCtrlPts.size() - 1].x - fAniLength, ptvCtrlPts[ptvCtrlPts.size() - 1].y);
			Point p0(ptvCtrlPts[0].x + fAniLength, ptvCtrlPts[0].y);
			Point p1(ptvCtrlPts[1].x + fAniLength, ptvCtrlPts[1].y);
			for (int j = 0; j <= sampleRate; ++j)
			{
				tmp = calculateBSpline((float)j / sampleRate, mp0, mp1, ptvCtrlPts[0], ptvCtrlPts[1]);
				if (tmp.x >= 0)ptvEvaluatedCurvePts.push_back(tmp);
			}
			for (int j = 0; j <= sampleRate; ++j)
			{
				tmp = calculateBSpline((float)j / sampleRate, mp1, ptvCtrlPts[0], ptvCtrlPts[1], ptvCtrlPts[2]);
				if (tmp.x >= 0 && tmp.x <= fAniLength)ptvEvaluatedCurvePts.push_back(tmp);
				tmp = calculateBSpline((float)j / sampleRate, ptvCtrlPts[ptvCtrlPts.size() - 3], ptvCtrlPts[ptvCtrlPts.size() - 2], ptvCtrlPts[ptvCtrlPts.size() - 1], p0);
				if (tmp.x >= 0 && tmp.x <= fAniLength)ptvEvaluatedCurvePts.push_back(tmp);
			}
			for (int j = 0; j <= sampleRate; ++j)
			{
				Point tmp;
				tmp = calculateBSpline((float)j / sampleRate, ptvCtrlPts[ptvCtrlPts.size() - 2], ptvCtrlPts[ptvCtrlPts.size() - 1], p0, p1);
				if (tmp.x <= fAniLength)ptvEvaluatedCurvePts.push_back(tmp);
			}
		}
		ctrlPts.insert(ctrlPts.end(), ptvCtrlPts.begin(), ptvCtrlPts.end());
		/*
		float h = ptvCtrlPts[0].y + ptvCtrlPts[ptvCtrlPts.size() - 1].y;
		h /= 2.0;
		ctrlPts.push_back(Point(0, h));
		ctrlPts.push_back(Point(0, h));
		ctrlPts.push_back(Point(0, h));
		ctrlPts.insert(ctrlPts.end(), ptvCtrlPts.begin(), ptvCtrlPts.end());
		ctrlPts.push_back(Point(fAniLength, h));
		ctrlPts.push_back(Point(fAniLength, h));
		ctrlPts.push_back(Point(fAniLength, h));
		*/
	}
	else
	{
		ptvEvaluatedCurvePts.push_back(Point(0, ptvCtrlPts[0].y));
		ptvEvaluatedCurvePts.push_back(Point(fAniLength, ptvCtrlPts[ptvCtrlPts.size() - 1].y));
		ctrlPts.push_back(ptvCtrlPts[0]);
		ctrlPts.push_back(ptvCtrlPts[0]);
		ctrlPts.insert(ctrlPts.end(), ptvCtrlPts.begin(), ptvCtrlPts.end());
		ctrlPts.push_back(ptvCtrlPts[ptvCtrlPts.size() - 1]);
		ctrlPts.push_back(ptvCtrlPts[ptvCtrlPts.size() - 1]);
	}


	if (ctrlPts.size() >= 4)
	{
		for (int i = 0; i < ctrlPts.size() - 3; ++i)
		{
			for (int j = 0; j <= sampleRate; ++j)
			{
				ptvEvaluatedCurvePts.push_back(calculateBSpline((float)j / sampleRate, ctrlPts[i], ctrlPts[i + 1], ctrlPts[i + 2], ctrlPts[i + 3]));
			}
		}
	}

}
CPatcher_EnableFSAA::CPatcher_EnableFSAA( void )
{
	patchname = "Enable FSAA";

	addrReadFSAA = CAddr::Addr(CGameOptionMgr_ReadFSAA);
	addrReadFSAAQuality = CAddr::Addr(CGameOptionMgr_ReadFSAAQuality);

	if (!addrReadFSAA ||
        !addrReadFSAAQuality)
	{
		WriteLog("Patch initialization failed: %s.\n", patchname.c_str());
		WriteLog("   Missing dependency.\n");
		return;
	}

	vector<WORD> patch1;
	vector<WORD> backup1;
	backup1 +=
		0x89, 0x7E, 0x10,						// +3B: MOV [ESI+10h], EDI
		0x89, 0x7E, 0x14,						// +3E: MOV [ESI+14h], EDI
		0xE8, -1, -1, -1, -1,					// +41: CALL pleione::CGameOptionMgr::ReadDithering(void)
		0x8B, 0xCE,								// +46: MOV ECX, ESI
		0x88, 0x46, 0x4C,						// +48: MOV [ESI+4Ch], AL
		0xE8, -1, -1, -1, -1,					// +4B: CALL xxxxxxxx
		0x8B, 0xCE,								// +50: MOV ECX, ESI
		0x88, 0x46, 0x4D;						// +52: MOV [ESI+4Dh], AL

	patch1 +=
		0xE9, 0x01FF, 0x01FF, 0x01FF, 0x01FF,	// +3B: JMP LONG patchFSAA
		0x90,									//      NOP
		-1, -1, -1, -1, -1, -1, -1,	-1, -1, -1,
		-1, -1, -1, -1, -1,	-1, -1,	-1, -1, -1;

	MemoryPatch mp1( NULL, patch1, backup1 );
	mp1.Search( L"Pleione.dll" );
	mp1.PatchRelativeAddress( 0x01, (LPBYTE)patchFSAA );

	addrTargetReturn = mp1.GetAddr() + 6;	// Size of patch

	vector<WORD> patch2;
	vector<WORD> backup2;
	backup2 +=
		0x83, 0x4D, 0xFC, 0xFF,				// +59E: OR [EBP-04h], 0xFFFFFFFF
		0x8D, 0x4D, 0x08,					// +5A2: LEA ECX, [EBP+08h]
		0xFF, 0xD6,							// +5A5: CALL ESI
		0x8B, 0x8B, 0x1C, 0x01, 0x00, 0x00,	// +5A7: MOV ECX, [EBX+11Ch]
		0x8B, 0x01,							// +5AD: MOV EAX, [ECX]
		0x6A, 0x00,							// +5AF: PUSH 0x00
		0xFF, 0x50, 0x4C,					// +5B1: CALL DWORD PTR [EAX+4Ch]
		0x6A, 0x0B;							// +5B4: PUSH 0x0B
	patch2 +=
		-1, -1, -1, -1, -1, -1, -1, -1, -1,
		-1, -1, -1, -1, -1, -1, -1, -1,
		0x6A, 0x01,							// +5AF: PUSH 0x00 => PUSH 0x01
		-1, -1, -1, -1, -1;

	MemoryPatch mp2( NULL, patch2, backup2 );
	mp2.Search( L"Pleione.dll" );
	
	patches += mp1;
	patches += mp2;
	if (CheckPatches())
		WriteLog("Patch initialization successful: %s.\n", patchname.c_str());
	else
		WriteLog("Patch initialization failed: %s.\n", patchname.c_str());
}