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

Aktuelle Zeit: Fr Jul 18, 2025 04:58

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



Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Graphikfehler - Nur bei mir?
BeitragVerfasst: So Apr 09, 2006 15:32 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mär 21, 2006 20:03
Beiträge: 21
Programmiersprache: Delphi, C++
Hi,

ich beschäftige mich derzeit mit der OpenGL-Prorammierung. Leider ist in einem Test-Programm ein Graphikfehler (eigentlich 2).

Und zwar:
Wenn ich mich durch den Raum bewege, ist an einer bestimmten Stelle die hälfte schwarz. Se wird einfach nicht mehr angezeigt.
Das tritt aber nur dann auf, wenn ich Culling einschalte..

Der andere Graphikfehler ist, dass eine Textur falsch dargestellt wird. Sie ist rot - statt Blau.

Ich habe das Testprogramm auf anderen Rechnern probiert, da treten diese Fehler nicht auf. Liegt das an meiner Graphikkarte oder kann es am Quellcode liegen?

Danke im vorraus.
aniheX

// Edit:
Quellcode's

TForm1.Create
Code:
  1.  
  2. procedure TForm1.FormCreate(Sender: TObject);
  3. begin
  4.   myDC:= GetDC(Handle);
  5.   SetupPixelFormat;
  6.   myRC:= wglCreateContext(myDC);
  7.   wglMakeCurrent(myDC, myRC);
  8.   glEnable(GL_DEPTH_TEST);
  9.   glLoadIdentity;
  10.   glenable(gl_texture_2d);
  11.   Ini_Walls;
  12.   Ini_textures;
  13.   ShowCursor(False);
  14.   AlreadyPainting := False;
  15.   glEnable(GL_CULL_FACE);
  16.   glFrontFace(GL_CCW);
  17.   ChangeResolution(1024,768,32,60); // extrene Routine zum ändern der Auflösung
  18.   Resize;
  19. end;
  20.  


TForm1.SetupPixelFormat
Code:
  1.  
  2. procedure TForm1.SetupPixelFormat;
  3. var
  4.   hHeap: THandle;
  5.   nColors, i: Integer;
  6.   lpPalette : PLogPalette;
  7.   byRedMask, byGreenMask, byBlueMask: Byte;
  8.   nPixelFormat: Integer;
  9.   pfd: TPixelFormatDescriptor;
  10. begin
  11.   FillChar(pfd, SizeOf(pfd), 0);
  12.   with pfd do begin
  13.     nSize     := sizeof(pfd);               // Länge der pfd-Struktur
  14.     nVersion  := 1;                         // Version
  15.     dwFlags   := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or
  16.                  PFD_DOUBLEBUFFER;          // Flags
  17.     iPixelType:= PFD_TYPE_RGBA;             // RGBA Pixel Type
  18.     cColorBits:= 24;                        // 24-bit color
  19.     cDepthBits:= 32;                        // 32-bit depth buffer
  20.     iLayerType:= PFD_MAIN_PLANE;            // Layer Type
  21.   end;
  22.   nPixelFormat:= ChoosePixelFormat(myDC, @pfd);
  23.   SetPixelFormat(myDC, nPixelFormat, @pfd);
  24.                                             // Farbpalettenoptimierung wenn erforderlich
  25.   DescribePixelFormat(myDC, nPixelFormat,
  26.                       sizeof(TPixelFormatDescriptor),pfd);
  27.   if ((pfd.dwFlags and PFD_NEED_PALETTE) <> 0) then begin
  28.     nColors  := 1 shl pfd.cColorBits;
  29.     hHeap    := GetProcessHeap;
  30.     lpPalette:= HeapAlloc
  31.        (hHeap,0,sizeof(TLogPalette)+(nColors*sizeof(TPaletteEntry)));
  32.     lpPalette^.palVersion := $300;
  33.     lpPalette^.palNumEntries := nColors;
  34.     byRedMask  := (1 shl pfd.cRedBits) - 1;
  35.     byGreenMask:= (1 shl pfd.cGreenBits) - 1;
  36.     byBlueMask := (1 shl pfd.cBlueBits) - 1;
  37.     for i := 0 to nColors - 1 do begin
  38.       lpPalette^.palPalEntry[i].peRed  :=
  39.         (((i shr pfd.cRedShift)  and byRedMask)  *255)DIV byRedMask;
  40.       lpPalette^.palPalEntry[i].peGreen:=
  41.         (((i shr pfd.cGreenShift)and byGreenMask)*255)DIV byGreenMask;
  42.       lpPalette^.palPalEntry[i].peBlue :=
  43.         (((i shr pfd.cBlueShift) and byBlueMask) *255)DIV byBlueMask;
  44.       lpPalette^.palPalEntry[i].peFlags:= 0;
  45.     end;
  46.     myPalette:= CreatePalette(lpPalette^);
  47.     HeapFree(hHeap, 0, lpPalette);
  48.     if (myPalette <> 0) then begin
  49.       SelectPalette(myDC, myPalette, False);
  50.       RealizePalette(myDC);
  51.     end;
  52.   end;
  53. end;
  54.  


TForm1.IniWalls
Code:
  1.  
  2. procedure TForm1.Ini_Walls;
  3. begin
  4.   Walls := Tmgl_Walls.Create;
  5.  
  6.   // Raum 1
  7.   //            X1 Y1 Z1 X2 Y2 Z2 X3 Y3 Z3 X4 Y4 Z4
  8.   Walls.AddWall(-4,-3, 8,-4,-3,-8,-4, 2,-8,-4, 2, <!-- s8) --><img src=\"{SMILIES_PATH}/icon_cool.gif\" alt=\"8)\" title=\"Cool\" /><!-- s8) -->; // Linke Wand
  9.   Walls.AddWall( 4, 2, 8, 4, 2,-4, 4,-3,-4, 4,-3, <!-- s8) --><img src=\"{SMILIES_PATH}/icon_cool.gif\" alt=\"8)\" title=\"Cool\" /><!-- s8) -->; // Rechte Wand I
  10.   Walls.AddWall( 4, 2,-7, 4, 2,-8, 4,-3,-8, 4,-3,-7); // Rechte Wand II
  11.   Walls.AddWall(-4,-3,-8, 4,-3,-8, 4, 2,-8,-4, 2,-8); // Hintere Wand
  12.   Walls.AddWall(-4,-3, 8, 4,-3, 8, 4,-3,-8,-4,-3,-8, 8, 8, True, 2); // Fussboden
  13.   Walls.AddWall(-4, 2,-8, 4, 2,-8, 4, 2, 8,-4, 2, 8, True, 1); // Decke
  14.   Walls.AddWall(-4, 2, 8, 4, 2, 8, 4,-3, 8,-4,-3, <!-- s8) --><img src=\"{SMILIES_PATH}/icon_cool.gif\" alt=\"8)\" title=\"Cool\" /><!-- s8) -->; // Vordere Wand
  15.   // |--
  16.  
  17.   // Durchgang 1
  18.   //            X1 Y1 Z1 X2 Y2 Z2 X3 Y3 Z3 X4 Y4 Z4
  19.   Walls.AddWall( 4,-3,-7, 5,-3,-7, 5, 2,-7, 4, 2,-7); // Hintere Wand
  20.   Walls.AddWall( 4,-3,-4, 4,-3,-4, 4,-3,-7, 4,-3,-7, True, 3); // Fussboden
  21.   Walls.AddWall( 4,-2.9,-4, 5,-2.9,-4, 5,-2.9,-7, 4,-2.9,-7, True, 3); // Fussboden
  22.   Walls.AddWall( 4, 2,-7, 5, 2,-7, 5, 2,-4, 4, 2,-4); // Decke
  23.   Walls.AddWall( 4,-3,-4, 5,-3,-4, 5, 2,-4, 4, 2,-4); // Vordere Wand
  24. end;
  25.  


TForm1.render
Code:
  1.  
  2. procedure Tform1.render;
  3. var
  4.   Wall, Punkt : cardinal;
  5.   t_X, t_y, t_z : variant;
  6.   Start, Ende : Cardinal;
  7. begin
  8.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  9.   glLoadIdentity;
  10.  
  11.   CheckKeyboard;
  12.  
  13. //  glulookat(xpos,0,-zpos, 0,Rotation,0, 0,1,0);
  14.   glrotate(rotation,1,0,0);
  15.   glTranslate(xpos, 1, zpos); //Die entgültige Bewegung  glTranslatef(-5,0,-10);}
  16.  
  17.   Start := GetTickCount;
  18.   If Not TerminateIt then
  19.   begin
  20.     for Wall := 0 to Walls.Count-1 do
  21.     begin
  22.       If Walls.Walls[Wall].Visible Then
  23.       begin
  24.         Textures[Walls.Walls[Wall].Textur].Bind;
  25.         Textures[Walls.Walls[Wall].Textur].FlipHorz;
  26.         glBegin(gl_quads);
  27.           For Punkt := 0 To 3 Do
  28.           Begin
  29.             glColor4f(Walls.Walls[Wall].Points[Punkt].Color.Red , Walls.Walls[Wall].Points[Punkt].Color.Green, Walls.Walls[Wall].Points[Punkt].Color.Blue, 1);
  30. //            glColor3f(0.5,0.5,0.5);
  31.             case Punkt of
  32.               0:
  33.               Begin
  34.                 glTexCoord2f(0,0);
  35.               end;
  36.               1:
  37.               Begin
  38.                 gltexCoord2f(1,0);
  39.               end;
  40.               2:
  41.               Begin
  42.                 glTexCoord2f(1,1);
  43.               end;
  44.               3:
  45.               Begin
  46.                 glTexCoord2f(0,1);
  47.               end;
  48.             end;
  49.             glVertex3f(Walls.Walls[Wall].Points[Punkt].X, Walls.Walls[Wall].Points[Punkt].Y, Walls.Walls[Wall].Points[Punkt].Z);
  50.             If TerminateIt then break;
  51.           End;
  52.         glEnd;
  53.         If TerminateIt then break;
  54.       end;
  55.     end;
  56.  
  57.     glTranslate(0, -2, -zpos); //Die entgültige Bewegung  glTranslatef(-5,0,-10);}
  58. //    glrotate(0,0,0,0);
  59.     glBegin(gl_quads);
  60.       glColor3f(random, Random, Random);
  61.       glVertex3f(-0.5-xpos, -1, -8);
  62.       glVertex3f(0.5-xpos, -1, -8);
  63.       glVertex3f(0.5-xpos, 0, -8);
  64.       glVertex3f(-0.5-xpos, 0, -8);
  65.     glEnd;
  66.  
  67.   end;
  68.   Ende := GetTickCount;
  69.   If (Ende-Start) > Max Then Max := Ende-Start;
  70. //  Form1.caption := IntToStr(Zpos);
  71.  
  72.   t_x := Xpos;
  73.   t_y := Ypos;
  74.   t_z := Zpos;
  75.   Form1.caption := t_z;
  76.                                                       //hier kommen die Objekte hin
  77.   SwapBuffers(form1.myDC);
  78. end;


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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Apr 09, 2006 17:26 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Die Farbverschiebung könnte ich mir durch einen RGB vs. BGR Fehler erklären. Welches Format hat denn die Textur.

Das mit dem Abschneiden sieht nach Clipping-Fehlern aus. Hab gerade keine Zeit um den Code genauer zu betrachten....Aber hier gibts ja auch noch andere.... 8)

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Apr 09, 2006 17:37 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 26, 2002 22:12
Beiträge: 259
Wohnort: Dresden
Du solltest nach Möglichkeit erst die Auflösung ändern und dann den Renderingkontext erstellen.

_________________
Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jederman ist überzeugt, dass er genug davon habe.
Rene Descartes, frz. Mathematiker u. Philosoph, 1596-1650


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Apr 09, 2006 18:15 
Offline
DGL Member
Benutzeravatar

Registriert: So Okt 26, 2003 20:07
Beiträge: 249
dadurch das die anderen texturen ja richtig zu sein scheinen, würde ich mal nen fehler in deiner pixelformatroutine (btw: wozu machst du die eigentlich?) ausschließen. sollte die textur zufällig im tga-format mit paint shop pro gespeichert worden sein, dann könntes daran liegen, damit hatte ich auch probs.
es sieht wirklich ganz stark nach rgb-bgr aus.

gruß

_________________
I'm not the signature, I'm just cleaning the floor...

Derzeitiges Projekt:
FireBlade Particle Engine (Release R2 2009.06.29)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Apr 09, 2006 18:23 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Kyro hat geschrieben:
dadurch das die anderen texturen ja richtig zu sein scheinen, würde ich mal nen fehler in deiner pixelformatroutine (btw: wozu machst du die eigentlich?) ausschließen. sollte die textur zufällig im tga-format mit paint shop pro gespeichert worden sein, dann könntes daran liegen, damit hatte ich auch probs.
es sieht wirklich ganz stark nach rgb-bgr aus.

Schreib mal bitte was zu dem Fehler, da ich selber PSP benutze.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Apr 09, 2006 19:23 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mär 21, 2006 20:03
Beiträge: 21
Programmiersprache: Delphi, C++
Kyro hat geschrieben:
dadurch das die anderen texturen ja richtig zu sein scheinen, würde ich mal nen fehler in deiner pixelformatroutine (btw: wozu machst du die eigentlich?) ausschließen. sollte die textur zufällig im tga-format mit paint shop pro gespeichert worden sein, dann könntes daran liegen, damit hatte ich auch probs.
es sieht wirklich ganz stark nach rgb-bgr aus.

gruß

1.) Das Bild ist im Jpeg Format.
2.) Die Grundgerüst hab ich aus einem Tutorial, daher das Pixelsetup

Könnte es ggf. besser werden, wenn ich ich die dglopengl nehme?

// Edit:
Zitat:
Du solltest nach Möglichkeit erst die Auflösung ändern und dann den Renderingkontext erstellen.

Werd ich versuchen. Danke für den Tipp.

Das mit dem RGB vs. BGR:
Auf anderen Rechnern geht das einwandfrei, nur bei mir nicht :(


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Apr 09, 2006 21:03 
Offline
DGL Member
Benutzeravatar

Registriert: So Okt 26, 2003 20:07
Beiträge: 249
i0n0s hat geschrieben:
Schreib mal bitte was zu dem Fehler, da ich selber PSP benutze.

kann auch nicht soviel dazu schreiben - habe bisher afaik ausschließlich tga's mit alphakanal probiert.
die mit psp gespeicherten dateien waren farbverfälscht. nen neues abspeichern mit gimp hats "repariert"

aniheX hat geschrieben:
Könnte es ggf. besser werden, wenn ich ich die dglopengl nehme?


der dgl header ist auf jedenfall up-to-date und vollständig.
welchen benutzt du im moment? der standard delphi header ist nicht so toll.

gruß

_________________
I'm not the signature, I'm just cleaning the floor...

Derzeitiges Projekt:
FireBlade Particle Engine (Release R2 2009.06.29)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 18, 2006 18:37 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mär 21, 2006 20:03
Beiträge: 21
Programmiersprache: Delphi, C++
Ich habe mittlerweile eine andere Graphikkarte, die das richtig darstellt.
Das sieht man gut daran, dass die angebotenen Downloads ebenfalls nicht mit der alten Graphikkarte funktionierten...

Das Problem war also meine Graphikkarte...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Apr 18, 2006 19:33 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Rein Interessehalber... Was war das denn für ne Grafikkarte?

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 19, 2006 10:22 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mär 21, 2006 20:03
Beiträge: 21
Programmiersprache: Delphi, C++
Es war eine Sis 3D. Die genaue Bezeichnung hab ich nicht, da ich sie gebraucht bekommen habe und nie wirklich nachgesehen habe...

Meine jetzige ist eine nVidia GeForce4MX420. Sie ist auf jeden Fall besser, wenn auch nicht mehr die neueste ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 19, 2006 11:14 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
muahahaha! Ich hatte bis vor gar nicht allzu langer Zeit noch eine GeForce 2 MX ;) jetzt ist es immerhin eine GeForceFX 5600 Ultra bzw. hier im Notebook eine GeForceFX 5200 GO. Auch keine TOP-Modelle, die 5600er hat aber nur 80 Euro gekostet und war allemal besser als meine 4 Jahre alte Geforce 2 MX ;)

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
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.011s | 16 Queries | GZIP : On ]