OpenGL steht bei mir
-
Ohne zum Wissen wie du genau vorgehst kann dir eigentlich keiner helfen.
Wie speicherst du deine Zeichenobjekte ab?
Wo zeichenst du sie ? In OnDraw()?
Wie zeichnest du? Wartest du erst bis deine Maustaste losgelassen wird und zeichnest dann oder rufst du nach jedem Pixel die OnDraw auf?Viel Fragen.
Wenn du wissen willst wie man es macht dann VC++ 6 in 21 Tagen. Dort wird ein Zeichenprogramm erstellt.
-
Zeig mal bitte deinen Renderloop, und ich find das man diesen Thread eher
unter Spieleprogrammierung schieben sollte. Die Leute da haben mehr Ahnung
von OpenGl. Können allerdings leider nur Registrierte User Posten :(.
-
der loop ist original. hab da nichts geändert. wie kann eich es den ändern das sich das ganze in realtimte bewegt?!
-
Wie oft wird denn bei dir glswapbuffers() aufgerufen und was zeichnest du, 3D
Objekte oder 2D Objekte? Wie berechnest du die Bewegung und nimmst du dafür auch
durchgehend Fließkomma zahlen? Kannst ja mal so eine Bewegungsberechnung Posten.
-
Ich nehme mal an dein Render-Aufruf steht in OnDraw

Ist ja klar, das der nicht dauernd aufgerufen wird - Da würde man ja auch Kopfschmerzen bei kriegen
Verleg den Aufruf fürs Rendering in einen extra Thread der kontinuierlich in dein Fenster rendert oder ruf es Timer-gesteuert auf (is aber auch nicht das gelbe vom Ei)
-
Wenn du OpenGL verwendest dann registriere dich. Verschieben dich dann in Spieleprogrammierung da es da besser ist.
Hier geht es um MFC und VC++ und nicht um OpenGL.
-
aber das prob liegt doch in MFC
ich hab die ganzen zeichen routinen in OnDraw(). aber das wird anscheinend nur aktuallisiert wenn ich das fenster (CCHildFrame) modifziere, sprich die größe ändere. erst dann kommt meine zeichnung zum vorschein.
wie kann ich meine mfc mdi anwendung dazu bringen, das sie meine Zeichenfunktion in der das ganze abläuft zum bewegen bringe so etwa:
BOOL COpenGLMfcApp::InitInstance() { mainWindow = new CMainWindow(); m_pMainWnd = mainWindow; CString className = AfxRegisterWndClass( CS_HREDRAW | CS_VREDRAW | CS_OWNDC, NULL, (HBRUSH)GetStockObject(BLACK_BRUSH), LoadIcon(IDR_MAINFRAME)); mainWindow->CreateEx( WS_EX_APPWINDOW, className, "OpenGL", WS_POPUP, CRect(0,0,640,480), NULL, 0); mainWindow->ShowWindow(SW_SHOW); mainWindow->SetForegroundWindow(); mainWindow->SetFocus(); ShowCursor(false); lastTime = timeGetTime(); return TRUE; } ///////////////////////////////////////////////////////////////////////////// // COpenGLMfcApp Nachrichten-Handler int COpenGLMfcApp::ExitInstance() { delete mainWindow; return CWinApp::ExitInstance(); } int COpenGLMfcApp::Run() { for (;;) { if (PeekMessage(&m_msgCur , NULL , 0, 0, PM_NOREMOVE)) { if (!PumpMessage()) { return ExitInstance(); } } else { long thisTime = timeGetTime(); if (thisTime >= lastTime + STEP) { mainWindow->Update(); lastTime = thisTime; } } } }leider geht das nicht da meine Funktion nicht in CMainFrame ist sondern in CPaintView. was mach ich falsch? wie kriege ich das auch so hin?

-
Wieso wählöst du deinen Titel dann mit OpenGL?
Was du suchst ist
Invalidate();
bzw.
InvalidateRect(NULL,NULL);
-
Invalidate() ?!
was ist das für eine funktion?! was bewirkt sie?! und wo muss ich sie den einfügen?! bei CPAintView oder bei CPaintApp?!
danke
-
Hallo,
Tippler schrieb:
Invalidate() ?!
was ist das für eine funktion?! was bewirkt sie?!
also dafür gibt es doch eine Dokumentation namens MSDN:
MfG