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

Aktuelle Zeit: Fr Jul 18, 2025 14:08

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



Ein neues Thema erstellen Auf das Thema antworten  [ 37 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste
Autor Nachricht
BeitragVerfasst: Di Mai 24, 2005 16:53 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
hallo, ich habe einen quader und möchte diesen zur Laufzeit mittels bmp oder wahlweise jpg Dateien texturieren.
Ich benutze die Units DGLOpenGL.pas und GLBitmap.pas, aber ich komme mit dem Texturieren nicht so wirklich 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.  


EDIT: eigentlich möchte ich das bild in eine Variable laden und von da aus texturieren, da das bild auch noch in einem image auftauchen soll und ich keine grafische pixelpracht im negativen sinne erzeugen möchte :D


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 24, 2005 18:02 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Das ist alles recht einfach.

Code:
  1. // Beim erstellen des Fensters (FormCreate vor oder nach BuildFont)
  2. FTex := TglBitmap2D.Create('Dateiname');
  3. // oder
  4. FTex := TglBitmap2D.Create;
  5. FTex.LoadFromFile('Dateiname');
  6.  
  7. // Anschließend die Textur generieren. Evetuelle andere Operationen dann auch noch vor dem GenTexture ausführen.
  8. FTex.GenTexture;

Code:
  1. // Bevor du die Fläche Zeichnest musst du die Textur binden damit Opengl weiß was er nehmen soll.
  2. FTex.Bind;

Code:
  1. // Beim Beenden der Anwendung auch immer schon die Textur freigeben. Und zwar bevor du OpenGL deinitialisierst.
  2. FTex.Free;


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 24, 2005 18:42 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
so hatte ich das schonmal (wahrscheinlich wieder was falsch :lol:), habe keine Textur:
Code:
  1.  
  2. {...}
  3.  
  4. var
  5.   MainForm: TMainForm;
  6.   RC: HGLRC;
  7.   DC: HDC;
  8.   DegX, DegY: integer;
  9.   fZoom: glFloat = 1;
  10.   linewidth: glfloat = 1;
  11.   smoothlines: boolean = false;
  12.   TT, TB, TL, TR, TFront, TBack: TglBitmap2D;
  13.  
  14. {...}
  15.  
  16. procedure GLScreenShot_BMP_1(name : string);
  17. var
  18.   F : file;
  19.   FileInfo: BITMAPINFOHEADER;
  20.   FileHeader : BITMAPFILEHEADER;
  21.   pPicData:Pointer;
  22.   Viewport : array[0..3] of integer;
  23. begin
  24.   ZeroMemory(@FileHeader, SizeOf(BITMAPFILEHEADER));
  25.   ZeroMemory(@FileInfo, SizeOf(BITMAPINFOHEADER));
  26.   glGetIntegerv(GL_VIEWPORT, @Viewport);
  27.   FileInfo.biSize := SizeOf(BITMAPINFOHEADER);
  28.   FileInfo.biWidth := Viewport[2];
  29.   FileInfo.biHeight := Viewport[3];
  30.   FileInfo.biPlanes := 1;
  31.   FileInfo.biBitCount := 32;
  32.   FileInfo.biSizeImage := FileInfo.biWidth*FileInfo.biHeight*(FileInfo.biBitCount);
  33.   FileHeader.bfType := 19778;
  34.   FileHeader.bfOffBits := SizeOf(BITMAPINFOHEADER)+SizeOf(BITMAPFILEHEADER);
  35.   GetMem(pPicData, FileInfo.biSizeImage);
  36.   glReadPixels(0, 0, Viewport[2], Viewport[3], GL_BGRA, GL_UNSIGNED_BYTE, pPicData);
  37.   AssignFile(f, name);
  38.   Rewrite( f,1 );
  39.   BlockWrite(F, FileHeader, SizeOf(BITMAPFILEHEADER));
  40.   BlockWrite(F, FileInfo, SizeOf(BITMAPINFOHEADER));
  41.   BlockWrite(F, pPicData^, FileInfo.biSizeImage );
  42.   CloseFile(f);
  43.   FreeMem(pPicData, FileInfo.biSizeImage);
  44. end;
  45.  
  46. procedure DrawQuad(x, y, z: glfloat);
  47. begin
  48.   glBegin(GL_QUADS);
  49.     TFront.Bind;
  50.     glTexCoord2f(1, 0); glVertex3f(-x, -y, z);
  51.     glTexCoord2f(1, 1); glVertex3f(x, -y, z);
  52.     glTexCoord2f(0, 1); glVertex3f(x, y, z);
  53.     glTexCoord2f(0, 0); glVertex3f(-x, y, z);
  54.  
  55.     glTexCoord2f(1, 0); glVertex3f(-x, -y, -z);
  56.     glTexCoord2f(1, 1); glVertex3f(-x, y, -z);
  57.     glTexCoord2f(0, 1); glVertex3f(x, y, -z);
  58.     glTexCoord2f(0, 0); glVertex3f(x, -y, -z);
  59.  
  60.     glTexCoord2f(1, 0); glVertex3f(-x, y, -z);
  61.     glTexCoord2f(1, 1); glVertex3f(-x, y, z);
  62.     glTexCoord2f(0, 1); glVertex3f(x, y, z);
  63.     glTexCoord2f(0, 0); glVertex3f(x, y, -z);
  64.  
  65.     glTexCoord2f(1, 0); glVertex3f(-x, -y, -z);
  66.     glTexCoord2f(1, 1); glVertex3f(x, -y, -z);
  67.     glTexCoord2f(0, 1); glVertex3f(x, -y, z);
  68.     glTexCoord2f(0, 0); glVertex3f(-x,-y, z);
  69.  
  70.     glTexCoord2f(1, 0); glVertex3f(x, -y, -z);
  71.     glTexCoord2f(1, 1); glVertex3f(x, y, -z);
  72.     glTexCoord2f(0, 1); glVertex3f(x, y, z);
  73.     glTexCoord2f(0, 0); glVertex3f(x, -y, z);
  74.  
  75.     glTexCoord2f(1, 0); glVertex3f(-x, -y, -z);
  76.     glTexCoord2f(1, 1); glVertex3f(-x, -y, z);
  77.     glTexCoord2f(0, 1); glVertex3f(-x, y, z);
  78.     glTexCoord2f(0, 0); glVertex3f(-x, y, -z);
  79.   glEnd;
  80. end;
  81.  
  82. procedure TMainForm.FormCreate(Sender: TObject);
  83. begin
  84.   GB_Pictures.doublebuffered := true;
  85.   Degy := -45;
  86.   Front.Canvas.rectangle(0, 0, Front.width, Front.Height);
  87.   SideL.Canvas.rectangle(0, 0, SideL.width, SideL.Height);
  88.   SideR.Canvas.rectangle(0, 0, SideR.width, SideR.Height);
  89.   Back.Canvas.rectangle(0, 0, Back.width, Back.Height);
  90.   Top.Canvas.rectangle(0, 0, Top.width, Top.Height);
  91.   Bottom.Canvas.rectangle(0, 0, Bottom.width, Bottom.Height);
  92.   InitOpenGL;
  93.   DC := GetDC(Preview.Handle);
  94.   RC := CreateRenderingContext(DC, [opDoubleBuffered], 32, 24, 0, 0, 0, 0);
  95.   ActivateRenderingContext(DC, RC);
  96.  
  97.   glEnable(GL_CULL_FACE);
  98.   glEnable(GL_TEXTURE_2D);
  99.  
  100.   glDepthFunc(GL_LESS);
  101.  
  102.   glClearColor(1, 1, 1, 0);
  103.  
  104.   glMatrixMode(GL_PROJECTION);
  105.   glLoadIdentity;
  106.   glViewPort(0, 0, Preview.Width, Preview.Height);
  107.   gluPerspective(45, Preview.Width / Preview.Height, 0.1, 128);
  108.   glMatrixMode(GL_MODELVIEW);
  109.   glLoadIdentity;
  110.  
  111.   TFront := TglBitmap2D.Create;
  112.   TFront.LoadFromFile('TX3.jpg');
  113.   TFront.GenTexture;
  114. end;
  115.  
  116. procedure TMainForm.FormDestroy(Sender: TObject);
  117. begin
  118.   DeactivateRenderingContext;
  119.   wglDeleteContext(RC);
  120.   ReleaseDC(Handle, DC);
  121.   TFront.Free;
  122. end;
  123.  
  124. procedure TMainForm.ApplicationEvents1Idle(Sender: TObject;
  125.   var Done: Boolean);
  126. begin
  127.   Done := false;
  128.  
  129.   if (smoothlines = true) then
  130.     glEnable(GL_LINE_SMOOTH) else
  131.       glDisable(GL_LINE_SMOOTH);
  132.  
  133.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  134.  
  135.   glLoadIdentity;
  136.   glTranslatef(0, 0, -3.25);
  137.  
  138.   glScalef(FZoom, FZoom, FZoom);
  139.   glRotatef(degx, 1, 0, 0);
  140.   glRotatef(degy, 0, 1, 0);
  141.  
  142.   glColor3f(0, 0, 0);
  143.   glLineWidth(linewidth);
  144.   glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
  145.   DrawQuad(0.75, 1, 0.2);
  146.  
  147.   SwapBuffers(DC);
  148. end;
  149.  
  150. procedure TMainForm.RotLClick(Sender: TObject);
  151. begin
  152.   dec(DegY, 5);
  153.   if DegY = -360 then
  154.     DegY := 0;
  155.   y_l.Caption := 'y: ' + inttostr(DegY);
  156. end;
  157.  
  158. procedure TMainForm.RotUClick(Sender: TObject);
  159. begin
  160.   dec(DegX, 5);
  161.   if DegX = -360 then
  162.     DegX := 0;
  163.   x_l.Caption := 'x: ' + inttostr(-DegX);
  164. end;
  165.  
  166. procedure TMainForm.RotDClick(Sender: TObject);
  167. begin
  168.   inc(DegX, 5);
  169.   if DegX = 360 then
  170.     DegX := 0;
  171.   x_l.Caption := 'x: ' + inttostr(-DegX);
  172. end;
  173.  
  174. procedure TMainForm.RUClick(Sender: TObject);
  175. begin
  176.   dec(DegX, 5);
  177.   if DegX = -360 then
  178.     DegX := 0;
  179.   x_l.Caption := 'x: ' + inttostr(-DegX);
  180. end;
  181.  
  182. procedure TMainForm.RRClick(Sender: TObject);
  183. begin
  184.   inc(DegY, 5);
  185.   if DegY = 360 then
  186.     DegY := 0;
  187.   y_l.Caption := 'y: ' + inttostr(DegY);
  188. end;
  189.  
  190. procedure TMainForm.RLClick(Sender: TObject);
  191. begin
  192.   dec(DegY, 5);
  193.   if DegY = -360 then
  194.     DegY := 0;
  195.   y_l.Caption := 'y: ' + inttostr(DegY);
  196. end;
  197.  
  198. procedure TMainForm.RDClick(Sender: TObject);
  199. begin
  200.   inc(DegX, 5);
  201.   if DegX = 360 then
  202.     DegX := 0;
  203.   x_l.Caption := 'x: ' + inttostr(-DegX);
  204. end;
  205.  
  206. procedure TMainForm.ZIClick(Sender: TObject);
  207. begin
  208.   fzoom := fzoom + 0.05;
  209.   if fzoom > 1.5 then
  210.     fzoom := 1.5;
  211.   z_l.Caption := floattostr(round(fzoom * 100)) + '%';  
  212. end;
  213.  
  214. procedure TMainForm.ZOClick(Sender: TObject);
  215. begin
  216.   fzoom := fzoom - 0.05;
  217.   if fzoom < 0.5 then
  218.     fzoom := 0.5;
  219.   z_l.Caption := floattostr(round(fzoom * 100)) + '%';    
  220. end;
  221.  
  222. procedure TMainForm.ComboBox1Change(Sender: TObject);
  223. begin
  224.   linewidth := strtoint(combobox1.Items[combobox1.itemindex]);
  225. end;
  226.  
  227. procedure TMainForm.Button1Click(Sender: TObject);
  228. begin
  229.   if savedialog1.execute then
  230.     GLScreenShot_BMP_1(savedialog1.filename);
  231. end;
  232.  
  233. {...}
  234.  


Die Unit ist von dir, oder ? Respekt, ist echt kompfortable programmiert, man kann mit allem arbeiten, echt gutes Teil ! (wenn man weiß wies funzt :lol:)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 24, 2005 19:10 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Danke für die Blumen hört man gerne, dass es gut durchdacht ist. Aber es kann noch ein paar dinge mehr. ;-)

Ein paar Anpassungen für deinen Code.

Code:
  1. procedure DrawQuad(x, y, z: glfloat);
  2. begin
  3.   TFront.Bind;
  4.   // die Textur muss außer von glBegin und glEnd gebunden werden. Innerhalb ist nicht zulässig.
  5.   // Um eine neue Textur auf eine Fläche zu binden musst du erst das Zeichnen der Fläche beenden und wieder von Neuem beginnen.
  6.   glBegin(GL_QUADS);
  7.   ...
  8.   glEnd;
  9.  
  10.   TBack.Bind;
  11.   glBegin(GL_QUADS);
  12.   ...
  13.   glEnd;
  14. end
  15.  
  16. procedure TMainForm.FormDestroy(Sender: TObject);
  17. begin
  18.   TFront.Free;
  19.   // Vor dem löschen des Kontextes die Textur frei geben.
  20.   DeactivateRenderingContext;
  21.   wglDeleteContext(RC);
  22.   ReleaseDC(Handle, DC);
  23. end;
  24.  
  25. procedure TMainForm.ApplicationEvents1Idle(Sender: TObject;
  26. var Done: Boolean);
  27. begin
  28.   Done := false;
  29.  
  30.   // glLineWidth(linewidth);
  31.   // glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
  32.   // sonst ist die textur nicht sinnvoll sichtbar
  33. end;
  34.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 24, 2005 19:20 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
habs mir schon gedacht (und zwar alles :D), aber ich würde gerne meine ränder behalten .... weil box und hintergrund weiß ...

die textur sieht auch sehr ähmm pixelig aus ziemlich übel, wie kann ich das ändern ?

sie scheint ebenso gedreht und gespiegelt :?


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Mai 24, 2005 20:04 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Deine Texturgröße muss eine Potenz von 2 sein. Also 1, 2, 4, 8, 16, 32, 64, 128, 256, 512 usw. Alles andere ist nicht zulässig. Und Spiegelungen kannst du entweder durch anpassen der Texturkoordinaten erreichen oder durch anpassen der Textur. Mit FTex.FlipVert und FTex.FlipHorz kannst du die Textur spiegeln. Das muss zwischen dem Laden der Datei und GenTexture erfolgen. Ich persönlich würde aber eher die Koordinaten anpassen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mai 25, 2005 13:59 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
wenn ich alle punkte um eins weiter schiebe erhalte ich doch eine drehung von 90° oder ?


jo, aber wie spiegele ich dann durch koordinaten bearbeiten ?

jo hab ich auch hinbekommen (punkte vertauschen)


und wie krieg ich die auflösung/qualität höher ?

(schon gemerkt ? ich bin F34r0fTh3D4rk ^^)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mai 25, 2005 14:21 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Dachte ich mir schon fast, das die Quellcode so verdammt ähnlich aussahen. Aber hast du hier nicht auch noch nen F34r0fTh3D4rk Account?

Wie meinst du das mit alle Punkte? Meinst du jetzt die Texturkoordinaten? Und ja. Je nachdem wie du die dort angibst kannst du die Textur spiegeln oder eben drehen. Und weiterschieben dürfte da sogar das sein wie du das haben willst.

Original
Code:
  1.   glBegin(GL_QUADS);
  2.     glTexCoord2f(0, 1); glVertex3f(- 3, - 3, 0);
  3.     glTexCoord2f(1, 1); glVertex3f(  3, - 3, 0);
  4.     glTexCoord2f(1, 0); glVertex3f(  3,   3, 0);
  5.     glTexCoord2f(0, 0); glVertex3f(- 3,   3, 0);
  6.   glEnd;


Um Horizontal zu spiegeln musst du bei der ersten Reihe (S Wert bei glTexCoord) aus der 0 eine 1 machen und aus der 1 eine 0. Bei Vertikal Entsprechend die zweite Reihe (T Wert bei glTexCoord).

Beispuel für Horizontal
Code:
  1.   glBegin(GL_QUADS);
  2.     glTexCoord2f(1, 1); glVertex3f(- 3, - 3, 0);
  3.     glTexCoord2f(0, 1); glVertex3f(  3, - 3, 0);
  4.     glTexCoord2f(0, 0); glVertex3f(  3,   3, 0);
  5.     glTexCoord2f(1, 0); glVertex3f(- 3,   3, 0);
  6.   glEnd;


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mai 25, 2005 14:23 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Achja. Qualitativ besser bekommst du die nur, wenn du andere Texturen benutzt. Mit OpenGL oder einem Grafikprogramm geht so etwas nicht. Also du musst dann andere Texturen verwenden. Bessere sozusagen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mai 25, 2005 17:07 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
aber wie machen das andere opengl spiele, bei denen sind manche texturen auch nur 64 * 64 und haben die qualität des originals, bei mir ist das nicht der fall :oops:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mai 25, 2005 17:38 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Dazu müsste ich wissen was du vor hast und wie die Texturen aussehen. Bzw. Wie es jetzt aussieht (Bild) und was daran nicht stimmt.

PS: Lass uns mal auf ein Forum beschränken. (Ich würde sagen das hier)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mai 25, 2005 18:02 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
ok ich hab mal einen screenshot gemacht, ich habe nämlich im delphi forum ein programm gefunden um Produkt Boxen zu erstellen, das war jetzt kein 3d (leider) und das andere Programm was ich gefunden habe erstellt Bilder in minigröße.

Also wollte ich selbst ein schreiben mit opengl, weil ich eine 3d ansicht brauchte, diese kann ruhig erst pixelig aussehen, damit man die ansicht leichter drehen und zoomen kann, dann könnte man das bild rendern (darf auch 10 sekunden dauern ^^) (das prinzip von cinema 4d und co eben)

Ich würde aber gerne die Ränder behalten, damit ich so eine Art "Skizzen-Look" habe, die Strichbreite lässt sich dann einstellen:

screenshot von der version, ohne texturen ist hier (wegen den strichen ^^): http://teamelectronix.te.funpic.de/?m=d ... how&fid=15

noch ne frage, ich möchte, dass wenn die datei nicht gefunden wurde, ein bitmap geladen wird, welches ich erstellt habe (programm intern, jedoch wird einfach immer die nächstgelegene Textur genommen, warum ?)

Code:
  1.  
  2.   empty := TBitmap.create;
  3.   empty.width := 10;
  4.   empty.Height := 10;
  5.   empty.Canvas.rectangle(0, 0, 10, 10);
  6.  
  7.   TFront := TglBitmap2D.Create;
  8.   if Fileexists('Front.bmp') then
  9.     begin
  10.       TFront.LoadFromFile('Front.bmp');
  11.       TFront.GenTexture;
  12.     end else
  13.       TFront.AssignToBitmap(empty);
  14.  
  15.   TBack := TglBitmap2D.Create;
  16.   if Fileexists('Back.bmp') then
  17.     begin
  18.       TBack.LoadFromFile('Back.bmp');
  19.       TBack.GenTexture;
  20.     end else
  21.       TBack.AssignToBitmap(empty);
  22.  
  23.   TLeft := TglBitmap2D.Create;
  24.   if Fileexists('Left.bmp') then
  25.     begin
  26.       TLeft.LoadFromFile('Left.bmp');
  27.       TLeft.GenTexture;
  28.     end else
  29.       TLeft.AssignToBitmap(empty);
  30.  
  31.   TRight := TglBitmap2D.Create;
  32.   if Fileexists('Rightt.bmp') then
  33.     begin
  34.       TRight.LoadFromFile('Side.bmp');
  35.       TRight.GenTexture;
  36.     end else
  37.       TRight.AssignToBitmap(empty);
  38.  
  39.   TTop := TglBitmap2D.Create;
  40.   if Fileexists('Top.bmp') then
  41.     begin
  42.       TTop.LoadFromFile('Top.bmp');
  43.       TTop.GenTexture;
  44.     end else
  45.       TTop.AssignToBitmap(empty);
  46.  
  47.   TBottom := TglBitmap2D.Create;
  48.   if Fileexists('Bottom.bmp') then
  49.     begin
  50.       TBottom.LoadFromFile('Bottom.bmp');
  51.       TBottom.GenTexture;
  52.     end else
  53.       TBottom.AssignToBitmap(empty);
  54.  


Code:
  1.  
  2. procedure DrawQuad(x, y, z: glfloat);
  3. begin
  4.   TFront.Bind;
  5.   glBegin(GL_QUADS);
  6.     glTexCoord2f(0, 1); glVertex3f(-x, -y, z);
  7.     glTexCoord2f(1, 1); glVertex3f(x, -y, z);
  8.     glTexCoord2f(1, 0); glVertex3f(x, y, z);
  9.     glTexCoord2f(0, 0); glVertex3f(-x, y, z);
  10.   glEnd;
  11.  
  12.   TBack.Bind;
  13.   glBegin(GL_QUADS);
  14.     glTexCoord2f(1, 1); glVertex3f(-x, -y, -z);
  15.     glTexCoord2f(1, 0); glVertex3f(-x, y, -z);
  16.     glTexCoord2f(0, 0); glVertex3f(x, y, -z);
  17.     glTexCoord2f(0, 1); glVertex3f(x, -y, -z);
  18.   glEnd;
  19.  
  20.   TTop.Bind;
  21.   glBegin(GL_QUADS);
  22.     glTexCoord2f(0, 0); glVertex3f(-x, y, -z);
  23.     glTexCoord2f(0, 1); glVertex3f(-x, y, z);
  24.     glTexCoord2f(1, 1); glVertex3f(x, y, z);
  25.     glTexCoord2f(1, 0); glVertex3f(x, y, -z);
  26.   glEnd;
  27.  
  28.   TBottom.Bind;
  29.   glBegin(GL_QUADS);
  30.     glTexCoord2f(0, 1); glVertex3f(-x, -y, -z);
  31.     glTexCoord2f(1, 1); glVertex3f(x, -y, -z);
  32.     glTexCoord2f(1, 0); glVertex3f(x, -y, z);
  33.     glTexCoord2f(0, 0); glVertex3f(-x,-y, z);
  34.   glEnd;
  35.  
  36.   TLeft.Bind;
  37.   glBegin(GL_QUADS);
  38.     glTexCoord2f(0, 1); glVertex3f(-x, -y, -z);
  39.     glTexCoord2f(1, 1); glVertex3f(-x, -y, z);
  40.     glTexCoord2f(1, 0); glVertex3f(-x, y, z);
  41.     glTexCoord2f(0, 0); glVertex3f(-x, y, -z);
  42.   glEnd;
  43.  
  44.   TRight.Bind;
  45.   glBegin(GL_QUADS);
  46.     glTexCoord2f(1, 1); glVertex3f(x, -y, -z);
  47.     glTexCoord2f(1, 0); glVertex3f(x, y, -z);
  48.     glTexCoord2f(0, 0); glVertex3f(x, y, z);
  49.     glTexCoord2f(0, 1); glVertex3f(x, -y, z);
  50.   glEnd;
  51. end;
  52.  


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mai 25, 2005 18:44 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Irgendwie kann ich dir gerade nicht so ganz folgen. Kann auch sein, dass ich gerade nicht so super aufnahmefähig bin.

Also das mit dem Fertig rendern ist so eine Sache. Ich befürchte du musst das entweder mit OpenGL in einer richtig großen Größe rendern. Und dann musst du Teilbilder rendern. Was nicht sonderlich einfach ist. Oder du musst einen raytracer (also einen richtigen Renderer) implementieren. Was mit sicherheit auch nicht einfacher sein dürfte.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mai 25, 2005 18:51 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
ähm raytracing ist doch die rendermethode die fiktive strahlen aussendet, prüft was zu sehen und zu rendern ist, und das dann rendert, kann man da nich noch n paar sachen wie mipmapping und antialising verbessern, dazupacken oder so ? warum ist das denn so pixelig ? bei half life siehts ja besser aus (ok bei quake 2 isses auch nich viel besser aber besser), kA ob man bei doom2 schon texte erkennen konnte aber ich denke schon :lol:

Das muss doch verbesserbar sein, in den Tutorials sehen die Texturen ja auch anständig aus ?

Und das Quadrat kann auch nicht zu klein sein, dann würde das MipMapping das ja beheben. :?


ach ja, und warum wird meine bitmap nicht geladen, hab ich die falsche prozedur genommen ?

(Wenn ich meine Graka Power AA auf 100% stelle siehts schonmal anständig aus (man kann jedenfalls den Text lesen), es hat aber nunmal net jeder ne 256 mb graka :?)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mai 26, 2005 14:26 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
ok das problem schieben wir mal nach hinten, wie kann ich trotzdem meine striche bekommen, ich hab schon ein paar sachen probiert, es muss auch irgendwie gehen, aber ich kriegs net so ganz gebacken :lol:


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 37 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 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.014s | 15 Queries | GZIP : On ]