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

Aktuelle Zeit: Fr Jul 18, 2025 11:06

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



Ein neues Thema erstellen Auf das Thema antworten  [ 25 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 07, 2008 10:52 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
glView: Bei der neuen Version kann ich dir das leider nicht direkt sagen. Aber in der älteren war das "Erweiterungen" -> "Implementierte Spezifikationen" -> "Verschiedene Limitierungen" -> "Line width range 1,0000 to 63,0000"
Die Struktur müsste aber so ähnlich sein denke ich.

OpenGL Fehler: Du musst jetzt versuchen den Fehler näher einzugrenzen, da ein "Invalid Value" für zwei unterschiedliche Methoden unterschiedliche Bedeutungen hat. Also ich packe mir die Überprüfung gerne in eine Methode und rufe die Methode zwischen den OpenGL Aufrufen dann mal auf. Zu erst grob und dann an diversen Stellen dichter um den Fehler eingrenzen zu können. Das ist leider die einzige Möglichkeit wie man die OpenGL Fehler finden kann.
Wenn du dann weißt welche Methode den Fehler produziert hat musst du in die Manual der Funktion schauen und dessen Bedeutung zu erfahren. Oder bei uns ins Wiki.

Linien: Hattest du schon mal OpenGL Linien auf deinem System? Alternativ kannst du auch mal den Softwarerenderer benutzen. Also "Eigenschaften von Anzeige" > "Einstellungen" > "Erweitert" > "Problembehebung" und dann Regler hardwarebeschleunigung so weit nach links bis DirectDraw/Direct3D deaktiviert wurde. Dann benutzt du die Software implementation von Windows. Nach dem Testen aber wieder nach rechts schieben.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 07, 2008 12:34 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 27, 2005 12:44
Beiträge: 393
Wohnort: Berlin
Programmiersprache: Java, C++, Groovy
Hallo Jann1k,

hmm...was mich bei deinem Quellcode noch gewundert hat :

Code:
  1. glbegin(GL_lines);


ist nur eine dumme Vermutung, aber ich nehm mal an, du hast in deinem Programm GL_LINES groß geschrieben, sonst hätte es einen Kompilierfehler gegeben.

Viele Grüße
dj3hut1

_________________
Wenn Gauß heute lebte, wäre er ein Hacker.
Peter Sarnak, Professor an der Princeton University


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 07, 2008 13:45 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
dj3hut1 hat geschrieben:
ist nur eine dumme Vermutung, aber ich nehm mal an, du hast in deinem Programm GL_LINES groß geschrieben, sonst hätte es einen Kompilierfehler gegeben.

Sind wir nicht in good old case-insensitive Delphi?

Ich würde sagen, versuch mal genau rauszufinden, wo das invalid Value auftritt oder gib uns mehr Code/ne Exe. Nicht lokal nachvollziehbare Probleme sind per Fernberatung immer schwer auszumachen.

Eine weitere Möglichkeit wäre noch GLIntercept zu verwenden. Dessen Logs sind für gewöhnlich sehr aussagekräftig (und umfangreich).

MfG


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Aug 07, 2008 21:47 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 23, 2007 18:03
Beiträge: 49
Wohnort: Dortmund-Scharnhorst
Okay, kurzes Update von mir:

glView gibt mir als mögl. Linienrößen folgendes:

Line width range: 0.500000 to 10.000000

sollte also okay sein.


Der Fehler "invalid value" tritt auf, weil ich Texturen lade die nicht POT2 konform sind, ein auskommentieren der fehleraften Texturen entfernt den Fehler zwar, ändert aber nichts an der nicht vorhandenen Linie.

[quote]
Linien: Hattest du schon mal OpenGL Linien auf deinem System? Alternativ kannst du auch mal den Softwarerenderer benutzen. Also "Eigenschaften von Anzeige" > "Einstellungen" > "Erweitert" > "Problembehebung" und dann Regler hardwarebeschleunigung so weit nach links bis DirectDraw/Direct3D deaktiviert wurde. Dann benutzt du die Software implementation von Windows. Nach dem Testen aber wieder nach rechts schieben. [/quote]

Hat leider auch nichts gebracht

Ich werde jetzt den Quelltext ein bisschen umstellen, damit alles was mit OGL zu tun hat oben steht, und den Code hier reinstellen. Ic darf euch jetzt schon vor dem Code warnen, er ist ein bisschen unübersichtlich...


Und irgendwie habe ich langsam die Befürchtung, dass ich irgendetwas ganz ganz ganz kaputt gemacht hab


Okay anhängen klappt nicht 12mb scheinen zu viel zu sein, also hier mal der Teil Vom Quelltext der OGL betrifft und bis zum Zeichnen der Linie aufgerufen wird:
Code:
  1.  
  2. procedure TMain.FormCreate(Sender: TObject);
  3. var
  4.   I: integer;
  5.   png: tpngobject;
  6.  
  7. begin
  8.   //OpenL Stuff
  9.   DC:= GetDC(Handle);
  10.   if not InitOpenGL then Application.Terminate;
  11.  
  12.   RC:= CreateRenderingContext( DC,
  13.                                [opDoubleBuffered],
  14.                                32,
  15.                                24,
  16.                                0,0,0,
  17.                                0);
  18.   ActivateRenderingContext(DC, RC);
  19.  
  20.   setupgl;
  21.  
  22.  
  23.  
  24.  
  25.   randomize;
  26.   allinvis;
  27.   HymneTag := 0;
  28.   BallTag := 0;
  29.   mannschaft1 := random(anzahlmannschaften);
  30.   mannschaft2 := random(anzahlmannschaften);
  31.  
  32.   png := tpngobject.create;
  33.   png.loadfromfile(extractfilepath(application.exename) +
  34.     'Pics/SOnstiges/Splash Screen.png');
  35.   width := png.width;
  36.   height := png.height;
  37.  
  38.   image1.canvas.Draw(0, 0, png);
  39.  
  40.  
  41.  
  42.   erstellefonts;
  43.   ladetexturen;
  44.  
  45. //setzen von startwerten
  46.   mannschaft1 := 2;
  47.   mannschaft2 := 2;
  48.  
  49.   select := aus;
  50.   for I := 1 to high(sounds) do
  51.     sounds[I] := true;
  52.   ganzzeit := 5;
  53.   pausenzeit := 3;
  54.   replaylos := true;
  55.  
  56. //zuweisung von label-events (farbänderung)
  57.   lbzur.onmouseenter := lbover;
  58.   lbtutorialende.onmouseenter := lbover;
  59.   lbvorher.onmouseenter := lbover;
  60.   lbnachher.onmouseenter := lbover;
  61.   lbvorher2.onmouseenter := lbover;
  62.   lbnachher2.onmouseenter := lbover;
  63.   lbmainmenu.onmouseenter := lbover;
  64.   lbbeenden.onmouseenter := lbover;
  65.   lbnewgame.onmouseenter := lbover;
  66.   lbaufstellunga.onmouseenter := lbover;
  67.   lbelfmeterschuss.onmouseenter := lbover;
  68.  
  69.   lbzur.onmouseleave := lbleave;
  70.   lbtutorialende.onmouseleave := lbleave;
  71.   lbvorher.onmouseleave := lbleave;
  72.   lbnachher.onmouseleave := lbleave;
  73.   lbvorher2.onmouseleave := lbleave;
  74.   lbnachher2.onmouseleave := lbleave;
  75.   lbmainmenu.onmouseleave := lbleave;
  76.   lbbeenden.onmouseleave := lbleave;
  77.   lbnewgame.onmouseleave := lbleave;
  78.   lbaufstellunga.onmouseleave := lbleave;
  79.   lbelfmeterschuss.onmouseleave := lbleave;
  80.  
  81.   for I := 1 to 6 do
  82.     begin
  83.       tlabel(findcomponent('lbo' + inttostr(I))).OnMouseEnter := lbover;
  84.       tlabel(findcomponent('lbo' + inttostr(I))).OnMouseleave := lbleave;
  85.       tlabel(findcomponent('lbo' + inttostr(I) + 'a')).OnMouseEnter := lbover;
  86.       tlabel(findcomponent('lbo' + inttostr(I) + 'a')).OnMouseleave := lbleave;
  87.     end;
  88.  
  89.   doublebuffered := true;
  90.   keypreview := true;
  91.  
  92.   feld := tbitmap.create;
  93.  
  94.   clearactual;
  95.  
  96.   erstellspieler;
  97.  
  98.   //Laden der Sounds
  99.   BASS_Init(-1, 44100, 0, Application.Handle, nil);
  100.   ChTheme := BASS_StreamCreateFile(FALSE, PChar(extractfilepath(application.ExeName) + 'Sounds/theme.mp3'), 0, 0, 0);
  101.   ChButton := BASS_StreamCreateFile(FALSE, PChar(extractfilepath(application.ExeName) + 'Sounds/button.mp3'), 0, 0, 0);
  102.   ChStadion := BASS_StreamCreateFile(FALSE, PChar(extractfilepath(application.ExeName) + 'Sounds/stadion.mp3'), 0, 0, 0);
  103.   ChHymne := BASS_StreamCreateFile(FALSE, PChar(extractfilepath(application.ExeName) + 'Sounds/UEFA Hymne.mp3'), 0, 0, 0);
  104.   ChJubel := BASS_StreamCreateFile(FALSE, PChar(extractfilepath(application.ExeName) + 'Sounds/jubel.aiff'), 0, 0, 0);
  105.   ChBall := BASS_StreamCreateFile(FALSE, PChar(extractfilepath(application.ExeName) + 'Sounds/ball.mp3'), 0, 0, 0);
  106.   ChPfiff := BASS_StreamCreateFile(FALSE, PChar(extractfilepath(application.ExeName) + 'Sounds/pfiff.aiff'), 0, 0, 0);
  107.  
  108.   bodentextur := random(7) + 1;
  109.   erstellemenue;
  110. end;
  111.  
  112.  
  113. procedure TMain.FormResize(Sender: TObject);
  114. begin
  115.   glViewport(0, 0, ClientWidth, ClientHeight);
  116.   glMatrixMode(GL_PROJECTION);
  117.   glLoadIdentity;
  118.   gluPerspective(45.0, ClientWidth/ClientHeight, 1,1000);
  119.  
  120.   glMatrixMode(GL_MODELVIEW);
  121.   glLoadIdentity;
  122. end;
  123.  
  124.  
  125. procedure TMain.ladetexturen;
  126.   var s,s1:string;
  127.       J:integer;
  128. begin
  129.   s:=extractfilepath(application.ExeName)+'Pics';
  130.   s1:=extractfilepath(application.ExeName)+'Texturen';
  131.  
  132.  
  133.   texturliste:=tlist.Create;
  134.  
  135.   //Spielertexturen
  136.   TexturSStehen:=TTextur.create(s+'Figuren\Spieler.png');
  137.   TexturSLaufen:=TTextur.create(s+'Figuren\Spieler_rennen.png');
  138.   TexturSSprinten:=TTextur.create(s+'Figuren\Spieler_sprinten.png');
  139.   TexturSSchuss:=TTextur.create(s+'Figuren\Spieler_passen.png');
  140.   TexturSEinwurf:=TTextur.create(s+'Figuren\Spieler_einwurf.png');
  141.  
  142.   //Computertexturen
  143.   TexturCStehen:=TTextur.create(s+'Figuren\Computer.png');
  144.   TexturCLaufen:=TTextur.create(s+'Figuren\Computer_rennen.png');
  145.   TexturCSprinten:=TTextur.create(s+'Figuren\Computer_sprinten.png');
  146.   TexturCSchuss:=TTextur.create(s+'Figuren\Computer_passen.png');
  147.   TexturCEinwurf:=TTextur.create(s+'Figuren\Computer_einwurf.png');
  148.  
  149.  
  150.   //Bodentexturen
  151.   bodentexturen[1]:=TTextur.create(s1+'boden_dry.PNG');
  152.   bodentexturen[2]:=TTextur.create(s1+'boden_Hdry.PNG');
  153.   bodentexturen[3]:=TTextur.create(s1+'boden_mud.png');
  154.   bodentexturen[4]:=TTextur.create(s1+'boden_Hmud.png');
  155.   bodentexturen[5]:=TTextur.create(s1+'boden_midgreen.png');
  156.   bodentexturen[6]:=TTextur.create(s1+'boden_Hmidgreen.png');
  157.   bodentexturen[7]:=TTextur.create(s1+'boden_stadion.PNG');
  158.  
  159.  
  160.   //mannschaftsfahnen
  161.   for J:=0 to 16 do
  162.   Texturfahnen[J]:=TTextur.create(s1+getmannschaftsname(J)+'.png');
  163.  
  164.   //Stadionschatten
  165.   for J:=1 to 5 do
  166.   TexturStadionSchatten[J]:=Ttextur.create(s+'Schatten\Stadion_schatten'+inttostr(J)+'.png');
  167.  
  168.   //Popuptexturen
  169.   Texturpopups:=TTextur.create(s1+'popup_menu.png');
  170.  
  171.  
  172.   TexturMarkierung:=Ttextur.create(s1+'linien.png');
  173.  
  174.    //Sonstiges-Ordner
  175.   Texturball:=ttextur.create(s1+'ball_5hrz.png');
  176.   TexturSchatten[1]:=ttextur.create(s1+'schatten_punkt.png');
  177.   TexturSchatten[2]:=ttextur.create(s1+'schatten_einfach.png');
  178.   TexturSchatten[3]:=ttextur.create(s1+'schatten_stadion.png');
  179.   Texturtor:=ttextur.create(s1+'Tor.png');
  180.   TexturSpielermarkierung:=ttextur.create(s1+'markierung.png');
  181.   TexturZielmarkierungen[1]:=ttextur.create(s1+'zielmarkierung.png');
  182.   TexturZielmarkierungen[2]:=ttextur.create(s1+'zielmarkierung_sprint.png');
  183.   TexturSpielinfo:=ttextur.create(s1+'spielinfo.png');
  184.   TexturTorfleck:=ttextur.create(s1+'Torfleck.png');
  185.  
  186.   //Anzeige-Ordner
  187.   TexturAnzeige:=Ttextur.create(s1+'ausdauerbalken.png');
  188.  
  189.   TexturAufladen:=Ttextur.create(s1+'schussbalken.png');
  190.  
  191.   TexturElfmeterAnzeige:=Ttextur.create(s1+'elfmeteranzeige.png');
  192.   TexturElfmeterPunkt:=Ttextur.create(s1+'elfmeter_punkt.png');
  193.   TexturMiniBall:=ttextur.create(s+'Anzeige\miniball.png');
  194.  
  195.   //Menü-Ordner
  196.   TexturMenue[0]:=TTextur.create(s+'Menü\background.png');
  197.   TexturMenue[1]:=TTextur.create(s+'Menü\ecke_lo.png');
  198.   TexturMenue[2]:=TTextur.create(s+'Menü\ecke_lu.png');
  199.   TexturMenue[3]:=TTextur.create(s+'Menü\ecke_ro.png');
  200.   TexturMenue[4]:=TTextur.create(s+'Menü\ecke_ru.png');
  201.   TexturMenue[5]:=TTextur.create(s+'Menü\rand_l.png');
  202.   TexturMenue[6]:=TTextur.create(s+'Menü\rand_o.png');
  203.   TexturMenue[7]:=TTextur.create(s+'Menü\rand_r.png');
  204.   TexturMenue[8]:=TTextur.create(s+'Menü\rand_u.png');
  205.   TexturMenue[9]:=TTextur.create(s+'Menü\punkt.png');
  206. end;
  207.  
  208.  
  209. constructor TTextur.create(S:string);
  210. begin
  211.   inherited create;
  212.   self.Textur:=Tglbitmap2d.create;
  213.   self.textur.LoadFromFile(s);
  214.   self.textur.GenTexture(false); // geladene Textur an OpenGL übergeben
  215.   texturliste.Add(self);
  216. end;
  217.  
  218.  
  219.  
  220. procedure TMain.SetupGL;
  221. begin
  222.   glClearColor(0.3, 0.4, 0.7, 0.0); //Hintergrundfarbe: Hier ein leichtes Blau
  223.   glEnable(GL_DEPTH_TEST);          //Tiefentest aktivieren
  224.   glEnable(GL_CULL_FACE);           //Backface Culling aktivieren
  225.   glEnable(GL_TEXTURE_2D);
  226.   glEnable(GL_ALPHA_TEST);
  227.   glAlphaFunc(GL_GREATER, 0.1);
  228.   glEnable(GL_BLEND);
  229. end;
  230.  
  231. procedure Tmain.ErstelleFonts;
  232. var
  233.   Font: TFont;
  234. begin
  235.   spielfont := glGenLists(256);
  236.  
  237.   Font := TFont.Create;  // Instanz einer Fontklasse erstellen
  238.   try
  239.     Font.Name := 'Arial'; // Name
  240.     Font.Size := 14;                // Schriftgröße
  241.     Font.Style := [fsBold];         // Styles (fsBold, fsItalic, ...)
  242.     Font.color:=clwhite;
  243.     SelectObject(DC, Font.Handle);              // Font auf einen Device Context benutzen
  244.     wglUseFontBitmaps (DC, 0, 255, spielfont);  // Mit selektiertem Font Zeichen erstellen
  245.  
  246.   finally
  247.     FreeAndNil(Font);  // erstellte Instanz wieder frei geben
  248.   end;
  249. end;
  250.  
  251.  
  252. procedure Tmain.ShowText(pText: String;pfont:cardinal);
  253. begin
  254.    glListBase(pfont);  // Liste auswählen
  255.    glCallLists(Length(pText), GL_UNSIGNED_BYTE, Pointer(pText));  // Entsprechende Listen aufrufen
  256. end;
  257.  
  258.  
  259. procedure TMain.SetzeTextur(pTextur:Ttextur);
  260. begin
  261.   ptextur.textur.bind;
  262.   TBreite:=ptextur.textur.width;
  263.   THoehe:=ptextur.textur.height;
  264. end;
  265.  
  266.  
  267. procedure Tmain.ZeichneQuad(X,Y,z:integer; flip:integer);
  268. begin
  269.   if not flip in [0..6] then flip:=0;
  270.  
  271.   case flip of
  272.   0:begin  //keine spiegelung
  273.     glBegin(GL_QUADS);
  274.     glTexCoord2f(1,1); glVertex3f( X+TBreite,clientheight-(y+THoehe), z);
  275.     glTexCoord2f(1,0); glVertex3f( X+TBreite,clientheight- y, z);
  276.     glTexCoord2f(0,0); glVertex3f(x,clientheight- y, z);
  277.     glTexCoord2f(0,1); glVertex3f(x,clientheight- (y+THoehe), z);
  278.     glEnd;
  279.     end;
  280.   1:begin   //hrz gespiegelt
  281.     glBegin(GL_QUADS);
  282.     glTexCoord2f(0,1); glVertex3f( X+TBreite,clientheight-(y+THoehe), z);
  283.     glTexCoord2f(0,0); glVertex3f( X+TBreite,clientheight- y, z);
  284.     glTexCoord2f(1,0); glVertex3f(x,clientheight- y, z);
  285.     glTexCoord2f(1,1); glVertex3f(x,clientheight- (y+THoehe), z);
  286.     glEnd;
  287.     end;
  288.   2:begin    //vert gespiegelt
  289.     glBegin(GL_QUADS);
  290.     glTexCoord2f(1,0); glVertex3f( X+TBreite,clientheight-(y+THoehe), z);
  291.     glTexCoord2f(1,1); glVertex3f( X+TBreite,clientheight- y, z);
  292.     glTexCoord2f(0,1); glVertex3f(x,clientheight- y, z);
  293.     glTexCoord2f(0,0); glVertex3f(x,clientheight- (y+THoehe), z);
  294.     glEnd;
  295.     end;
  296.   3:begin    //hrz und vert gespiegelt
  297.     glBegin(GL_QUADS);
  298.     glTexCoord2f(0,0); glVertex3f( X+TBreite,clientheight-(y+THoehe), z);
  299.     glTexCoord2f(0,1); glVertex3f( X+TBreite,clientheight- y, z);
  300.     glTexCoord2f(1,1); glVertex3f(x,clientheight- y, z);
  301.     glTexCoord2f(1,0); glVertex3f(x,clientheight- (y+THoehe), z);
  302.     glEnd;
  303.     end;
  304.  
  305.   4:begin  //90° Drehung
  306.     glBegin(GL_QUADS);
  307.     glTexCoord2f(1,0); glVertex3f( X+THoehe,clientheight-(y+TBreite), z);
  308.     glTexCoord2f(0,0); glVertex3f( X+Thoehe,clientheight- y, z);
  309.     glTexCoord2f(0,1); glVertex3f(x,clientheight- y, z);
  310.     glTexCoord2f(1,1); glVertex3f(x,clientheight- (y+TBreite), z);
  311.     glEnd;
  312.     end;
  313.   5:begin  //180° Drehung
  314.     glBegin(GL_QUADS);
  315.     glTexCoord2f(0,0); glVertex3f( X+TBreite,clientheight-(y+THoehe), z);
  316.     glTexCoord2f(0,1); glVertex3f( X+TBreite,clientheight- y, z);
  317.     glTexCoord2f(1,1); glVertex3f(x,clientheight- y, z);
  318.     glTexCoord2f(1,0); glVertex3f(x,clientheight- (y+THoehe), z);
  319.     glEnd;
  320.     end;
  321.   6:begin  //270° Drehung
  322.     glBegin(GL_QUADS);
  323.     glTexCoord2f(0,1); glVertex3f( X+THoehe,clientheight-(y+TBreite), z);
  324.     glTexCoord2f(1,1); glVertex3f( X+THoehe,clientheight- y, z);
  325.     glTexCoord2f(1,0); glVertex3f(x,clientheight- y, z);
  326.     glTexCoord2f(0,0); glVertex3f(x,clientheight- (y+TBreite), z);
  327.     glEnd;
  328.     end;
  329.  
  330.    end;
  331.  
  332. end;
  333.  
  334.  
  335.  
  336.  
  337.  
  338. procedure tmain.zeichnegl;
  339. var I,J,N,M:integer;
  340.     grad,a,b,c:real;
  341.     PX:array[1..4] of integer;
  342.  
  343. begin
  344.   glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  345.  
  346. glMatrixMode(GL_PROJECTION);
  347. glLoadIdentity;
  348. glViewport(0,0,ClientWidth,ClientHeight);
  349. glOrtho(0,clientwidth,0,clientheight,0,256);
  350.  
  351. glMatrixMode(GL_MODELVIEW);
  352. glLoadIdentity;
  353.  
  354.  
  355. //Blending auf transparenz in pngs einstellen
  356. {glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
  357.     glcolor3f(1,1,1);
  358.  
  359.  
  360.   zeichnefeld;
  361.   zeichnespieler;
  362.  
  363.   glpushmatrix;
  364.   glTranslatef(round(ball.posi.x), clientheight-round(ball.posi.y), 0);
  365.   glRotatef(spieler2.winkel(11)*10, 0,0,1);
  366.  
  367.   //ball
  368.   setzetextur(texturball);
  369.   Tbreite:= mdaten.ballbreite + (round(mdaten.ball.posi.z) div 2);
  370.   Thoehe:=Tbreite;
  371.   I:=mdaten.ball.aninummer;
  372.   zeichnequad( - TBreite div 2,
  373.                     clientheight- Thoehe div 2,
  374.                     -115 ,0,
  375.                     ((2+I*48)/256),(46+I*48)/256,10/64,54/64);
  376.  
  377.   glpopmatrix;
  378.  
  379.   //Stadionschatten
  380.   setzetextur(texturstadionschatten[lbo1.Tag]);
  381.   Tbreite:=clientwidth;
  382.   THoehe:=clientheight;
  383.   zeichnequad(0,0,0,30);
  384.  
  385.     //Aufladbalken
  386.       if aufladen <> 0 then
  387.         begin
  388.             setzetextur(TexturAufladen);
  389.  
  390.             I:=screentoclient(mouse.CursorPos).X ;
  391.             J:=screentoclient(mouse.CursorPos).Y -10;
  392.             Tbreite:=47;
  393.  
  394.             if aufladen>0 then
  395.             zeichnequad(I-24,J-8,-10,0,0,47/128,0,1)
  396.             else
  397.             zeichnequad(I-24,J-8,-10,0,47/128,94/128,0,1);
  398.  
  399.  
  400.  
  401.             //Miniball
  402.             Tbreite:=16;
  403.           grad := (30) * abs(aufladen / mab[mannschaft1].schusskraft);
  404.           zeichnequad(I-24+round(grad),J-8,-9,0,94/128,110/128,0,1);
  405.  
  406.         end;
  407.  
  408.  
  409.     //popupmenü
  410.       if popup in [1..5] then
  411.         begin
  412.  
  413.         setzetextur(TexturPopups);
  414.         Tbreite:=32;
  415.  
  416.   //bilder auswählen
  417.           case popupstufe of
  418.             haupt: begin PX[1]:=1;PX[2]:=9;PX[3]:=4;PX[4]:=6;    end;
  419.             kreis: begin PX[1]:=0;PX[2]:=1;PX[3]:=2;PX[4]:=7;    end;
  420.             rechteck_h: begin PX[1]:=8;PX[2]:=9;PX[3]:=10;PX[4]:=7;    end;
  421.             rechteck_v: begin PX[1]:=3;PX[2]:=4;PX[3]:=5;PX[4]:=7;    end;
  422.           end;
  423.  
  424.  
  425.  
  426.   //laden der bilder
  427.  
  428.   //positionierung der buttons
  429.           impopup1.left := round(mdaten.daten[popup].stapelbefehle[0].x +
  430.             cos(degtorad(300)) * breite * 2.5 - (impopup1.width / 2));
  431.           impopup1.top := round(mdaten.daten[popup].stapelbefehle[0].y +
  432.             sin(degtorad(300)) * breite * 2.5 - (impopup1.height / 2));
  433.           impopup1.visible := true;
  434.  
  435.           impopup2.left := round(mdaten.daten[popup].stapelbefehle[0].x +
  436.             cos(degtorad(340)) * breite * 2.5 - (impopup2.width / 2));
  437.           impopup2.top := round(mdaten.daten[popup].stapelbefehle[0].y +
  438.             sin(degtorad(340)) * breite * 2.5 - (impopup2.height / 2));
  439.           impopup2.visible := true;
  440.  
  441.           impopup3.left := round(mdaten.daten[popup].stapelbefehle[0].x +
  442.             cos(degtorad(20)) * breite * 2.5 - (impopup3.width / 2));
  443.           impopup3.top := round(mdaten.daten[popup].stapelbefehle[0].y +
  444.             sin(degtorad(20)) * breite * 2.5 - (impopup3.height / 2));
  445.           impopup3.visible := true;
  446.  
  447.           impopup4.left := round(mdaten.daten[popup].stapelbefehle[0].x +
  448.             cos(degtorad(60)) * breite * 2.5 - (impopup4.width / 2));
  449.           impopup4.top := round(mdaten.daten[popup].stapelbefehle[0].y +
  450.             sin(degtorad(60)) * breite * 2.5 - (impopup4.height / 2));
  451.           impopup4.visible := true;
  452.  
  453.           for I:=1 to 4 do
  454.             begin
  455.                 if PX[I] in [0..7] then
  456.                    zeichnequad(Timage(findcomponent('impopup'+inttostr(I))).left,
  457.                                Timage(findcomponent('impopup'+inttostr(I))).top,
  458.                                 -8,0, PX[I]*32/256,(PX[I]+1)*32/256,0,1)
  459.                 else
  460.                 begin
  461.                 PX[I]:=PX[I]-5;
  462.                    zeichnequad(Timage(findcomponent('impopup'+inttostr(I))).left,
  463.                                Timage(findcomponent('impopup'+inttostr(I))).top,
  464.                                 -8,4, PX[I]*32/256,(PX[I]+1)*32/256,0,1)
  465.                 end;
  466.  
  467.  
  468.             end;
  469.  
  470.  
  471.         end
  472.       else
  473.         begin
  474.           impopup1.visible := false;
  475.           impopup2.visible := false;
  476.           impopup3.visible := false;
  477.           impopup4.Visible := false;
  478.         end;
  479.  
  480.  
  481.      //Spielinfo
  482.    setzetextur(texturspielinfo);
  483.    zeichnequad(width - randlinks - Tbreite,
  484.                randoben - Thoehe - 2,-8,0);
  485.  
  486.    setzetextur(Texturfahnen[mannschaft1]);
  487.    Tbreite:=22;
  488.    Thoehe:=22;
  489.    zeichnequad(width - randlinks - 225,
  490.                randoben - Thoehe - 6,-7,0);
  491.    setzetextur(Texturfahnen[mannschaft2]);
  492.    Tbreite:=22;
  493.    Thoehe:=22;
  494.    zeichnequad(width - randlinks - 155,
  495.                randoben - Thoehe - 6,-7,0);
  496.  
  497.  
  498.  
  499.  
  500.    zeichnespieltext;
  501.  
  502.    zeichnelinien;
  503.    if abstandkreis then
  504.    begin
  505.    glEnable(GL_LINE_STIPPLE);
  506.    glLineStipple(3, $AAAA);
  507.    zeichnekreis(round(ball.posi.x),round(ball.posi.y),breite*5,360);
  508.    glDisable(GL_LINE_STIPPLE);
  509.    end;
  510.  
  511.  
  512.  
  513.    }
  514.  
  515.     glDisable(GL_TEXTURE_2D);
  516.  
  517.     glcolor3f(1,0,0);
  518.  
  519.     Tbreite:=100;
  520.     Thoehe:=100;
  521.     zeichnequad(250,250,-12,0);
  522.  
  523.  
  524.   //  glEnable(GL_LINE_STIPPLE);
  525.   //  glLineStipple(3, $AAAA);
  526.     glLineWidth(1);
  527.  
  528.  
  529.     glbegin(GL_LINE_STRIP);
  530.     glVertex3f(clientwidth div 2,
  531.                clientheight div 2,
  532.                12);
  533.  
  534.     glVertex3f(0,
  535.                0,
  536.                12);
  537.     glend;
  538.  
  539.    glRasterPos3f(width div 2,
  540.                  height div 2,
  541.                 -25);  // (sichtbare) Rasterposition eintellen
  542.  
  543.   showtext('allo',spielfont);
  544.  
  545.  
  546.  
  547.  
  548. SwapBuffers(DC);
  549. end;
  550.  
  551.  
  552.  


Edit by i0n0s: Pascal-Tags...

_________________
Those who fear the dark never saw what light can do...

Bedecke deinen Himmel Zeus...

Fetter grüne du Laub...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 08, 2008 01:34 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
Ich hab deinen Code mal in ein leeres Projekt übernommen. Wenn ich wie anfangs erwähnt als Z-Koordinate bei den glVertex3fs der GL_LINE_STRIP -12 statt 12 übergebe, dann sehe ich die gewünschte rote Linie auf blau, inklusive dem "allo" und dem Quad.

Von daher fällt mir auch nicht mehr viel ein, außer es auf Treiber oder Hardware zu schieben.

MfG


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 08, 2008 08:37 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 23, 2007 18:03
Beiträge: 49
Wohnort: Dortmund-Scharnhorst
Okay, kann jetzt nicht sagen, ob ein vorheriger Tipp das Problem gelöst hätte, weil ich wohl vergessen hab die 12 wieder in -12 zu ändern. Aber mit aktualisiertem Grafikkarten-Treiber klappt es jetzt endlich.

Danke an alle, mein Tag ist gerettet.

_________________
Those who fear the dark never saw what light can do...

Bedecke deinen Himmel Zeus...

Fetter grüne du Laub...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 08, 2008 08:37 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Bei mir das Selbe. Ich sehe die Linie nur, wenn ich die Position in -12 verändere. Was auch vollkommen normal ist.

Und das sowohl mit Hardbeschleunigtem OpenGL als auch in der Software implementation von MS. Und die Softwareseitige Implementation sollte überall eigentlich gleich sein, da Microsoft dort seit ca 1996 nichts mehr verändert hat. Wie das in Vista aussieht weiß ich aber nicht, da dort OpenGL ja auch mal emuliert werden sollte.

Hast du schon mal andere Programme ausprobiert? Da könnte ich dir zum Beispiel meinen VU Meter anbieten. Der besteht nur aus Linien, Punkten, Bitmapfonts und 2 Quads.

In dem VU Meter zeichne ich die im übrigen so, dass ich bei glOrtho als zNear = -1 und zFar = 1 einstelle. Und alle Vertices zeichne ich mit glVertex2*. Damit ist die dritte Komponente (Z) immer 0.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 08, 2008 08:45 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 23, 2007 18:03
Beiträge: 49
Wohnort: Dortmund-Scharnhorst
Z war ja am Anfang auf alle Fälle auf -12, dann kam der Vorschlag das mal auf 12 zu ändern, hatte es wohl nicht rückgängig gemacht.

Die z Komponente immer auf 0 zu setzen ist zwar schön einfch, aber wie würde ich denn dann die Tiefensortierung meiner Quads vornehmen? Läuft das dann über die Reihenfolge in der man zeichnet?

Und weil das Thema ja beantwortet wurde: Gibt es hier im Forum die Mölichkeit ein Topic als "gelöst" zu markieren? konnte keine Einstellung dazu finden

_________________
Those who fear the dark never saw what light can do...

Bedecke deinen Himmel Zeus...

Fetter grüne du Laub...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 08, 2008 10:36 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Nö solch ein Flag gibt es im Forum nicht. Es gibt aber auch kein Flag, dass es sich dabei um eine Frage handelt. ;)

Wenn die Tiefen gleich sind, und nicht vom Tiefentest ausgeschlossen werden, dann ist die Reihenfolge des Gezeichneten ausschlaggebend. Aber die Reihenfolge ist auch ausschlaggebend, wenn dort Transparenzen zum Einsatz kommen. Der Tiefentest sollte dann entweder auf GL_LEQUAL stehen wenn er nicht sogar deaktiviert werden kann. Wenn du die Reihenfolge sowieso beachten musst kann es sein, dass du den Tiefentest(Tiefenbuffer) gar nicht benötigst. Für 2D auch nicht unbedingt unwahrscheinlich.

PS: Was ich in deinem Code auch gesehen hatte. Du solltest bei GenTextures der Texturen kein False übergeben. Denn auf Systemen, die keine NPOT Texturen können aber solche Texturen benutzt werden, bleiben diese ohne Kommentar einfach weiß. Das würde man dann nur merken, wenn man OpenGL Fehler erfragt. Wenn der Parameter True oder leer ist, dann würdest du eine Exception bekommen, wenn solche Texturen nicht unterstützt würden.

PPS: Alphatest und Blending solltest du meiner Meinung nach nur dann aktivieren, wenn du sie auch wirklich brauchst. Bzw in manchen Fällen kann die Kombination (Alphatest und Blending) auch zu unschönen Effekten führen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 08, 2008 10:42 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 23, 2007 18:03
Beiträge: 49
Wohnort: Dortmund-Scharnhorst
Zitat:
Du solltest bei GenTextures der Texturen kein False übergeben. Denn auf Systemen, die keine NPOT Texturen können aber solche Texturen benutzt werden, bleiben diese ohne Kommentar einfach weiß.


Ja stimmt, die fehlerhaften Texturen werden noch ausgewechselt, die stammen noch aus der vor OGL Zeit des Programms.

Danke auch für die restlichen Hinweise, den alphatest kann ich denke ich wirklich weglassen.

_________________
Those who fear the dark never saw what light can do...

Bedecke deinen Himmel Zeus...

Fetter grüne du Laub...


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 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.019s | 16 Queries | GZIP : On ]