Autor Beitrag
seawolf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20

WinXP SP1
Delphi 6/7
BeitragVerfasst: Mi 29.11.06 22:25 
Hi diese Unit (koerper_draw.pas) hab ich aus Langerweile in der Berufsschule geschrieben und weil mir des Körper zeichnen zu umständlich war.

In dieser unit verwende ich den DGLOpenGl Header welchen ihr unter www.delphigl.com saugen könnt.
Sollte der Header gegebenenfalls nicht mehr funktionieren (z.B.: durch Aktualisierung) kann ich euch auch gern die Version des Headers schicken die ich jetzt verwende.

die Proceduren zum erstellen der Körper sind alle in der Klasse "koerper" unter gebracht.

Die Variablen "height", "width", "deep" sidn für "Höhe", "Breite", "Länge" (z-Achse) des Körpers.
Die Variable "diffi" (kommt z.b. beim Trapez vor) bestimmt das einrücken mancher punkte.
Diese Variablen sind single Werte und werden in OpenGl Standart angegeben.


eckpunkte eines quadrates x,y,z: (0,0,0); (0.5,0,0); (0.5,0.5,0); (0,0.5,0);

parallelogram mit selbigen punkten + "diffi" (0,0,0); (0.5,0,0); (0.5,0.5,0); (0,0.5,0); (0.2);
das parallelogramm wird nun an folgenden koordinaten gezeichnet:
(0,0,0); (0.5,0,0); (0.3,0.5,0); (-0.2,0.5,0);



kurze Übersicht der Körper die ihr damit einfach zeichnen könnt:

Würfel
Quader
Pyramide
Pyramidenstumpf
Trapez-Körper
Parallelogramm-Körper

Kugel
Kegel
Zylinder




ihr könnt auch Flächen zeichnen...

Quadrat
Rechteck
Dreieck
Trapez
Parallelogramm





mit Kommentaren bin ich noch relativ unbeholfen, daher ist sie wahrscheinlich eher schlecht als recht kommentiert.
Ich arbeite weiter und versuche noch andere Körper hinzuzufügen.




Über euer feedback würdsch mich sehr freuen

Greetz
Seawolf
Einloggen, um Attachments anzusehen!
seawolf Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20

WinXP SP1
Delphi 6/7
BeitragVerfasst: Fr 08.12.06 11:48 
So eine Woche ists nun her ^^

Hab kaum noch Ideen für neue Körper, welche fallen euch noch ein?
Will die Unit später ma für son kleines Game verwenden fällt euch noch was ein um die Performance zu verbessern?
Da berechnungen allgemein sehr Rechenaufwendig sind sollt ich die besser in ner extra Procedure auslagern un dann irgendwie die errechneten Werte in nen dyn Array schreiben?

Für alle die sich die Unit nicht loaden wollen hier gleich ma der code:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
284:
285:
286:
287:
288:
289:
290:
291:
292:
293:
294:
295:
296:
297:
298:
299:
300:
301:
302:
303:
304:
305:
306:
307:
308:
309:
310:
311:
312:
313:
314:
315:
316:
317:
318:
319:
320:
321:
322:
323:
324:
325:
326:
327:
328:
329:
330:
331:
332:
333:
334:
335:
336:
337:
338:
339:
340:
341:
342:
343:
344:
345:
346:
347:
348:
349:
350:
351:
352:
353:
354:
355:
356:
357:
358:
359:
360:
361:
362:
363:
364:
365:
366:
367:
368:
369:
370:
371:
372:
373:
374:
375:
376:
377:
378:
379:
380:
381:
382:
383:
384:
385:
386:
387:
388:
389:
390:
391:
392:
393:
394:
395:
396:
397:
398:
399:
400:
401:
402:
403:
404:
405:
406:
407:
408:
409:
410:
411:
412:
413:
414:
415:
416:
417:
418:
419:
420:
421:
422:
423:
424:
425:
426:
427:
428:
429:
430:
431:
432:
433:
434:
435:
436:
437:
438:
439:
440:
441:
442:
443:
444:
445:
446:
447:
448:
449:
450:
451:
452:
453:
454:
455:
456:
457:
458:
459:
460:
461:
462:
463:
464:
465:
466:
467:
468:
469:
470:
471:
472:
473:
474:
475:
476:
477:
478:
479:
480:
481:
482:
483:
484:
485:
486:
487:
488:
489:
490:
491:
492:
493:
494:
495:
496:
497:
498:
499:
500:
501:
502:
503:
504:
505:
506:
507:
508:
509:
510:
511:
512:
513:
514:
515:
516:
517:
518:
519:
520:
521:
522:
523:
524:
525:
526:
527:
528:
529:
530:
531:
532:
533:
534:
535:
536:
537:
538:
539:
540:
541:
542:
543:
544:
545:
546:
547:
548:
549:
550:
551:
552:
553:
554:
555:
556:
557:
558:
559:
560:
561:
562:
563:
564:
565:
566:
567:
568:
569:
570:
571:
572:
573:
574:
575:
576:
577:
578:
579:
580:
581:
582:
583:
584:
585:
586:
587:
588:
589:
590:
591:
592:
593:
594:
595:
596:
597:
598:
599:
600:
601:
602:
603:
604:
605:
606:
607:
608:
609:
610:
611:
612:
613:
614:
615:
616:
617:
618:
619:
620:
621:
622:
623:
624:
625:
626:
627:
628:
629:
630:
631:
632:
633:
634:
635:
636:
637:
638:
639:
640:
641:
642:
643:
644:
645:
646:
647:
648:
649:
650:
651:
652:
653:
654:
655:
656:
657:
658:
659:
660:
661:
662:
663:
664:
665:
666:
667:
668:
669:
670:
671:
672:
673:
674:
675:
676:
677:
678:
679:
680:
681:
682:
683:
684:
685:
686:
687:
688:
689:
690:
691:
692:
693:
694:
695:
696:
697:
698:
699:
700:
701:
702:
703:
704:
705:
706:
707:
708:
709:
710:
711:
712:
713:
714:
715:
716:
717:
718:
719:
720:
721:
722:
723:
724:
725:
726:
727:
728:
729:
730:
731:
732:
733:
734:
735:
736:
737:
738:
739:
740:
741:
742:
743:
744:
745:
746:
747:
748:
749:
750:
751:
752:
753:
754:
755:
756:
757:
758:
759:
760:
761:
762:
763:
764:
765:
766:
767:
768:
769:
770:
771:
772:
773:
774:
775:
776:
777:
778:
779:
780:
781:
782:
783:
784:
785:
786:
787:
788:
789:
790:
791:
792:
793:
794:
795:
796:
797:
798:
799:
800:
801:
802:
803:
804:
805:
806:
807:
808:
809:
810:
811:
812:
813:
814:
815:
816:
817:
818:
819:
820:
821:
822:
823:
824:
825:
826:
827:
828:
829:
830:
831:
832:
833:
834:
835:
836:
837:
838:
839:
840:
841:
842:
843:
844:
845:
846:
847:
848:
849:
850:
851:
852:
853:
854:
855:
856:
857:
858:
859:
860:
861:
862:
863:
864:
865:
866:
867:
868:
869:
870:
871:
872:
873:
874:
875:
876:
877:
878:
879:
880:
881:
882:
883:
884:
885:
886:
887:
888:
889:
890:
891:
892:
893:
894:
895:
896:
897:
898:
899:
900:
901:
902:
903:
904:
905:
906:
907:
unit koerper_draw;

interface

uses dglopengl;

type koerper = class

 private

 public
  //FLÄCHEN
  procedure quad(site_length:single);          // zeichnet quadrat auf den coordinaten ursprung - angaben in ogl-standarteinheiten
  procedure rectangle(width,height:single);     // zeichnet rechteck auf den coordinaten ursprung - angaben in ogl-standarteinheiten
  procedure triangle(width,height:single);      //zeichnet triangel auf den coordinaten urpsrung - angaben in ogl-standarteinheiten
  procedure trapez(width,height,diffi:single);      //zeichnet trapez auf den coordinaten urpsrung - angaben in ogl-standarteinheiten
  procedure parallelogramm_quad(site_length,diffi:single); //zeichnet parallelogramm quadrats auf den coordinaten urpsrung - angaben in ogl-standarteinheiten
  procedure parallelogramm_rect(width,height,diffi:single); //zeichnet parallelogramm rechtecks auf den coordinaten urpsrung - angaben in ogl-standarteinheiten

  //EINFACHE KÖRPER
  procedure wuerfel(site_length:single);       //zeichnet wuerfel auf den coordinaten urpsrung - angaben in ogl-standarteinheiten
  procedure quader(width,height,deep:single);  //zeichnet quader um den koordinaten ursprung - angaben in ogl-standarteinheiten
  procedure pyramid(width,height,deep:single);  //zeichnet pyramide um den koordinaten ursprung - angaben in ogl-standarteinheiten
  procedure trapez_koerper(width,height,deep,diffi:single); //zeichnet trapez koerper um den koordinaten ursprung - angaben in ogl-standarteinheiten
  procedure pyramid_teil(width,height,deep,diffi:single); //zeichnet pyramidenteil um den koordinaten ursprung - angaben in ogl-standarteinheiten
  procedure koerp_para_quad(site_length,diffi:single); //zeichnet koeerper parallelogramm quadrats auf den coordinaten urpsrung - angaben in ogl-standarteinheiten
  procedure koerp_para_rect(width,height,deep,diffi:single); //zeichnet koerper parallelogramm rechtecks auf den coordinaten urpsrung - angaben in ogl-standarteinheiten

  //DACH KÖRPER
  procedure dach(width,height,deep:single);  //zeichnet dach um den koordinaten ursprung - angaben in ogl-standarteinheiten
  procedure dach_trapez(width,height,deep,diffi:single);  //zeichnet dach als trapez um den koordinaten ursprung - angaben in ogl-standarteinheiten

  //NO FRONT / BACK KÖRPER
  procedure wuerfel_noFrontBack(site_length:single);  //zeichnet wuerfel ohen Front- und Hinterteil um den koordinaten ursprung - angaben in ogl-standarteinheiten
  procedure quader_noFrontBack(width,height,deep:single);  //zeichnet quader ohen Front- und Hinterteil um den koordinaten ursprung - angaben in ogl-standarteinheiten
  procedure pyramid_noFrontBack(width,height,deep:single);
  procedure trapezkoerp_noFrontBack(width,height,deep,diffi:single);
  procedure pyramidteil_noFrontBack(width,height,deep,diffi:single);
  procedure para_quad_noFrontBack(site_length,diffi:single);
  procedure para_rect_noFrontBack(width,height,deep,diffi:single);

  //KUGEL / KEGEL / CYLINDER / ANDERE RUNDE DINGER
  function create_pgluquadric:pgluquadric; //gibt ein neues pegluquadric zurück
  procedure Kegel(quadric:pgluquadric;base_radius,height:single);//zeichnet einen Kegel um den koordinaten ursprung - angaben in ogl-standarteinheiten
  procedure cylinder(quadric:pgluquadric;radius,height:single);//zeichnet einen zylinder um den koordinatenurpsrung - angaben in ogl-standarteinheiten
  procedure Kugel(quadric:pgluquadric;radius:single);//zeichnet eine Kugel um den koordinatenurpsrung - angaben in ogl-standarteinheiten
 end;

implementation



///FLÄCHEN///


 procedure koerper.quad(site_length:single);
 begin
  glbegin(gl_quads);
   gltexcoord2f(1,0); glvertex3f(0-(site_length / 2),0+(site_length /2),0);
   gltexcoord2f(1,1); glvertex3f(0+(site_length / 2),0+(site_length /2),0);
   gltexcoord2f(0,1); glvertex3f(0+(site_length / 2),0-(site_length /2),0);
   gltexcoord2f(0,0); glvertex3f(0-(site_length / 2),0-(site_length /2),0);
  glend;
 end;




 procedure koerper.rectangle(width,height:single);
 begin
  glbegin(gl_quads);
   gltexcoord2f(0,0); glvertex3f(0-(width / 2),0+(height /2),0);
   gltexcoord2f(0,1); glvertex3f(0+(width / 2),0+(height /2),0);
   gltexcoord2f(1,1); glvertex3f(0+(width / 2),0-(height /2),0);
   gltexcoord2f(1,0); glvertex3f(0-(width / 2),0-(height /2),0);
  glend;
 end;





 procedure koerper.triangle(width,height:single);
 begin
  glbegin(gl_triangles);
   gltexcoord2f(0,1); glvertex3f(0+(width / 2),0-(height /2),0);
   gltexcoord2f(0,0); glvertex3f(0-(width / 2),0-(height /2),0);
   gltexcoord2f(1,1); glvertex3f(0,0+(height /2),0);
  glend;
 end;




 procedure koerper.trapez(width,height,diffi:single);   //diffi gibt die einrückung der oberen 2 Punkte an
 begin
  glbegin(gl_quads);
   gltexcoord2f(1,0); glvertex3f(0-(width / 2)+diffi,0+(height /2),0);
   gltexcoord2f(1,1); glvertex3f(0+(width / 2)-diffi,0+(height /2),0);
   gltexcoord2f(0,1); glvertex3f(0+(width / 2),0-(height /2),0);
   gltexcoord2f(0,0); glvertex3f(0-(width / 2),0-(height /2),0);
  glend;
 end;




 procedure koerper.parallelogramm_quad(site_length,diffi:single);
 begin
  glbegin(gl_quads);
   gltexcoord2f(1,0); glvertex3f(0-(site_length / 2)-(diffi/2),0+(site_length /2),0);
   gltexcoord2f(1,1); glvertex3f(0+(site_length / 2)-(diffi/2),0+(site_length /2),0);
   gltexcoord2f(0,1); glvertex3f(0+(site_length / 2)+(diffi/2),0-(site_length /2),0);
   gltexcoord2f(0,0); glvertex3f(0-(site_length / 2)+(diffi/2),0-(site_length /2),0);
  glend;
 end;






 procedure koerper.parallelogramm_rect(width,height,diffi:single);
 begin
  glbegin(gl_quads);
   gltexcoord2f(0,0); glvertex3f(0-(width / 2)-(diffi/2),0+(height /2),0);
   gltexcoord2f(0,1); glvertex3f(0+(width / 2)-(diffi/2),0+(height /2),0);
   gltexcoord2f(1,1); glvertex3f(0+(width / 2)+(diffi/2),0-(height /2),0);
   gltexcoord2f(1,0); glvertex3f(0-(width / 2)+(diffi/2),0-(height /2),0);
  glend;
 end;






///KÖRPER///

 procedure koerper.wuerfel(site_length:single);
 begin
  //front
  glbegin(gl_quads);
   gltexcoord2f(1,0); glvertex3f(0-(site_length / 2),0+(site_length /2),0+(site_length /2));
   gltexcoord2f(1,1); glvertex3f(0+(site_length / 2),0+(site_length /2),0+(site_length /2));
   gltexcoord2f(0,1); glvertex3f(0+(site_length / 2),0-(site_length /2),0+(site_length /2));
   gltexcoord2f(0,0); glvertex3f(0-(site_length / 2),0-(site_length /2),0+(site_length /2));
  glend;

  //rechts
  glbegin(gl_quads);
   gltexcoord2f(1,0); glvertex3f(0+(site_length / 2),0+(site_length /2),0+(site_length /2));
   gltexcoord2f(1,1); glvertex3f(0+(site_length / 2),0+(site_length /2),0-(site_length /2));
   gltexcoord2f(0,1); glvertex3f(0+(site_length / 2),0-(site_length /2),0-(site_length /2));
   gltexcoord2f(0,0); glvertex3f(0+(site_length / 2),0-(site_length /2),0+(site_length /2));
  glend;

  //back
  glbegin(gl_quads);
   gltexcoord2f(0,0); glvertex3f(0-(site_length / 2),0-(site_length /2),0-(site_length /2));
   gltexcoord2f(0,1); glvertex3f(0+(site_length / 2),0-(site_length /2),0-(site_length /2));
   gltexcoord2f(1,1); glvertex3f(0+(site_length / 2),0+(site_length /2),0-(site_length /2));
   gltexcoord2f(1,0); glvertex3f(0-(site_length / 2),0+(site_length /2),0-(site_length /2));
  glend;

  //links
  glbegin(gl_quads);
   gltexcoord2f(0,0); glvertex3f(0-(site_length / 2),0-(site_length /2),0+(site_length /2));
   gltexcoord2f(0,1); glvertex3f(0-(site_length / 2),0-(site_length /2),0-(site_length /2));
   gltexcoord2f(1,1); glvertex3f(0-(site_length / 2),0+(site_length /2),0-(site_length /2));
   gltexcoord2f(1,0); glvertex3f(0-(site_length / 2),0+(site_length /2),0+(site_length /2));
  glend;

  //oben
  glbegin(gl_quads);
   gltexcoord2f(1,0); glvertex3f(0-(site_length / 2),0+(site_length /2),0-(site_length /2));
   gltexcoord2f(1,1); glvertex3f(0+(site_length / 2),0+(site_length /2),0-(site_length /2));
   gltexcoord2f(0,1); glvertex3f(0+(site_length / 2),0+(site_length /2),0+(site_length /2));
   gltexcoord2f(0,0); glvertex3f(0-(site_length / 2),0+(site_length /2),0+(site_length /2));
  glend;

  //unten
  glbegin(gl_quads);
   gltexcoord2f(0,0); glvertex3f(0-(site_length / 2),0-(site_length /2),0+(site_length /2));
   gltexcoord2f(0,1); glvertex3f(0+(site_length / 2),0-(site_length /2),0+(site_length /2));
   gltexcoord2f(1,1); glvertex3f(0+(site_length / 2),0-(site_length /2),0-(site_length /2));
   gltexcoord2f(1,0); glvertex3f(0-(site_length / 2),0-(site_length /2),0-(site_length /2));
  glend;
 end;





 procedure koerper.quader(width,height,deep:single);
 begin
  //front
  glbegin(gl_quads);
   gltexcoord2f(1,0); glvertex3f(0-(width / 2),0+(height /2),0+(deep /2));
   gltexcoord2f(1,1); glvertex3f(0+(width / 2),0+(height /2),0+(deep /2));
   gltexcoord2f(0,1); glvertex3f(0+(width / 2),0-(height /2),0+(deep /2));
   gltexcoord2f(0,0); glvertex3f(0-(width / 2),0-(height /2),0+(deep /2));
  glend;

  //rechts
  glbegin(gl_quads);
   gltexcoord2f(1,0); glvertex3f(0+(width / 2),0+(height /2),0+(deep /2));
   gltexcoord2f(1,1); glvertex3f(0+(width / 2),0+(height /2),0-(deep /2));
   gltexcoord2f(0,1); glvertex3f(0+(width / 2),0-(height /2),0-(deep /2));
   gltexcoord2f(0,0); glvertex3f(0+(width / 2),0-(height /2),0+(deep /2));
  glend;

  //back
  glbegin(gl_quads);
   gltexcoord2f(0,0); glvertex3f(0-(width / 2),0-(height /2),0-(deep /2));
   gltexcoord2f(0,1); glvertex3f(0+(width / 2),0-(height /2),0-(deep /2));
   gltexcoord2f(1,1); glvertex3f(0+(width / 2),0+(height /2),0-(deep /2));
   gltexcoord2f(1,0); glvertex3f(0-(width / 2),0+(height /2),0-(deep /2));
  glend;

  //links
  glbegin(gl_quads);
   gltexcoord2f(0,0); glvertex3f(0-(width / 2),0-(height /2),0+(deep /2));
   gltexcoord2f(0,1); glvertex3f(0-(width / 2),0-(height /2),0-(deep /2));
   gltexcoord2f(1,1); glvertex3f(0-(width / 2),0+(height /2),0-(deep /2));
   gltexcoord2f(1,0); glvertex3f(0-(width / 2),0+(height /2),0+(deep /2));
  glend;

  //oben
  glbegin(gl_quads);
   gltexcoord2f(1,0); glvertex3f(0-(width / 2),0+(height /2),0-(deep /2));
   gltexcoord2f(1,1); glvertex3f(0+(width / 2),0+(height /2),0-(deep /2));
   gltexcoord2f(0,1); glvertex3f(0+(width / 2),0+(height /2),0+(deep /2));
   gltexcoord2f(0,0); glvertex3f(0-(width / 2),0+(height /2),0+(deep /2));
  glend;

  //unten
  glbegin(gl_quads);
   gltexcoord2f(0,0); glvertex3f(0-(width / 2),0-(height /2),0+(deep /2));
   gltexcoord2f(0,1); glvertex3f(0+(width / 2),0-(height /2),0+(deep /2));
   gltexcoord2f(1,1); glvertex3f(0+(width / 2),0-(height /2),0-(deep /2));
   gltexcoord2f(1,0); glvertex3f(0-(width / 2),0-(height /2),0-(deep /2));
  glend;
 end;





 procedure koerper.pyramid(width,height,deep:single);
 begin
  //base quader
  glbegin(gl_quads);
   gltexcoord2f(0,0); glvertex3f(0-(width / 2),0-(height /2),0+(deep /2));
   gltexcoord2f(0,1); glvertex3f(0+(width / 2),0-(height /2),0+(deep /2));
   gltexcoord2f(1,1); glvertex3f(0+(width / 2),0-(height /2),0-(deep /2));
   gltexcoord2f(1,0); glvertex3f(0-(width / 2),0-(height /2),0-(deep /2));
  glend;

  //front
  glbegin(gl_triangles);
   gltexcoord2f(1,1); glvertex3f(0,0+(height /2),0);
   gltexcoord2f(0,1); glvertex3f(0+(width / 2),0-(height /2),0+(deep /2));
   gltexcoord2f(0,0); glvertex3f(0-(width / 2),0-(height /2),0+(deep /2));
  glend;

  //rechts
  glbegin(gl_triangles);
   gltexcoord2f(1,1); glvertex3f(0,0+(height /2),0);
   gltexcoord2f(0,1); glvertex3f(0+(width / 2),0-(height /2),0-(deep /2));
   gltexcoord2f(0,0); glvertex3f(0+(width / 2),0-(height /2),0+(deep /2));
  glend;

  //back
  glbegin(gl_triangles);
   gltexcoord2f(1,1); glvertex3f(0,0+(height /2),0);
   gltexcoord2f(0,1); glvertex3f(0-(width / 2),0-(height /2),0-(deep /2));
   gltexcoord2f(0,0); glvertex3f(0+(width / 2),0-(height /2),0-(deep /2));
  glend;

  //links
  glbegin(gl_triangles);
   gltexcoord2f(1,1); glvertex3f(0,0+(height /2),0);
   gltexcoord2f(0,1); glvertex3f(0-(width / 2),0-(height /2),0+(deep /2));
   gltexcoord2f(0,0); glvertex3f(0-(width / 2),0-(height /2),0-(deep /2));
  glend;
 end;





 procedure koerper.trapez_koerper(width,height,deep,diffi:single);
 begin
  //front
  glbegin(gl_quads);
   gltexcoord2f(1,0); glvertex3f(0-(width / 2)+diffi,0+(height /2),0+(deep /2));
   gltexcoord2f(1,1); glvertex3f(0+(width / 2)-diffi,0+(height /2),0+(deep /2));
   gltexcoord2f(0,1); glvertex3f(0+(width / 2),0-(height /2),0+(deep /2));
   gltexcoord2f(0,0); glvertex3f(0-(width / 2),0-(height /2),0+(deep /2));
  glend;

  //rechts
  glbegin(gl_quads);
   gltexcoord2f(1,0); glvertex3f(0+(width / 2)-diffi,0+(height /2),0+(deep /2));
   gltexcoord2f(1,1); glvertex3f(0+(width / 2)-diffi,0+(height /2),0-(deep /2));
   gltexcoord2f(0,1); glvertex3f(0+(width / 2),0-(height /2),0-(deep /2));
   gltexcoord2f(0,0); glvertex3f(0+(width / 2),0-(height /2),0+(deep /2));
  glend;

  //back
  glbegin(gl_quads);
   gltexcoord2f(0,0); glvertex3f(0-(width / 2),0-(height /2),0-(deep /2));
   gltexcoord2f(0,1); glvertex3f(0+(width / 2),0-(height /2),0-(deep /2));
   gltexcoord2f(1,1); glvertex3f(0+(width / 2)-diffi,0+(height /2),0-(deep /2));
   gltexcoord2f(1,0); glvertex3f(0-(width / 2)+diffi,0+(height /2),0-(deep /2));
  glend;

  //links
  glbegin(gl_quads);
   gltexcoord2f(0,0); glvertex3f(0-(width / 2),0-(height /2),0+(deep /2));
   gltexcoord2f(0,1); glvertex3f(0-(width / 2),0-(height /2),0-(deep /2));
   gltexcoord2f(1,1); glvertex3f(0-(width / 2)+diffi,0+(height /2),0-(deep /2));
   gltexcoord2f(1,0); glvertex3f(0-(width / 2)+diffi,0+(height /2),0+(deep /2));
  glend;

  //oben
  glbegin(gl_quads);
   gltexcoord2f(1,0); glvertex3f(0-(width / 2)+diffi,0+(height /2),0-(deep /2));
   gltexcoord2f(1,1); glvertex3f(0+(width / 2)-diffi,0+(height /2),0-(deep /2));
   gltexcoord2f(0,1); glvertex3f(0+(width / 2)-diffi,0+(height /2),0+(deep /2));
   gltexcoord2f(0,0); glvertex3f(0-(width / 2)+diffi,0+(height /2),0+(deep /2));
  glend;

  //unten
  glbegin(gl_quads);
   gltexcoord2f(0,0); glvertex3f(0-(width / 2),0-(height /2),0+(deep /2));
   gltexcoord2f(0,1); glvertex3f(0+(width / 2),0-(height /2),0+(deep /2));
   gltexcoord2f(1,1); glvertex3f(0+(width / 2),0-(height /2),0-(deep /2));
   gltexcoord2f(1,0); glvertex3f(0-(width / 2),0-(height /2),0-(deep /2));
  glend;
 end;





 procedure koerper.pyramid_teil(width,height,deep,diffi:single);
 begin
  //front
  glbegin(gl_quads);
   gltexcoord2f(1,0); glvertex3f(0-(width / 2)+diffi,0+(height /2),0+(deep /2)-diffi);
   gltexcoord2f(1,1); glvertex3f(0+(width / 2)-diffi,0+(height /2),0+(deep /2)-diffi);
   gltexcoord2f(0,1); glvertex3f(0+(width / 2),0-(height /2),0+(deep /2));
   gltexcoord2f(0,0); glvertex3f(0-(width / 2),0-(height /2),0+(deep /2));
  glend;

  //rechts
  glbegin(gl_quads);
   gltexcoord2f(1,0); glvertex3f(0+(width / 2)-diffi,0+(height /2),0+(deep /2)-diffi);
   gltexcoord2f(1,1); glvertex3f(0+(width / 2)-diffi,0+(height /2),0-(deep /2)+diffi);
   gltexcoord2f(0,1); glvertex3f(0+(width / 2),0-(height /2),0-(deep /2));
   gltexcoord2f(0,0); glvertex3f(0+(width / 2),0-(height /2),0+(deep /2));
  glend;

  //back
  glbegin(gl_quads);
   gltexcoord2f(0,0); glvertex3f(0-(width / 2),0-(height /2),0-(deep /2));
   gltexcoord2f(0,1); glvertex3f(0+(width / 2),0-(height /2),0-(deep /2));
   gltexcoord2f(1,1); glvertex3f(0+(width / 2)-diffi,0+(height /2),0-(deep /2)+diffi);
   gltexcoord2f(1,0); glvertex3f(0-(width / 2)+diffi,0+(height /2),0-(deep /2)+diffi);
  glend;

  //links
  glbegin(gl_quads);
   gltexcoord2f(0,0); glvertex3f(0-(width / 2),0-(height /2),0+(deep /2));
   gltexcoord2f(0,1); glvertex3f(0-(width / 2),0-(height /2),0-(deep /2));
   gltexcoord2f(1,1); glvertex3f(0-(width / 2)+diffi,0+(height /2),0-(deep /2)+diffi);
   gltexcoord2f(1,0); glvertex3f(0-(width / 2)+diffi,0+(height /2),0+(deep /2)-diffi);
  glend;

  //oben
  glbegin(gl_quads);
   gltexcoord2f(1,0); glvertex3f(0-(width / 2)+diffi,0+(height /2),0-(deep /2)+diffi);
   gltexcoord2f(1,1); glvertex3f(0+(width / 2)-diffi,0+(height /2),0-(deep /2)+diffi);
   gltexcoord2f(0,1); glvertex3f(0+(width / 2)-diffi,0+(height /2),0+(deep /2)-diffi);
   gltexcoord2f(0,0); glvertex3f(0-(width / 2)+diffi,0+(height /2),0+(deep /2)-diffi);
  glend;

  //unten
  glbegin(gl_quads);
   gltexcoord2f(0,0); glvertex3f(0-(width / 2),0-(height /2),0+(deep /2));
   gltexcoord2f(0,1); glvertex3f(0+(width / 2),0-(height /2),0+(deep /2));
   gltexcoord2f(1,1); glvertex3f(0+(width / 2),0-(height /2),0-(deep /2));
   gltexcoord2f(1,0); glvertex3f(0-(width / 2),0-(height /2),0-(deep /2));
  glend;
 end;





 procedure koerper.koerp_para_quad(site_length,diffi:single);
 begin
  //front
  glbegin(gl_quads);
   gltexcoord2f(1,0); glvertex3f(0-(site_length / 2)-(diffi/2),0+(site_length /2),0+(site_length /2));
   gltexcoord2f(1,1); glvertex3f(0+(site_length / 2)-(diffi/2),0+(site_length /2),0+(site_length /2));
   gltexcoord2f(0,1); glvertex3f(0+(site_length / 2)+(diffi/2),0-(site_length /2),0+(site_length /2));
   gltexcoord2f(0,0); glvertex3f(0-(site_length / 2)+(diffi/2),0-(site_length /2),0+(site_length /2));
  glend;

  //rechts
  glbegin(gl_quads);
   gltexcoord2f(1,0); glvertex3f(0+(site_length / 2)-(diffi/2),0+(site_length /2),0+(site_length /2));
   gltexcoord2f(1,1); glvertex3f(0+(site_length / 2)-(diffi/2),0+(site_length /2),0-(site_length /2));
   gltexcoord2f(0,1); glvertex3f(0+(site_length / 2)+(diffi/2),0-(site_length /2),0-(site_length /2));
   gltexcoord2f(0,0); glvertex3f(0+(site_length / 2)+(diffi/2),0-(site_length /2),0+(site_length /2));
  glend;

  //back
  glbegin(gl_quads);
   gltexcoord2f(0,0); glvertex3f(0-(site_length / 2)+(diffi/2),0-(site_length /2),0-(site_length /2));
   gltexcoord2f(0,1); glvertex3f(0+(site_length / 2)+(diffi/2),0-(site_length /2),0-(site_length /2));
   gltexcoord2f(1,1); glvertex3f(0+(site_length / 2)-(diffi/2),0+(site_length /2),0-(site_length /2));
   gltexcoord2f(1,0); glvertex3f(0-(site_length / 2)-(diffi/2),0+(site_length /2),0-(site_length /2));
  glend;

  //links
  glbegin(gl_quads);
   gltexcoord2f(0,0); glvertex3f(0-(site_length / 2)+(diffi/2),0-(site_length /2),0+(site_length /2));
   gltexcoord2f(0,1); glvertex3f(0-(site_length / 2)+(diffi/2),0-(site_length /2),0-(site_length /2));
   gltexcoord2f(1,1); glvertex3f(0-(site_length / 2)-(diffi/2),0+(site_length /2),0-(site_length /2));
   gltexcoord2f(1,0); glvertex3f(0-(site_length / 2)-(diffi/2),0+(site_length /2),0+(site_length /2));
  glend;

  //oben
  glbegin(gl_quads);
   gltexcoord2f(1,0); glvertex3f(0-(site_length / 2)-(diffi/2),0+(site_length /2),0-(site_length /2));
   gltexcoord2f(1,1); glvertex3f(0+(site_length / 2)-(diffi/2),0+(site_length /2),0-(site_length /2));
   gltexcoord2f(0,1); glvertex3f(0+(site_length / 2)-(diffi/2),0+(site_length /2),0+(site_length /2));
   gltexcoord2f(0,0); glvertex3f(0-(site_length / 2)-(diffi/2),0+(site_length /2),0+(site_length /2));
  glend;

  //unten
  glbegin(gl_quads);
   gltexcoord2f(0,0); glvertex3f(0-(site_length / 2)+(diffi/2),0-(site_length /2),0+(site_length /2));
   gltexcoord2f(0,1); glvertex3f(0+(site_length / 2)+(diffi/2),0-(site_length /2),0+(site_length /2));
   gltexcoord2f(1,1); glvertex3f(0+(site_length / 2)+(diffi/2),0-(site_length /2),0-(site_length /2));
   gltexcoord2f(1,0); glvertex3f(0-(site_length / 2)+(diffi/2),0-(site_length /2),0-(site_length /2));
  glend;
 end;




 procedure koerper.koerp_para_rect(width,height,deep,diffi:single);
 begin
  //front
  glbegin(gl_quads);
   gltexcoord2f(1,0); glvertex3f(0-(width / 2)-(diffi/2),0+(height /2),0+(deep /2));
   gltexcoord2f(1,1); glvertex3f(0+(width / 2)-(diffi/2),0+(height /2),0+(deep /2));
   gltexcoord2f(0,1); glvertex3f(0+(width / 2)+(diffi/2),0-(height /2),0+(deep /2));
   gltexcoord2f(0,0); glvertex3f(0-(width / 2)+(diffi/2),0-(height /2),0+(deep /2));
  glend;

  //rechts
  glbegin(gl_quads);
   gltexcoord2f(1,0); glvertex3f(0+(width / 2)-(diffi/2),0+(height /2),0+(deep /2));
   gltexcoord2f(1,1); glvertex3f(0+(width / 2)-(diffi/2),0+(height /2),0-(deep /2));
   gltexcoord2f(0,1); glvertex3f(0+(width / 2)+(diffi/2),0-(height /2),0-(deep /2));
   gltexcoord2f(0,0); glvertex3f(0+(width / 2)+(diffi/2),0-(height /2),0+(deep /2));
  glend;

  //back
  glbegin(gl_quads);
   gltexcoord2f(0,0); glvertex3f(0-(width / 2)+(diffi/2),0-(height /2),0-(deep /2));
   gltexcoord2f(0,1); glvertex3f(0+(width / 2)+(diffi/2),0-(height /2),0-(deep /2));
   gltexcoord2f(1,1); glvertex3f(0+(width / 2)-(diffi/2),0+(height /2),0-(deep /2));
   gltexcoord2f(1,0); glvertex3f(0-(width / 2)-(diffi/2),0+(height /2),0-(deep /2));
  glend;

  //links
  glbegin(gl_quads);
   gltexcoord2f(0,0); glvertex3f(0-(width / 2)+(diffi/2),0-(height /2),0+(deep /2));
   gltexcoord2f(0,1); glvertex3f(0-(width / 2)+(diffi/2),0-(height /2),0-(deep /2));
   gltexcoord2f(1,1); glvertex3f(0-(width / 2)-(diffi/2),0+(height /2),0-(deep /2));
   gltexcoord2f(1,0); glvertex3f(0-(width / 2)-(diffi/2),0+(height /2),0+(deep /2));
  glend;

  //oben
  glbegin(gl_quads);
   gltexcoord2f(1,0); glvertex3f(0-(width / 2)-(diffi/2),0+(height /2),0-(deep /2));
   gltexcoord2f(1,1); glvertex3f(0+(width / 2)-(diffi/2),0+(height /2),0-(deep /2));
   gltexcoord2f(0,1); glvertex3f(0+(width / 2)-(diffi/2),0+(height /2),0+(deep /2));
   gltexcoord2f(0,0); glvertex3f(0-(width / 2)-(diffi/2),0+(height /2),0+(deep /2));
  glend;

  //unten
  glbegin(gl_quads);
   gltexcoord2f(0,0); glvertex3f(0-(width / 2)+(diffi/2),0-(height /2),0+(deep /2));
   gltexcoord2f(0,1); glvertex3f(0+(width / 2)+(diffi/2),0-(height /2),0+(deep /2));
   gltexcoord2f(1,1); glvertex3f(0+(width / 2)+(diffi/2),0-(height /2),0-(deep /2));
   gltexcoord2f(1,0); glvertex3f(0-(width / 2)+(diffi/2),0-(height /2),0-(deep /2));
  glend;
 end;





///KÖRPER -> meist bei dächern zu sehen///

 procedure koerper.dach(width,height,deep:single);
 begin
  //base quader
  glbegin(gl_quads);
   gltexcoord2f(0,0); glvertex3f(0-(width / 2),0-(height /2),0+(deep /2));
   gltexcoord2f(0,1); glvertex3f(0+(width / 2),0-(height /2),0+(deep /2));
   gltexcoord2f(1,1); glvertex3f(0+(width / 2),0-(height /2),0-(deep /2));
   gltexcoord2f(1,0); glvertex3f(0-(width / 2),0-(height /2),0-(deep /2));
  glend;

  //front
  glbegin(gl_quads);
   gltexcoord2f(1,0); glvertex3f(0-(width / 2),0+(height /2),0);
   gltexcoord2f(1,1); glvertex3f(0+(width / 2),0+(height /2),0);
   gltexcoord2f(0,1); glvertex3f(0+(width / 2),0-(height /2),0+(deep /2));
   gltexcoord2f(0,0); glvertex3f(0-(width / 2),0-(height /2),0+(deep /2));
  glend;

  //back
  glbegin(gl_quads);
   gltexcoord2f(0,0); glvertex3f(0-(width / 2),0-(height /2),0-(deep /2));
   gltexcoord2f(0,1); glvertex3f(0+(width / 2),0-(height /2),0-(deep /2));
   gltexcoord2f(1,1); glvertex3f(0+(width / 2),0+(height /2),0);
   gltexcoord2f(1,0); glvertex3f(0-(width / 2),0+(height /2),0);
  glend;

  //links
  glbegin(gl_triangles);
   gltexcoord2f(0,1); glvertex3f(0-(width / 2),0-(height /2),0+(deep /2));
   gltexcoord2f(0,0); glvertex3f(0-(width / 2),0-(height /2),0-(deep /2));
   gltexcoord2f(1,1); glvertex3f(0-(width / 2),0+(height /2),0);
  glend;

  //rechts
  glbegin(gl_triangles);
   gltexcoord2f(0,0); glvertex3f(0+(width / 2),0-(height /2),0-(deep /2));
   gltexcoord2f(0,1); glvertex3f(0+(width / 2),0-(height /2),0+(deep /2));
   gltexcoord2f(1,1); glvertex3f(0+(width / 2),0+(height /2),0);
  glend;
 end;






 procedure koerper.dach_trapez(width,height,deep,diffi:single);   //diffi gibt die einrückung der oberen 2 Punkte an
 begin
  //base quader
  glbegin(gl_quads);
   gltexcoord2f(0,0); glvertex3f(0-(width / 2),0-(height /2),0+(deep /2));
   gltexcoord2f(0,1); glvertex3f(0+(width / 2),0-(height /2),0+(deep /2));
   gltexcoord2f(1,1); glvertex3f(0+(width / 2),0-(height /2),0-(deep /2));
   gltexcoord2f(1,0); glvertex3f(0-(width / 2),0-(height /2),0-(deep /2));
  glend;

  //front
  glbegin(gl_quads);
   gltexcoord2f(1,0); glvertex3f(0-(width / 2)+diffi,0+(height /2),0);
   gltexcoord2f(1,1); glvertex3f(0+(width / 2)-diffi,0+(height /2),0);
   gltexcoord2f(0,1); glvertex3f(0+(width / 2),0-(height /2),0+(deep /2));
   gltexcoord2f(0,0); glvertex3f(0-(width / 2),0-(height /2),0+(deep /2));
  glend;

  //back
  glbegin(gl_quads);
   gltexcoord2f(0,0); glvertex3f(0-(width / 2),0-(height /2),0-(deep /2));
   gltexcoord2f(0,1); glvertex3f(0+(width / 2),0-(height /2),0-(deep /2));
   gltexcoord2f(1,1); glvertex3f(0+(width / 2)-diffi,0+(height /2),0);
   gltexcoord2f(1,0); glvertex3f(0-(width / 2)+diffi,0+(height /2),0);
  glend;

  //links
  glbegin(gl_triangles);
   gltexcoord2f(0,1); glvertex3f(0-(width / 2),0-(height /2),0+(deep /2));
   gltexcoord2f(0,0); glvertex3f(0-(width / 2),0-(height /2),0-(deep /2));
   gltexcoord2f(1,1); glvertex3f(0-(width / 2)+diffi,0+(height /2),0);
  glend;

  //rechts
  glbegin(gl_triangles);
   gltexcoord2f(0,0); glvertex3f(0+(width / 2),0-(height /2),0-(deep /2));
   gltexcoord2f(0,1); glvertex3f(0+(width / 2),0-(height /2),0+(deep /2));
   gltexcoord2f(1,1); glvertex3f(0+(width / 2)-diffi,0+(height /2),0);
  glend;
 end;







///NO FRONT / BACK KÖRPER///

 procedure koerper.wuerfel_noFrontBack(site_length:single);
 begin
  //rechts
  glbegin(gl_quads);
   gltexcoord2f(1,0); glvertex3f(0+(site_length / 2),0+(site_length /2),0+(site_length /2));
   gltexcoord2f(1,1); glvertex3f(0+(site_length / 2),0+(site_length /2),0-(site_length /2));
   gltexcoord2f(0,1); glvertex3f(0+(site_length / 2),0-(site_length /2),0-(site_length /2));
   gltexcoord2f(0,0); glvertex3f(0+(site_length / 2),0-(site_length /2),0+(site_length /2));
  glend;

  //links
  glbegin(gl_quads);
   gltexcoord2f(0,0); glvertex3f(0-(site_length / 2),0-(site_length /2),0+(site_length /2));
   gltexcoord2f(0,1); glvertex3f(0-(site_length / 2),0-(site_length /2),0-(site_length /2));
   gltexcoord2f(1,1); glvertex3f(0-(site_length / 2),0+(site_length /2),0-(site_length /2));
   gltexcoord2f(1,0); glvertex3f(0-(site_length / 2),0+(site_length /2),0+(site_length /2));
  glend;

  //oben
  glbegin(gl_quads);
   gltexcoord2f(1,0); glvertex3f(0-(site_length / 2),0+(site_length /2),0-(site_length /2));
   gltexcoord2f(1,1); glvertex3f(0+(site_length / 2),0+(site_length /2),0-(site_length /2));
   gltexcoord2f(0,1); glvertex3f(0+(site_length / 2),0+(site_length /2),0+(site_length /2));
   gltexcoord2f(0,0); glvertex3f(0-(site_length / 2),0+(site_length /2),0+(site_length /2));
  glend;

  //unten
  glbegin(gl_quads);
   gltexcoord2f(0,0); glvertex3f(0-(site_length / 2),0-(site_length /2),0+(site_length /2));
   gltexcoord2f(0,1); glvertex3f(0+(site_length / 2),0-(site_length /2),0+(site_length /2));
   gltexcoord2f(1,1); glvertex3f(0+(site_length / 2),0-(site_length /2),0-(site_length /2));
   gltexcoord2f(1,0); glvertex3f(0-(site_length / 2),0-(site_length /2),0-(site_length /2));
  glend;
 end;






 procedure koerper.quader_noFrontBack(width,height,deep:single);
 begin
  //rechts
  glbegin(gl_quads);
   gltexcoord2f(0,0); glvertex3f(0+(width / 2),0-(height /2),0+(deep /2));
   gltexcoord2f(0,1); glvertex3f(0+(width / 2),0-(height /2),0-(deep /2));
   gltexcoord2f(1,1); glvertex3f(0+(width / 2),0+(height /2),0-(deep /2));
   gltexcoord2f(1,0); glvertex3f(0+(width / 2),0+(height /2),0+(deep /2));
  glend;

  //links
  glbegin(gl_quads);
   gltexcoord2f(0,0); glvertex3f(0-(width / 2),0-(height /2),0+(deep /2));
   gltexcoord2f(0,1); glvertex3f(0-(width / 2),0-(height /2),0-(deep /2));
   gltexcoord2f(1,1); glvertex3f(0-(width / 2),0+(height /2),0-(deep /2));
   gltexcoord2f(1,0); glvertex3f(0-(width / 2),0+(height /2),0+(deep /2));
  glend;

  //oben
  glbegin(gl_quads);
   gltexcoord2f(0,0); glvertex3f(0-(width / 2),0+(height /2),0+(deep /2));
   gltexcoord2f(0,1); glvertex3f(0+(width / 2),0+(height /2),0+(deep /2));
   gltexcoord2f(1,1); glvertex3f(0+(width / 2),0+(height /2),0-(deep /2));
   gltexcoord2f(1,0); glvertex3f(0-(width / 2),0+(height /2),0-(deep /2));
  glend;

  //unten
  glbegin(gl_quads);
   gltexcoord2f(0,0); glvertex3f(0-(width / 2),0-(height /2),0+(deep /2));
   gltexcoord2f(0,1); glvertex3f(0+(width / 2),0-(height /2),0+(deep /2));
   gltexcoord2f(1,1); glvertex3f(0+(width / 2),0-(height /2),0-(deep /2));
   gltexcoord2f(1,0); glvertex3f(0-(width / 2),0-(height /2),0-(deep /2));
  glend;
 end;





 procedure koerper.pyramid_noFrontBack(width,height,deep:single);
 begin
  //base quader
  glbegin(gl_quads);
   gltexcoord2f(0,0); glvertex3f(0-(width / 2),0-(height /2),0+(deep /2));
   gltexcoord2f(0,1); glvertex3f(0+(width / 2),0-(height /2),0+(deep /2));
   gltexcoord2f(1,1); glvertex3f(0+(width / 2),0-(height /2),0-(deep /2));
   gltexcoord2f(1,0); glvertex3f(0-(width / 2),0-(height /2),0-(deep /2));
  glend;

  //rechts
  glbegin(gl_triangles);
   gltexcoord2f(1,1); glvertex3f(0,0+(height /2),0);
   gltexcoord2f(0,1); glvertex3f(0+(width / 2),0-(height /2),0-(deep /2));
   gltexcoord2f(0,0); glvertex3f(0+(width / 2),0-(height /2),0+(deep /2));
  glend;

  //links
  glbegin(gl_triangles);
   gltexcoord2f(1,1); glvertex3f(0,0+(height /2),0);
   gltexcoord2f(0,1); glvertex3f(0-(width / 2),0-(height /2),0+(deep /2));
   gltexcoord2f(0,0); glvertex3f(0-(width / 2),0-(height /2),0-(deep /2));
  glend;
 end;




 procedure koerper.trapezkoerp_noFrontBack(width,height,deep,diffi:single);
 begin
  //rechts
  glbegin(gl_quads);
   gltexcoord2f(1,0); glvertex3f(0+(width / 2)-diffi,0+(height /2),0+(deep /2));
   gltexcoord2f(1,1); glvertex3f(0+(width / 2)-diffi,0+(height /2),0-(deep /2));
   gltexcoord2f(0,1); glvertex3f(0+(width / 2),0-(height /2),0-(deep /2));
   gltexcoord2f(0,0); glvertex3f(0+(width / 2),0-(height /2),0+(deep /2));
  glend;

  //links
  glbegin(gl_quads);
   gltexcoord2f(0,0); glvertex3f(0-(width / 2),0-(height /2),0+(deep /2));
   gltexcoord2f(0,1); glvertex3f(0-(width / 2),0-(height /2),0-(deep /2));
   gltexcoord2f(1,1); glvertex3f(0-(width / 2)+diffi,0+(height /2),0-(deep /2));
   gltexcoord2f(1,0); glvertex3f(0-(width / 2)+diffi,0+(height /2),0+(deep /2));
  glend;

  //oben
  glbegin(gl_quads);
   gltexcoord2f(1,0); glvertex3f(0-(width / 2)+diffi,0+(height /2),0-(deep /2));
   gltexcoord2f(1,1); glvertex3f(0+(width / 2)-diffi,0+(height /2),0-(deep /2));
   gltexcoord2f(0,1); glvertex3f(0+(width / 2)-diffi,0+(height /2),0+(deep /2));
   gltexcoord2f(0,0); glvertex3f(0-(width / 2)+diffi,0+(height /2),0+(deep /2));
  glend;

  //unten
  glbegin(gl_quads);
   gltexcoord2f(0,0); glvertex3f(0-(width / 2),0-(height /2),0+(deep /2));
   gltexcoord2f(0,1); glvertex3f(0+(width / 2),0-(height /2),0+(deep /2));
   gltexcoord2f(1,1); glvertex3f(0+(width / 2),0-(height /2),0-(deep /2));
   gltexcoord2f(1,0); glvertex3f(0-(width / 2),0-(height /2),0-(deep /2));
  glend;
 end;




 procedure koerper.pyramidteil_noFrontBack(width,height,deep,diffi:single);
 begin
  //rechts
  glbegin(gl_quads);
   gltexcoord2f(1,0); glvertex3f(0+(width / 2)-diffi,0+(height /2),0+(deep /2)-diffi);
   gltexcoord2f(1,1); glvertex3f(0+(width / 2)-diffi,0+(height /2),0-(deep /2)+diffi);
   gltexcoord2f(0,1); glvertex3f(0+(width / 2),0-(height /2),0-(deep /2));
   gltexcoord2f(0,0); glvertex3f(0+(width / 2),0-(height /2),0+(deep /2));
  glend;

  //links
  glbegin(gl_quads);
   gltexcoord2f(0,0); glvertex3f(0-(width / 2),0-(height /2),0+(deep /2));
   gltexcoord2f(0,1); glvertex3f(0-(width / 2),0-(height /2),0-(deep /2));
   gltexcoord2f(1,1); glvertex3f(0-(width / 2)+diffi,0+(height /2),0-(deep /2)+diffi);
   gltexcoord2f(1,0); glvertex3f(0-(width / 2)+diffi,0+(height /2),0+(deep /2)-diffi);
  glend;

  //oben
  glbegin(gl_quads);
   gltexcoord2f(1,0); glvertex3f(0-(width / 2)+diffi,0+(height /2),0-(deep /2)+diffi);
   gltexcoord2f(1,1); glvertex3f(0+(width / 2)-diffi,0+(height /2),0-(deep /2)+diffi);
   gltexcoord2f(0,1); glvertex3f(0+(width / 2)-diffi,0+(height /2),0+(deep /2)-diffi);
   gltexcoord2f(0,0); glvertex3f(0-(width / 2)+diffi,0+(height /2),0+(deep /2)-diffi);
  glend;

  //unten
  glbegin(gl_quads);
   gltexcoord2f(0,0); glvertex3f(0-(width / 2),0-(height /2),0+(deep /2));
   gltexcoord2f(0,1); glvertex3f(0+(width / 2),0-(height /2),0+(deep /2));
   gltexcoord2f(1,1); glvertex3f(0+(width / 2),0-(height /2),0-(deep /2));
   gltexcoord2f(1,0); glvertex3f(0-(width / 2),0-(height /2),0-(deep /2));
  glend;
 end;





 procedure koerper.para_quad_noFrontBack(site_length,diffi:single);
 begin 
  //rechts
  glbegin(gl_quads);
   gltexcoord2f(1,0); glvertex3f(0+(site_length / 2)-(diffi/2),0+(site_length /2),0+(site_length /2));
   gltexcoord2f(1,1); glvertex3f(0+(site_length / 2)-(diffi/2),0+(site_length /2),0-(site_length /2));
   gltexcoord2f(0,1); glvertex3f(0+(site_length / 2)+(diffi/2),0-(site_length /2),0-(site_length /2));
   gltexcoord2f(0,0); glvertex3f(0+(site_length / 2)+(diffi/2),0-(site_length /2),0+(site_length /2));
  glend;

  //links
  glbegin(gl_quads);
   gltexcoord2f(0,0); glvertex3f(0-(site_length / 2)+(diffi/2),0-(site_length /2),0+(site_length /2));
   gltexcoord2f(0,1); glvertex3f(0-(site_length / 2)+(diffi/2),0-(site_length /2),0-(site_length /2));
   gltexcoord2f(1,1); glvertex3f(0-(site_length / 2)-(diffi/2),0+(site_length /2),0-(site_length /2));
   gltexcoord2f(1,0); glvertex3f(0-(site_length / 2)-(diffi/2),0+(site_length /2),0+(site_length /2));
  glend;

  //oben
  glbegin(gl_quads);
   gltexcoord2f(1,0); glvertex3f(0-(site_length / 2)-(diffi/2),0+(site_length /2),0-(site_length /2));
   gltexcoord2f(1,1); glvertex3f(0+(site_length / 2)-(diffi/2),0+(site_length /2),0-(site_length /2));
   gltexcoord2f(0,1); glvertex3f(0+(site_length / 2)-(diffi/2),0+(site_length /2),0+(site_length /2));
   gltexcoord2f(0,0); glvertex3f(0-(site_length / 2)-(diffi/2),0+(site_length /2),0+(site_length /2));
  glend;

  //unten
  glbegin(gl_quads);
   gltexcoord2f(0,0); glvertex3f(0-(site_length / 2)+(diffi/2),0-(site_length /2),0+(site_length /2));
   gltexcoord2f(0,1); glvertex3f(0+(site_length / 2)+(diffi/2),0-(site_length /2),0+(site_length /2));
   gltexcoord2f(1,1); glvertex3f(0+(site_length / 2)+(diffi/2),0-(site_length /2),0-(site_length /2));
   gltexcoord2f(1,0); glvertex3f(0-(site_length / 2)+(diffi/2),0-(site_length /2),0-(site_length /2));
  glend;
 end;




 procedure koerper.para_rect_noFrontBack(width,height,deep,diffi:single);
 begin
  //rechts
  glbegin(gl_quads);
   gltexcoord2f(1,0); glvertex3f(0+(width / 2)-(diffi/2),0+(height /2),0+(deep /2));
   gltexcoord2f(1,1); glvertex3f(0+(width / 2)-(diffi/2),0+(height /2),0-(deep /2));
   gltexcoord2f(0,1); glvertex3f(0+(width / 2)+(diffi/2),0-(height /2),0-(deep /2));
   gltexcoord2f(0,0); glvertex3f(0+(width / 2)+(diffi/2),0-(height /2),0+(deep /2));
  glend;

  //links
  glbegin(gl_quads);
   gltexcoord2f(0,0); glvertex3f(0-(width / 2)+(diffi/2),0-(height /2),0+(deep /2));
   gltexcoord2f(0,1); glvertex3f(0-(width / 2)+(diffi/2),0-(height /2),0-(deep /2));
   gltexcoord2f(1,1); glvertex3f(0-(width / 2)-(diffi/2),0+(height /2),0-(deep /2));
   gltexcoord2f(1,0); glvertex3f(0-(width / 2)-(diffi/2),0+(height /2),0+(deep /2));
  glend;

  //oben
  glbegin(gl_quads);
   gltexcoord2f(1,0); glvertex3f(0-(width / 2)-(diffi/2),0+(height /2),0-(deep /2));
   gltexcoord2f(1,1); glvertex3f(0+(width / 2)-(diffi/2),0+(height /2),0-(deep /2));
   gltexcoord2f(0,1); glvertex3f(0+(width / 2)-(diffi/2),0+(height /2),0+(deep /2));
   gltexcoord2f(0,0); glvertex3f(0-(width / 2)-(diffi/2),0+(height /2),0+(deep /2));
  glend;

  //unten
  glbegin(gl_quads);
   gltexcoord2f(0,0); glvertex3f(0-(width / 2)+(diffi/2),0-(height /2),0+(deep /2));
   gltexcoord2f(0,1); glvertex3f(0+(width / 2)+(diffi/2),0-(height /2),0+(deep /2));
   gltexcoord2f(1,1); glvertex3f(0+(width / 2)+(diffi/2),0-(height /2),0-(deep /2));
   gltexcoord2f(1,0); glvertex3f(0-(width / 2)+(diffi/2),0-(height /2),0-(deep /2));
  glend;
 end;




///KUGEL / KEGEL / CYLINDER / UND ANDERE RUNDE DINGER///

 function koerper.create_pgluquadric:pgluquadric;
 var
  quadric:pgluquadric;
 begin
  quadric := gluNewQuadric;
  gluquadrictexture(quadric,true);
  result:=quadric;
 end;



 procedure koerper.Kegel(quadric:pgluquadric;base_radius,height:single);
 begin
  gltranslatef(0,(-(height / 2)),0);
  glrotatef(270,1,0,0);
  glucylinder(quadric,base_radius,0,height,50,50);
 end;




 procedure koerper.cylinder(quadric:pgluquadric;radius,height:single);
 begin
  gltranslatef(0,(-(height / 2)),0);
  glrotatef(270,1,0,0);
  glucylinder(quadric,radius,radius,height,50,50);
 end;



 procedure koerper.Kugel(quadric:pgluquadric;radius:single);
 begin
  gltranslatef(0,(-radius),0);
  glrotatef(270,1,0,0);
  glusphere(quadric,radius,50,50);
 end;
end.


Naja schade das bisher kein Feedback gab.
Wer noch paar Ideen und Anregungen hat wär hoch erfreut drüber ;-)

Greetz
Seawolf

_________________
WIR GAMER SIND KEINE KILLER!!!
ichsagenein und killerspielverbot googeln!!!
ub60
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 762
Erhaltene Danke: 127



BeitragVerfasst: So 10.12.06 14:28 
Hallo seawolf,

der Code sieht ja erst mal sehr verheißungsvoll aus.
Könntest Du evtl. mal ein kleines Demoprojekt (Quelltext) mit anhängen, damit man gleich mal richtig "loslegen" kann, ohne sich groß einzuarbeiten?

ub60
seawolf Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20

WinXP SP1
Delphi 6/7
BeitragVerfasst: Di 12.12.06 14:02 
Hi hier ma der Quelltext eines kleinen Demoprojekts womit ich z.Zt. paar amtrix-Übungen mach ^^

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, AppEvnts, ExtCtrls, dglopengl, glbmp, koerper_draw, texture_load_glbmp;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    ApplicationEvents1: TApplicationEvents;
    procedure Timer1Timer(Sender: TObject);
    procedure ApplicationEvents1Idle(Sender: TObject; var Done: Boolean);
    procedure FormCreate(Sender: TObject);
    procedure FormResize(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure render;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    DC    : HDC; //DeviceContext
    RC    : HGLRC; //RenderingContext

    timefactor : double;
    fps : integer;

    texloader:tex_loader_glbmp; //tex_loader_glbmp ist klasse aus Unit texture_load_glbmp
    formen:koerper; //Koerper ist Klasse aus der Unit koerper_draw

    texture, texture2, texture3:tglbmp; //variablen für die texturen

    dreh:single; //variable für die Drehung der drei Würfel
  end;

var
  Form1: TForm1;

implementation


{$R *.dfm}


procedure TForm1.FormCreate(Sender: TObject);
begin
 dreh:=0;

 timefactor :=0.05//Standart-timefaktor bis zur ersten Fps Messung
 fps :=1;

 //OpenGl initialisieren und festlegen von extentitiellen Sachen
 InitOpenGL;

 DC:=GetDC(form1.Handle);
 RC:=CreateRenderingContext(DC, [opDoubleBuffered], 32240000);
 ActivateRenderingContext(DC, RC);

 glEnable(GL_LINE_SMOOTH);
 glEnable(GL_TEXTURE_2D);
 glDepthFunc(GL_LEQUAL);
 glEnable(GL_DEPTH_TEST);
 glenable(gl_cull_face);
 glcullface(gl_front);

 texloader:=tex_loader_glbmp.Create; //Meine Texturenladeklasse createn
 formen:=koerper.create; //Meine Koerperklasse createn

//Texturen laden, hab da auch meine eigene Unit geschrieben, ladehier Texturen mit GLBmp 
 texture:=texloader.load_tex_2D_RGBA_NOSPHERE_GLBMP('.\verschiedene Texturen\Holzkiste04.JPG');
 texture2:=texloader.load_tex_2D_RGBA_NOSPHERE_GLBMP('.\verschiedene Texturen\crashing_electrolites.jpg');
 texture3:=texloader.load_tex_2D_RGBA_NOSPHERE_GLBMP('.\verschiedene Texturen\Holzlatten07.JPG');


end;





procedure TForm1.render;
begin
 fps:=fps+1;
 glViewport(00, ClientWidth, ClientHeight);
 glMatrixMode(GL_PROJECTION);
 glLoadIdentity;
 gluPerspective(45, ClientWidth/ClientHeight, 0.51000);
 glMatrixMode(GL_Modelview);
 glLoadIdentity;
 glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);

 gltranslatef(0,0,-2); // alles um 2 nach hinten verschieben

 //Linker würfel
 glpushmatrix;
  gltranslatef(-0.5,0,0);//Position links
  glrotatef(dreh,1,1,1);//dreh-grad um alle Achsen drehen
  texture.Bind;//erste texture auf Würfel legen
  formen.wuerfel(0.3);// Würfel zeichnen koerper.wuerfel(site_length)
 glpopmatrix;

 //Rechter Würfel
 glpushmatrix;
  gltranslatef(+0.5,0,0);//Position rechts
  glrotatef(dreh,1,1,1);//dreh-grad um alle Achsen drehen
  texture2.Bind;//zweite texture auf Würfel legen
  formen.wuerfel(0.3);// Würfel zeichnen koerper.wuerfel(site_length)
 glpopmatrix;

 //Mittlerer Würfel
 glpushmatrix;
  glrotatef(dreh,1,1,1);//dreh-grad um alle Achsen drehen
  texture3.Bind;//dritte texture auf Würfel legen
  formen.wuerfel(0.3);// Würfel zeichnen koerper.wuerfel(site_length)
 glpopmatrix;



 Swapbuffers(dc); //ausgabe auf bildschirm
 
 
 dreh:=dreh+0.05+(1*timefactor);//Drehung den Fps anpassen
 if dreh>=360 then
 begin
  dreh:=0;//if schleife notwendig um zu hohe werte für den Datentyp zu vermeiden
 end;
end;








procedure TForm1.ApplicationEvents1Idle(Sender: TObject;
  var Done: Boolean);
begin
 render;//---> enthält alles was gerendert wird
 done:=false;
end;


//Meine Fps Ausgabe funktion
procedure TForm1.Timer1Timer(Sender: TObject);
var
stri:string;
begin
 str(fps,stri);
 form1.Caption:= stri;
 timefactor := 40 / fps*2;
 fps := 0;
end;

//Alles auf neue Größe anpassen
procedure TForm1.FormResize(Sender: TObject);
begin
 if HandleAllocated then
 begin
 glViewport(00, ClientWidth, ClientHeight);
 glMatrixMode(GL_PROJECTION);
 glLoadIdentity;
 gluPerspective(45, ClientWidth/ClientHeight, 0.11000);
 end;
end;

//Deinitialisieren von Opengl bei "brutalem" Schliessen des Fensters
procedure TForm1.FormDestroy(Sender: TObject);
begin
 DeactivateRenderingContext;
 wglDeleteContext(RC);
 ReleaseDC(Handle, DC);
end;

//Deinitialisieren von Opengl bei Beenden des Progs
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 DeactivateRenderingContext;
 wglDeleteContext(RC);
 ReleaseDC(Handle, DC);
end;




end.


im Anhang hab ich ma mein "RumProbierProgramm" beigelegt.

Greetz
Seawolf

//EDIT: Wenn ich hier endlich ma Delphi hab zeig ich euch noch d2 andere Körper wo des dann mit "Diffi" schöner zum Ausdruck kommt, spätestens nächstes We werd ich des hier ma schreiben.
Einloggen, um Attachments anzusehen!
_________________
WIR GAMER SIND KEINE KILLER!!!
ichsagenein und killerspielverbot googeln!!!
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Di 12.12.06 20:21 
schön wäre es, wenn du noch die normalen berechnen und an opengl übergeben würdest ;)
positionen wären auch was nettes, dann erspart man sich die ganzen pushes und pops sowie das ganze translate und wenn du da schon bei bist kannst du auch rotationen mit rein nehmen ;)

und die quadrics die du für zylinder und kugeln brauchst kannst du auch direkt im code erstellen, das ist irgendwie komfortabler:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
procedure DrawCylinder(aCylinder: TCylinder);
var
  quad: PGLUQuadric;
begin
  with aCylinder do
  begin
    quad := gluNewQuadric;
    try
      gluQuadricTexture(quad, true);
      glPushMatrix();
        glTranslatef(position.x, position.y * 2, position.z);
        glRotatef(90100);
        gluCylinder(quad, radius, radius, height, detail, detail);
      glpopmatrix;
    finally
      gluDeleteQuadric(quad);
    end;
  end;
end;

procedure DrawSphere(aSphere: TSphere);
var
  quad: PGLUQuadric;
begin
  with aSphere do
  begin
    quad := gluNewQuadric;
    try
      gluQuadricTexture(quad, true);
      glPushMatrix();
        glTranslatef(position.x, position.y, position.z);
        gluSphere(quad, radius, detail, detail);
      glpopmatrix;
    finally
      gluDeleteQuadric(quad);
    end;
  end;
end;


mfg
seawolf Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20

WinXP SP1
Delphi 6/7
BeitragVerfasst: Di 12.12.06 20:55 
Hi

hier erstma der Code wo man sich die variable Diffi genauer anschauen kann ;-)
habe noch 2 neue texturen hinzu genommen derr rets entspricht dem vorherigen code. Datei siehe Anhang.
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
procedure TForm1.render;
begin
 fps:=fps+1;
 glViewport(00, ClientWidth, ClientHeight);
 glMatrixMode(GL_PROJECTION);
 glLoadIdentity;
 gluPerspective(45, ClientWidth/ClientHeight, 0.51000);
 glMatrixMode(GL_Modelview);
 glLoadIdentity;
 glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);

  gltranslatef(0,0,-2);

 glpushmatrix;
  gltranslatef(-0.7,0,0);
  glrotatef(dreh/2,1,0,0);
  texture.Bind;
  formen.trapez_koerper(0.5,0.4,0.5,0.2);//width,height,deep,diffi - Diffi bestimmt wie weit die Oberen Punkte der Seiten eingerückt werden
 glpopmatrix;

 glpushmatrix;
  gltranslatef(+0.7,0,0);
  glrotatef(dreh/2,0,1,0);
  texture2.Bind;
  gldisable(gl_cull_face);
  formen.para_rect_noFrontBack(0.3,0.5,0.3,0.1);//width,height,deep,diffi - hier bestimmt diffi die schräglage des Parallelogramms
  glenable(gl_cull_face);
 glpopmatrix;

 //Minihaus zeichnen
 glpushmatrix;
  //"Grundform"
  glrotatef(dreh/2,0,1,0);
  texture3.Bind;
  formen.quader(0.4,0.2,0.3);

  //zu gespitztes Dach
  gltranslatef(0,0.2,0);
  texture4.bind;
  formen.dach_trapez(0.4,0.2,0.3,0.1);//width,height,deep,diffi - Hier bestimmt diffi wie weit die Spitze der Dreiecke des dachs eingerückt werden

  //Schornstein
  gltranslatef(0.05,0.1,0.05);
  texture5.Bind;
  formen.quader(0.05,0.2,0.05);
 glpopmatrix;



 Swapbuffers(dc); //ausgabe auf bildschirm
 
 dreh:=dreh+0.05+(1*timefactor);
 if dreh>=2160 then
 begin
  dreh:=0;
 end;
end;


@F34rofTh3D4rk: das mit den Positionen und der Rotation is ne Supa Idee danke werd ich morgen mal einbauen :-D, was die Normalen angeht so weis ich nicht wirklich wie man die berechnet. Hatte die mir ma vor einiger Zeit angesehn aber habs nich vertsanden und immo wegen weniger zeit schleifen lassen :-(. kannst du mir erklären wofür die gebraucht werden und wie die Berechnung genau funktioniert? Danke.

Greetz
Seawolf
Einloggen, um Attachments anzusehen!
_________________
WIR GAMER SIND KEINE KILLER!!!
ichsagenein und killerspielverbot googeln!!!
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Di 12.12.06 22:10 
mach doch statt deinen ganzen flächen ein objekt mit vier ecken oder gleich ein polygon dass mittels TriangleFan oder strip oder wie auch immer gezeichnet wird, weil ich glaube net, dass jemand solche funktionen wie für das trapez gut gebrauchen kann.

du kannst noch diverse nurbs einbauen, dazu zähle ich auch rotationskörper über eine funktion.