JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=45e9cd74a7186f587a491c45c9c0ec2aMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Hilfe, Ich habe ein übles Flackern!

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Nim
Mini JLI'ler



Anmeldedatum: 31.10.2003
Beiträge: 1

Medaillen: Keine

BeitragVerfasst am: 31.10.2003, 13:18    Titel: Hilfe, Ich habe ein übles Flackern! Antworten mit Zitat

Sers ich habe en echtes Problem!
Ich hab en ogl demo geschrieben und feststellen müssen, das das ding nur auf meinem Rechner läuft. Auf allen anderen Rechnern ist ein übles Flackern.
Wer sich das mal anschauen will:
http://derrabe.n3xt.de//pagan.zip
Hier ist noch ne verbesserte Exe:
http://derrabe.n3xt.de//paganexe.zip
Hier ist der Code dazu:
Die Init:
Code:

PIXELFORMATDESCRIPTOR pfd =
    {
        1,
        PFD_DRAW_TO_WINDOW | PFD_DRAW_TO_BITMAP |   
      PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER,
        PFD_TYPE_RGBA,
        32,
        0,0,0,0,0,0,
        0,0,
        0,0,0,0,0,
        16,
        0,
        0,
        0,
        0,
        0,
        0,
        0,
    };

    hDC = GetDC(hWnd);
    int iPixelFormat = ChoosePixelFormat(hDC,&pfd);
    SetPixelFormat(hDC,iPixelFormat,&pfd);
    HGLRC hglrc = wglCreateContext(hDC);
    wglMakeCurrent(hDC,hglrc);  glDisable(GL_COLOR_MATERIAL);
  glDisable(GL_LIGHT0);
  glDisable(GL_LIGHTING);
  //glEnable(GL_DEPTH_TEST);
  //glDepthFunc(GL_LEQUAL);
  //glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
 
  GLfloat Ambient[4] = { 1.8F,1.8F,1.8F,1.0F};
  glLightModelfv(GL_LIGHT_MODEL_AMBIENT, &Ambient[0]);
  glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,0);
  //glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER,0);
  glColorMaterial(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE);
  glShadeModel(GL_SMOOTH);
 
  glEnable(GL_LIGHT0);
  glEnable(GL_LIGHTING);
  glEnable(GL_COLOR_MATERIAL);
 
  glEnable(GL_TEXTURE_2D);   
  glViewport(0, 0, 1152, 864);

  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  gluPerspective(45.0f,(GLfloat)1152/(GLfloat)864,0.1f,1000.0f);

Die Funktion zum abschalten der Vsync
Code:

void ToggleVSync(void)
{
    wglSwapIntervalEXT_Func wglSwapIntervalEXT = wglSwapIntervalEXT_Func(wglGetProcAddress("wglSwapIntervalEXT"));
    if (wglSwapIntervalEXT)   
        wglSwapIntervalEXT(0);
}

Die Renderfunktion:
Code:

wglMakeCurrent(wglGetCurrentDC(),wglGetCurrentContext());
   
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
    glClearDepth(1.0f);
    glEnable(GL_DEPTH_TEST);
    glDepthFunc(GL_LEQUAL);
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
    //SetViewByMouse();
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
   
    gluLookAt(Spieler.Pos.x - Spieler.Dir.x*10 ,Spieler.Pos.y - Spieler.Dir.y*10 ,Spieler.Pos.z - Spieler.Dir.z*10,
           Spieler.Pos.x,Spieler.Pos.y,Spieler.Pos.z,           
           0, 1, 0);
   
    DrawSpieler();
 
    glLoadIdentity();
   
    gluLookAt(Spieler.Pos.x - Spieler.Dir.x*10,Spieler.Pos.y - Spieler.Dir.y*10,Spieler.Pos.z - Spieler.Dir.z*10,
           Spieler.Pos.x,Spieler.Pos.y,Spieler.Pos.z,           
           0, 1, 0);

    DrawEnemy();
   
    glLoadIdentity();   
    gluLookAt(Spieler.Pos.x - Spieler.Dir.x*10,Spieler.Pos.y - Spieler.Dir.y*10,Spieler.Pos.z - Spieler.Dir.z*10,
           Spieler.Pos.x,Spieler.Pos.y,Spieler.Pos.z,           
           0, 1, 0);
       
    TerrainMalen();
    //RenderTerrain2();
    CreateSkyBox(500, 0, 500, 2000, 2000, 2000);   
    glBindTexture(GL_TEXTURE_2D, g_Texture[10]);
    glTranslatef(400,5,550);   
    glScalef(0.9,0.9,0.9);   
    Well.render(1);
   

    glLoadIdentity();   
    gluLookAt(Spieler.Pos.x - Spieler.Dir.x*10,Spieler.Pos.y - Spieler.Dir.y*10,Spieler.Pos.z - Spieler.Dir.z*10,
           Spieler.Pos.x,Spieler.Pos.y,Spieler.Pos.z,           
           0, 1, 0);
   
    glBindTexture(GL_TEXTURE_2D, g_Texture[7]);
    glScalef(0.3,0.3,0.3);
    glTranslatef(600,30,2600);   
    glRotatef(-120,0,1,0);
    Burg0.render(1);
    Burg1.render(1);
    Burg2.render(1);
    glTranslatef(-100,0,0);
    Burg3.render(1);
     
    glLoadIdentity();   
    gluLookAt(Spieler.Pos.x - Spieler.Dir.x*10,Spieler.Pos.y - Spieler.Dir.y*10,Spieler.Pos.z - Spieler.Dir.z*10,
           Spieler.Pos.x,Spieler.Pos.y,Spieler.Pos.z,           
           0, 1, 0);
   
    SwitchPartikelmalen();
    Partikelmalen();
    glFlush();
    glFinish();
    SwapBuffers(wglGetCurrentDC());

Und noch die Renderschleife:
Code:

   ToggleVSync()
   ZeroMemory( &msg, sizeof(msg) );
    if(Status != 0)
    {
     
        Render.GrafikInit();   
        while( msg.message!=WM_QUIT )
            {
                StartTimeRender = timeGetTime();   
                if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
                {
                 
                    TranslateMessage( &msg );
                    DispatchMessage( &msg );
                }
                else if((EndTimeRender) < StartTimeRender)
                {
                  InvalidateRect(hWnd,&R,TRUE);
                  Render.Rendern();
                  ValidateRect(hWnd,&R);
                  EndTimeRender = timeGetTime();
                }

            }
    }
ToggleVSync();
    DestroyWindow(hWnd);
    UnregisterClass( "Pagan", wc.hInstance );
    ReleaseDC(hWnd,hDC);
[/url][/code]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 31.10.2003, 13:24    Titel: Antworten mit Zitat

Hast du so eine Art Backbuffer?
In DX gibts sowas zumindest. Dort wird erst alles in den Backbuffer gezeichnet und zuletzt der Backbuffer als ganzes angezeigt. So hat man ein festes Frame und nicht zeitverschobene Zeichenvorgänge Wink
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 31.10.2003, 20:42    Titel: Antworten mit Zitat

Haben die anderen Rechner XP oben und vergessen OpenGL Treiber zu installieren ?

Die Links gehen übrigens nicht.

Edit:
Ich hab mal jemanden gefragt der sich mit OpenGL auskennt, er sagte das man einen Backbuffer beim initialisieren des OpenGL Systems ähnlich D3D angeben muss. Genauer konnte er mir aber nichts sagen.
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
robx
Mini JLI'ler



Anmeldedatum: 02.12.2003
Beiträge: 7

Medaillen: Keine

BeitragVerfasst am: 02.12.2003, 22:23    Titel: Antworten mit Zitat

was es vielleicht sein könnte:

- die auflösung 1152x864 haben vielleicht nicht alle karten (?)
- vsync nicht abschalten
- PFD_DRAW_TO_BITMAP rausnehmen (geht das überhaupt zusammen mit DRAW_TO_WINDOW ?)
- das wglMakeCurrent() brauchst du im drawing-code nicht mehr aufrufen ( wglGetCurrentContext() liefert den aktuellen, den du nochmal als aktuell setzt Wink )
- InvalidateRect und ValidateRect in der mainloop sind überflüssig
_________________
just my two cents.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum