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); }
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; }
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); }
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); }
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; }
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()); }