Einzelnen Beitrag anzeigen

Zudomon

Registriert seit: 14. Feb 2007
84 Beiträge
 
Turbo Delphi für Win32
 
#87

AW: Eigenes 3D MMORPG mit Delphi möglich?

  Alt 30. Mär 2015, 20:21
Bisher ist da noch kein Zufall mit drin... d.h. es wird wirklich nur ein einziges Objekt erstellt.
Das Ergebnis wird hinterher in ein Geometrieobjekt umgewandelt und zum Rendern bereitgestellt.
TGeoBase ist in der Tat ein Record. Unterdessen benutze ich aber schon einige Klassen.

Delphi-Quellcode:
function crtMushroom: TGeoBase;
var
  i, i2, j: Integer;
  lp: Integer;
  c: TVecArray;
  cc: Integer;
  s: Integer;
  m: TMatrix;
  v: TVec;
  gb, gb2: TGeoBase;
begin
  Result.Clear;

  s:=16;

  SetLength(c, 7);
  c[0]:=Vec(0,-0.1,0);
  c[1]:=Vec(-0.15,0,0);
  c[2]:=Vec(-0.175,0.15,0);
  c[3]:=Vec(-0.225,0.4,0);
  c[4]:=Vec(-0.175,0.8,0);
  c[5]:=Vec(-0.15,1.2,0);
  c[6]:=Vec(-0.15,1.3,0);

  gb.Clear;
  gb.Modifier_ExtrudeLattice(c, s);
  gb.Modifier_TransformTex0(MatOff(MatScl(0.99), Vec(0.5, 0.5)));
  gb.Modifier_MapAtlas(2, 2, 1, 0);
  gb.Modifier_SmoothGrp(1);
  Result.add(gb);

  SetLength(c, 4);
  c[0]:=Vec(-0.15,1.3,0);
  c[1]:=Vec(-0.16,1.3,0);
  c[2]:=Vec(-0.6,1.3,0);
  c[3]:=Vec(-0.9,0.9,0);

  gb.Clear;
  gb.Modifier_ExtrudeLattice(c, s);
  gb.Modifier_TransformTex0(MatScl(1,0.02,1));
  gb.Modifier_SmoothGrp(2);
  gb.Modifier_TransformTex0(MatOff(MatScl(0.99), Vec(0.5, 0.5)));
  gb.Modifier_MapAtlas(2, 2, 0, 1);
  Result.add(gb);

  SetLength(c, 4);
  c[0]:=Vec(-0.9,0.9,0);
  c[1]:=Vec(-0.8,1.3,0);
  c[2]:=Vec(-0.3,1.6,0);
  c[3]:=Vec( 0.0,1.6,0);

  gb.Clear;
  gb.Modifier_ExtrudeLattice(c, s);
  gb.Modifier_SmoothGrp(4);
  Result.add(gb);

  Result.Modifier_Weld(lt_Position);
  Result.Modifier_Subdivide(1, true, false);
  Result.Modifier_Noise2(MatScl(1,0.2,1), Vec(0.5,1,0.5)*0.5, 4);
  Result.Modifier_Subdivide(1, true, false);

  gb_Sel:=st_Intersect;
  lp:=Result.FindLayer(lt_Position);
  Result.Layer[lp].SelP_Clear;
  Result.Layer[lp].SelP_ByGrp(4);

  gb:=CutGeoBase_SelP(Result);
  gb.Modifier_MapPlanar(MatScl(0.59)*MatRotX(pi/2)*MatPos(0.5, 0.5, 0));
  gb.Modifier_MapAtlas(2, 2, 0, 0);
  Result.add(gb);

  SetLength(c, 3);
  c[0]:=Vec( 0,1.0,0);
  c[1]:=Vec(-0.3,0.95,0);
  c[2]:=Vec(-0.45,0.7,0);

  gb.Clear;
  gb.Modifier_ExtrudeLattice(c, s);
  gb.Modifier_SmoothGrp(1);

  SetLength(c, 3);
  c[0]:=Vec(-0.45,0.7,0);
  c[1]:=Vec(-0.3,0.95,0);
  c[2]:=Vec( 0,1.05,0);

  gb2.Clear;
  gb2.Modifier_ExtrudeLattice(c, s);
  gb2.Modifier_SmoothGrp(2);
  gb.add(gb2);

  gb.Modifier_TransformTex0(MatScl(1,0.02,1));
  gb.Modifier_Weld(lt_Position);
  gb.Modifier_Subdivide(1, true, false);
  gb.Modifier_Noise2(MatScl(3), Vec(0.5,1,0.5)*0.5, 4);
  gb.Modifier_Subdivide(1, true, false);
  gb.Modifier_TransformTex0(MatOff(MatScl(0.99), Vec(0.5, 0.5)));
  gb.Modifier_MapAtlas(2, 2, 0, 1);

  Result.add(gb);
end;
  Mit Zitat antworten Zitat