C2DebugTess.pas
上传用户:yj_qiu
上传日期:2022-08-08
资源大小:23636k
文件大小:4k
源码类别:

游戏引擎

开发平台:

Delphi

  1. (*
  2.  @Abstract(CAST II engine debug tesselation unit)
  3.  (C) 2006 George "Mirage" Bakhtadze. <a href="http://www.casteng.com">www.casteng.com</a> <br>
  4.  Unit contains debug tesselator classes
  5. *)
  6. unit C2DebugTess;
  7. interface
  8. uses Base3D, C2Types, C2Visual, CAST2;
  9. type
  10.   TDebugTesselator = class(TTesselator)
  11.     constructor Create; override;
  12.   end;
  13.   TBoxTesselator = class(TDebugTesselator)
  14.     constructor Create; override;
  15.     function Tesselate(const Params: TTesselationParameters; VBPTR: Pointer): Integer; override;
  16.   end;
  17.   TSphereTesselator = class(TDebugTesselator)
  18.     constructor Create; override;
  19.     function Tesselate(const Params: TTesselationParameters; VBPTR: Pointer): Integer; override;
  20.   end;
  21. implementation
  22. { TDebugTesselator }
  23. constructor TDebugTesselator.Create;
  24. begin
  25.   inherited;
  26.   PrimitiveType    := ptLINESTRIP;
  27.   InitVertexFormat(GetVertexFormat(False, False, False, False, False, 0, []));
  28.   Init;
  29. end;
  30. { TBoxTesselator }
  31. constructor TBoxTesselator.Create;
  32. begin
  33.   inherited;
  34.   TotalVertices    := 16;
  35.   TotalPrimitives  := 15;
  36. end;
  37. function TBoxTesselator.Tesselate(const Params: TTesselationParameters; VBPTR: Pointer): Integer;
  38. begin
  39.   SetVertexDataC(-1, -1, -1,  0, VBPTR);
  40.   SetVertexDataC( 1, -1, -1,  1, VBPTR);
  41.   SetVertexDataC( 1,  1, -1,  2, VBPTR);
  42.   SetVertexDataC(-1,  1, -1,  3, VBPTR); 
  43.   SetVertexDataC(-1, -1, -1,  4, VBPTR); 
  44.   SetVertexDataC(-1, -1,  1,  5, VBPTR); 
  45.   SetVertexDataC( 1, -1,  1,  6, VBPTR); 
  46.   SetVertexDataC( 1,  1,  1,  7, VBPTR);
  47.   SetVertexDataC(-1,  1,  1,  8, VBPTR); 
  48.   SetVertexDataC(-1, -1,  1,  9, VBPTR); 
  49.   SetVertexDataC( 1, -1,  1, 10, VBPTR); 
  50.   SetVertexDataC( 1, -1, -1, 11, VBPTR); 
  51.   SetVertexDataC( 1,  1, -1, 12, VBPTR); 
  52.   SetVertexDataC( 1,  1,  1, 13, VBPTR); 
  53.   SetVertexDataC(-1,  1,  1, 14, VBPTR); 
  54.   SetVertexDataC(-1,  1, -1, 15, VBPTR);
  55.   TesselationStatus[tbVertex].Status := tsTesselated;
  56.   LastTotalVertices := TotalVertices;
  57.   Result            := TotalVertices;
  58. end;
  59. (*function GetSphereMesh(Center: TVector3s; Radius, Color1, Color2: Longword): TMeshTesselator;
  60. const Acc = 32;
  61. var i: Integer;
  62. begin
  63.   Result := TMeshTesselator.Create('Sphere', (Acc+1)*2, nil, 0, nil);
  64.   with Result do begin
  65.     PrimitiveType := ptLINESTRIP;
  66.     VertexFormat := GetVertexFormat(False, False, True, False, 0);
  67.     VertexSize :=  GetVertexSize(VertexFormat);
  68.     TotalPrimitives := Acc*2+1;
  69.   end;
  70.   GetMem(Result.Vertices, (Acc+1)*2*Result.VertexSize);
  71.   for i := 0 to Acc do begin
  72.     with TCDBufferType(Result.Vertices^)[i] do begin
  73.       X := Cos(i/Acc*2*pi)*Radius; Y := -Sin(i/Acc*2*pi)*Radius;
  74.       Z := Center.Z;
  75.       DColor := Color1;
  76.     end;
  77.     with TCDBufferType(Result.Vertices^)[Acc+i+1] do begin
  78.       X := Cos(i/Acc*2*pi)*Radius; Z := -Sin(i/Acc*2*pi)*Radius;
  79.       Y := Center.Y;
  80.       DColor := Color2;
  81.     end;
  82.   end;
  83. end;*)
  84. { TSphereTesselator }
  85. const Acc = 32;
  86. constructor TSphereTesselator.Create;
  87. begin
  88.   inherited;
  89.   TotalVertices    := (Acc+1)*2;
  90.   TotalPrimitives  := Acc*2+1;
  91. end;
  92. function TSphereTesselator.Tesselate(const Params: TTesselationParameters; VBPTR: Pointer): Integer;
  93. var i: Integer;
  94. begin
  95.   for i := 0 to Acc do begin
  96.     SetVertexDataC(Cos(i/Acc*2*pi), -Sin(i/Acc*2*pi), 0,  i, VBPTR);
  97.     SetVertexDataC(Cos(i/Acc*2*pi), 0, -Sin(i/Acc*2*pi),  Acc+i+1, VBPTR);
  98.   end;
  99.   TesselationStatus[tbVertex].Status := tsTesselated;
  100.   LastTotalVertices := TotalVertices;
  101.   Result            := TotalVertices;
  102. end;
  103. end.