Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 12:23

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 
Autor Nachricht
BeitragVerfasst: Di Mai 24, 2005 16:48 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
Hallo, ich habe einen Würfel (6 Seiten) und möchte diesen jetzt zu Laufzeit per Datei Texturen verpassen, ich benutze die units dglopengl.pas und glbitmap.pas, aber ich komme mit den Texturen nicht so recht klar, hier mal mein bisheriger code:
Code:
  1.  
  2. {...}
  3.  
  4. var
  5.   MainForm: TMainForm;
  6.   RC: HGLRC;
  7.   DC: HDC;
  8.   ShowFPS: Boolean = false;
  9.   FontBase: GLUInt;
  10.   StartTick: Cardinal;
  11.   Frames: Integer;
  12.   FPS: Single;
  13.   DegX, DegY: integer;
  14.   fZoom: glFloat = 1;
  15.   linewidth: glfloat = 1;
  16.   smoothlines: boolean = false;
  17.   TT, TB, TL, TR, TFront, TBack: TglBitmap2D;
  18.  
  19. {...}
  20.  
  21. procedure BuildFont(pFontName : String);
  22. var
  23.   Font : HFONT;
  24. begin
  25.   FontBase := glGenLists(96);
  26.   Font := CreateFont(16, 0, 0, 0, FW_MEDIUM, 0, 0, 0, ANSI_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS, ANTIALIASED_QUALITY, FF_DONTCARE or DEFAULT_PITCH, PChar(pFontName));
  27.   SelectObject(DC, Font);
  28.   wglUseFontBitmaps(DC, 0, 256, FontBase);
  29.   DeleteObject(Font)
  30. end;
  31.  
  32. procedure PrintText(pX, pY: Integer; const pText: String);
  33. begin
  34.   if (pText = '') then
  35.     exit;
  36.   glPushAttrib(GL_LIST_BIT);
  37.   glRasterPos2i(pX, pY);
  38.   glListBase(FontBase);
  39.   glCallLists(Length(pText), GL_UNSIGNED_BYTE, PChar(pText));
  40.   glPopAttrib;
  41. end;
  42.  
  43. procedure ShowFPSText;
  44. begin
  45.   if showfps then
  46.     begin
  47.       glDisable(GL_DEPTH_TEST);
  48.       glDisable(GL_TEXTURE_2D);
  49.       glMatrixMode(GL_PROJECTION);
  50.       glLoadIdentity;
  51.       glOrtho(0, mainform.preview.width, mainform.preview.height, 0, -1, 1);
  52.       glMatrixMode(GL_MODELVIEW);
  53.       glLoadIdentity;
  54.       PrintText(5, 15, FloatToStr(FPS)+' fps');
  55.       glEnable(GL_DEPTH_TEST);
  56.       glEnable(GL_TEXTURE_2D);
  57.     end;
  58. end;
  59.  
  60. procedure DrawQuad(x, y, z: glfloat);
  61. begin
  62.   glBegin(GL_QUADS);
  63.     glTexCoord2f(1, 0); glVertex3f(-x, -y, z);
  64.     glTexCoord2f(1, 1); glVertex3f(x, -y, z);
  65.     glTexCoord2f(0, 1); glVertex3f(x, y, z);
  66.     glTexCoord2f(0, 0); glVertex3f(-x, y, z);
  67.  
  68.     glTexCoord2f(1, 0); glVertex3f(-x, -y, -z);
  69.     glTexCoord2f(1, 1); glVertex3f(-x, y, -z);
  70.     glTexCoord2f(0, 1); glVertex3f(x, y, -z);
  71.     glTexCoord2f(0, 0); glVertex3f(x, -y, -z);
  72.  
  73.     glTexCoord2f(1, 0); glVertex3f(-x, y, -z);
  74.     glTexCoord2f(1, 1); glVertex3f(-x, y, z);
  75.     glTexCoord2f(0, 1); glVertex3f(x, y, z);
  76.     glTexCoord2f(0, 0); glVertex3f(x, y, -z);
  77.  
  78.     glTexCoord2f(1, 0); glVertex3f(-x, -y, -z);
  79.     glTexCoord2f(1, 1); glVertex3f(x, -y, -z);
  80.     glTexCoord2f(0, 1); glVertex3f(x, -y, z);
  81.     glTexCoord2f(0, 0); glVertex3f(-x,-y, z);
  82.  
  83.     glTexCoord2f(1, 0); glVertex3f(x, -y, -z);
  84.     glTexCoord2f(1, 1); glVertex3f(x, y, -z);
  85.     glTexCoord2f(0, 1); glVertex3f(x, y, z);
  86.     glTexCoord2f(0, 0); glVertex3f(x, -y, z);
  87.  
  88.     glTexCoord2f(1, 0); glVertex3f(-x, -y, -z);
  89.     glTexCoord2f(1, 1); glVertex3f(-x, -y, z);
  90.     glTexCoord2f(0, 1); glVertex3f(-x, y, z);
  91.     glTexCoord2f(0, 0); glVertex3f(-x, y, -z);
  92.   glEnd;
  93. end;
  94.  
  95. procedure TMainForm.FormCreate(Sender: TObject);
  96. begin
  97.   GB_Pictures.doublebuffered := true;
  98.   Degy := -45;
  99.   Front.Canvas.rectangle(0, 0, Front.width, Front.Height);
  100.   SideL.Canvas.rectangle(0, 0, SideL.width, SideL.Height);
  101.   SideR.Canvas.rectangle(0, 0, SideR.width, SideR.Height);
  102.   Back.Canvas.rectangle(0, 0, Back.width, Back.Height);
  103.   Top.Canvas.rectangle(0, 0, Top.width, Top.Height);
  104.   Bottom.Canvas.rectangle(0, 0, Bottom.width, Bottom.Height);
  105.   InitOpenGL;
  106.   DC := GetDC(Preview.Handle);
  107.   RC := CreateRenderingContext(DC, [opDoubleBuffered], 32, 24, 0, 0, 0, 0);
  108.   ActivateRenderingContext(DC, RC);
  109.  
  110.   glEnable(GL_CULL_FACE);
  111.   glEnable(GL_TEXTURE_2D);
  112.  
  113.   glDepthFunc(GL_LESS);
  114.  
  115.   glClearColor(1, 1, 1, 0);
  116.  
  117.   glMatrixMode(GL_PROJECTION);
  118.   glLoadIdentity;
  119.   glViewPort(0, 0, Preview.Width, Preview.Height);
  120.   gluPerspective(45, Preview.Width / Preview.Height, 0.1, 128);
  121.   glMatrixMode(GL_MODELVIEW);
  122.   glLoadIdentity;
  123.  
  124.   BuildFont('Arial');
  125.   StartTick := GetTickCount;
  126. end;
  127.  
  128. procedure TMainForm.FormDestroy(Sender: TObject);
  129. begin
  130.   DeactivateRenderingContext;
  131.   wglDeleteContext(RC);
  132.   ReleaseDC(Handle, DC);
  133. end;
  134.  
  135. procedure TMainForm.ApplicationEvents1Idle(Sender: TObject;
  136.   var Done: Boolean);
  137. begin
  138.   Done := false;
  139.   inc(Frames);
  140.  
  141.   if (smoothlines = true) then
  142.     glEnable(GL_LINE_SMOOTH) else
  143.       glDisable(GL_LINE_SMOOTH);
  144.  
  145.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  146.  
  147.   glLoadIdentity;
  148.   glTranslatef(0, 0, -3.25);
  149.  
  150.   glScalef(FZoom, FZoom, FZoom);
  151.   glRotatef(degx, 1, 0, 0);
  152.   glRotatef(degy, 0, 1, 0);
  153.  
  154.   glColor3f(0, 0, 0);
  155.   glLineWidth(linewidth);
  156.   glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
  157.   DrawQuad(0.75, 1, 0.2);
  158.  
  159.   ShowFPSText;
  160.  
  161.   SwapBuffers(DC);
  162.  
  163.   if GetTickCount - StartTick >= 500 then
  164.     begin
  165.       FPS := round(Frames / (GetTickCount-StartTick) * 1000);
  166.       Frames := 0;
  167.       StartTick := GetTickCount
  168.     end;
  169. end;
  170.  
  171. procedure TMainForm.RotLClick(Sender: TObject);
  172. begin
  173.   dec(DegY, 5);
  174.   if DegY = -360 then
  175.     DegY := 0;
  176.   y_l.Caption := 'y: ' + inttostr(DegY);
  177. end;
  178.  
  179. procedure TMainForm.RotUClick(Sender: TObject);
  180. begin
  181.   dec(DegX, 5);
  182.   if DegX = -360 then
  183.     DegX := 0;
  184.   x_l.Caption := 'x: ' + inttostr(-DegX);
  185. end;
  186.  
  187. procedure TMainForm.RotDClick(Sender: TObject);
  188. begin
  189.   inc(DegX, 5);
  190.   if DegX = 360 then
  191.     DegX := 0;
  192.   x_l.Caption := 'x: ' + inttostr(-DegX);
  193. end;
  194.  
  195. procedure TMainForm.RUClick(Sender: TObject);
  196. begin
  197.   dec(DegX, 5);
  198.   if DegX = -360 then
  199.     DegX := 0;
  200.   x_l.Caption := 'x: ' + inttostr(-DegX);
  201. end;
  202.  
  203. procedure TMainForm.RRClick(Sender: TObject);
  204. begin
  205.   inc(DegY, 5);
  206.   if DegY = 360 then
  207.     DegY := 0;
  208.   y_l.Caption := 'y: ' + inttostr(DegY);
  209. end;
  210.  
  211. procedure TMainForm.RLClick(Sender: TObject);
  212. begin
  213.   dec(DegY, 5);
  214.   if DegY = -360 then
  215.     DegY := 0;
  216.   y_l.Caption := 'y: ' + inttostr(DegY);
  217. end;
  218.  
  219. procedure TMainForm.RDClick(Sender: TObject);
  220. begin
  221.   inc(DegX, 5);
  222.   if DegX = 360 then
  223.     DegX := 0;
  224.   x_l.Caption := 'x: ' + inttostr(-DegX);
  225. end;
  226.  
  227. procedure TMainForm.ZIClick(Sender: TObject);
  228. begin
  229.   fzoom := fzoom + 0.05;
  230.   if fzoom > 1.5 then
  231.     fzoom := 1.5;
  232.   z_l.Caption := floattostr(round(fzoom * 100)) + '%';  
  233. end;
  234.  
  235. procedure TMainForm.ZOClick(Sender: TObject);
  236. begin
  237.   fzoom := fzoom - 0.05;
  238.   if fzoom < 0.5 then
  239.     fzoom := 0.5;
  240.   z_l.Caption := floattostr(round(fzoom * 100)) + '%';    
  241. end;
  242.  
  243. procedure TMainForm.ComboBox1Change(Sender: TObject);
  244. begin
  245.   linewidth := strtoint(combobox1.Items[combobox1.itemindex]);
  246. end;
  247.  
  248. {...}
  249.  


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 16 Queries | GZIP : On ]