|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Nim Mini JLI'ler
Anmeldedatum: 31.10.2003 Beiträge: 1
Medaillen: Keine
|
Verfasst am: 31.10.2003, 13:18 Titel: Hilfe, Ich habe ein übles Flackern! |
|
|
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 |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 31.10.2003, 13:24 Titel: |
|
|
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 _________________ 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 |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 31.10.2003, 20:42 Titel: |
|
|
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 |
|
|
robx Mini JLI'ler
Anmeldedatum: 02.12.2003 Beiträge: 7
Medaillen: Keine
|
Verfasst am: 02.12.2003, 22:23 Titel: |
|
|
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 )
- InvalidateRect und ValidateRect in der mainloop sind überflüssig _________________ just my two cents. |
|
Nach oben |
|
|
|
|
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
|