- procedure MakeVal (var P: TGLVector);
- // nur für die testphase, um aus den angezeigten rechtecken
- // teile rauszuschneiden. Soll nachher durch runde löcher ersetzt werden.
- begin
- if P.X = 0 then begin
- if P.Y > 0 then begin
- P.Y := P.Y - 5;
- end else begin
- P.Y := P.Y + 5;
- end;
- if P.Z > 0 then begin
- P.Z := P.Z - 5;
- end else begin
- P.Z := P.Z + 5;
- end;
- end else if P.Y = 0 then begin
- if P.X > 0 then begin
- P.X := P.X - 5;
- end else begin
- P.X := P.X + 5;
- end;
- if P.Z > 0 then begin
- P.Z := P.Z - 5;
- end else begin
- P.Z := P.Z + 5;
- end;
- end else if P.Z = 0 then begin
- if P.X > 0 then begin
- P.X := P.X - 5;
- end else begin
- P.X := P.X + 5;
- end;
- if P.Y > 0 then begin
- P.Y := P.Y - 5;
- end else begin
- P.Y := P.Y + 5;
- end;
- end;
- end;
- .
- .
- .
- glColorMask(False, False, False, False);
- glEnable(GL_STENCIL_TEST);
- glStencilFunc(GL_ALWAYS, 0, 0);
- glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
- glDisable(GL_DEPTH_TEST);
- glDisable(GL_TEXTURE_2D);
- P1 := Ecke1;
- P2 := Ecke2;
- P3 := Ecke3;
- P4 := Ecke4;
- // da, wo das quad erscheint, soll nachher nicht gezeichnet werden.
- // die abmessungen der quadrate werden so verkleinert, dass sie innerhalb
- // der auszustanzenden quadrate liegen.
- MakeVal (P1);
- MakeVal (P2);
- MakeVal (P3);
- MakeVal (P4);
- glBegin(GL_QUADS); // Start Drawing Quad
- glVertex3dv(@P1); // links unten
- glVertex3dv(@P2); // rechts unten
- glVertex3dv(@P3); // rechts oben
- glVertex3dv(@P4); // links oben
- glEnd(); // Done Drawing Quad
- glEnable(GL_TEXTURE_2D);
- glEnable(GL_DEPTH_TEST);
- glColorMask(True, True, True, True);
- glStencilFunc(GL_EQUAL, 1, 1);
- glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
- // jetzt kommen die sichtbaren quadrate. diese sind grösser als die
- // vorher gezeichneten, sollten also nur als rahmen sichtbar sein.
- glBegin(GL_QUADS);// Start Drawing Quad
- glTexCoord2d(0,0); glVertex3dv(@Ecke1); // links unten
- glTexCoord2d(TextureTileX,0); glVertex3dv(@Ecke2); // rechts unten
- glTexCoord2d(TextureTileX,TextureTileY); glVertex3dv(@Ecke3); // rechts oben
- glTexCoord2d(0,TextureTileY); glVertex3dv(@Ecke4); // links oben
- glEnd(); // Done Drawing Quad
- gldisable(GL_STENCIL_TEST);
- .
- .
- .