Кресты / Говнокод #19853 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
  77. 77
  78. 78
  79. 79
  80. 80
  81. 81
  82. 82
  83. 83
  84. 84
  85. 85
  86. 86
  87. 87
  88. 88
  89. 89
  90. 90
  91. 91
  92. 92
  93. 93
  94. 94
  95. 95
  96. 96
  97. 97
  98. 98
  99. 99
void CScene::IncludeObjects()
{
// Reset All.
	ExcludeObjects();

// fill Vershiny of piramid...
	point3d versh[4];
	point3d eye = {IniSet.ptCamPos.x, IniSet.ptCamPos.y, IniSet.ptCamPos.z};
	Screen2World(0, 0, versh[0]);
	Screen2World(nScreenSzX, 0, versh[1]);
	Screen2World(nScreenSzX, nScreenSzY, versh[2]);
	Screen2World(0, nScreenSzY, versh[3]);

// Increase before OO...
	
	int ix, sz = parrObjs.Size();
	point3d vect;
	for(ix = 0; ix < 4; ix++){
		sub_vectors(&vect.x, &versh[ix].x, &eye.x);
		norm_vect(&vect.x);
		scale_vect(&vect.x, 200.f);
		versh[ix] = vect;
	}

// Create faces of piramid and search collision with it...
	point3d Piramid[4][3];
	Piramid[0][0] = eye;
	Piramid[1][0] = eye;
	Piramid[2][0] = eye;
	Piramid[3][0] = eye;
	Piramid[0][1] = versh[0];
	Piramid[0][2] = versh[1];
	Piramid[1][1] = versh[1];
	Piramid[1][2] = versh[2];
	Piramid[2][1] = versh[2];
	Piramid[2][2] = versh[3];
	Piramid[3][1] = versh[3];
	Piramid[3][2] = versh[0];
	
// Dyadya WALERA!!!!
	for(ix = nObjOff; ix < sz; ix++){
		CObj3d *pObj = parrObjs.e(ix);
		pObj->Transform(FALSE);
		point3d ptPos = pObj->GetPosition();

		if(IniSet.nIncludeObjectMode == WS_INCLUDE_BARYCENTER){
			point3d ptCentr = IniSet.ptCamTarget;
			point3d vtVect;
			
			sub_vectors(&vtVect.x, &ptPos.x, &ptCentr.x);

			plane plGran;
			point3d ptCross;
			for(int jx = 0; jx < 4; jx++){
				comp_plane_eqn(&plGran.a, &Piramid[jx][0].x, &Piramid[jx][1].x, &Piramid[jx][2].x);
				cross_line_plane(vtVect, &plGran.a, ptCentr, ptCross);
				float f1, f2;
				f1 = plGran.a * ptPos.x + plGran.b * ptPos.y + plGran.c * ptPos.z + plGran.d;
				f2 = plGran.a * ptCentr.x + plGran.b * ptCentr.y + plGran.c * ptCentr.z + plGran.d;
				if(f1 * f2 < 0.f){
					if(point_in_triangle(Piramid[jx][0], Piramid[jx][1], Piramid[jx][2], ptCross)){
						ptCross = ConvertPos3D(ptCross);
						if(IniSet.bMirrorH){ ptCross.y = -ptCross.y; }
						if(IniSet.bMirrorV){ ptCross.x = -ptCross.x; }
						if(IniSet.bMirrorD){ ptCross.z = -ptCross.z; }

						transform_back_point(&ptCross, &ptCross, &IniSet.mtMatr);
						pObj->ptSavedPos = ptCross;
						break;
					}
				}
			}
		}else{ // XYZ Axes.
			point3d vtXYZ[3] = {{1.f, 0.f, 0.f},
								{0.f, 1.f, 0.f},
								{0.f, 0.f, 1.f}};

			BOOL bFound = FALSE;
			for(int ax = 0; ax < 3; ax++){

				point3d vtVect;
				transform_point(&vtVect, &vtXYZ[ax], &IniSet.mtMatr);
				
				for(int jx = 0; jx < 4; jx++){
					plane plGran;
					comp_plane_eqn(&plGran.a, &Piramid[jx][0].x, &Piramid[jx][1].x, &Piramid[jx][2].x);
					
					point3d ptCentr = IniSet.ptCamTarget;

					point3d ptCross;
					cross_line_plane(vtVect, &plGran.a, ptPos, ptCross);
					float f1, f2;

					f1 = plGran.a * ptPos.x + plGran.b * ptPos.y + plGran.c * ptPos.z + plGran.d;
					f2 = plGran.a * ptCentr.x + plGran.b * ptCentr.y + plGran.c * ptCentr.z + plGran.d;

					point3d vtDif;
					sub_vectors(&vtDif.x, &ptCross.x, &IniSet.ptCamPos.x);
					if(vec_length(&vtDif.x) < 0.01f){ continue; } // avoid crossing with eye.

Гавнокод: включить все 3Д объекты в экран.

Запостил: falcoware falcoware, (Updated )

Комментарии (10) RSS

Добавить комментарий

Помни, guest, за тобой могут следить!

    А не использовать ли нам bbcode?


    8