OpenGL steht bei mir



  • Hi

    hab eine MDI Anwendung in der ich eigentlich zeichnen wollte. Aber das geht nur wenn ich das Fenster in der MDI masimiere oder wieder Wiederherstelle. Das mal läuft nicht in realtime ab. was mach ich falsch?

    😕 danke



  • Benutzt du dafür OpenGl zum zeichnen?



  • ja

    hat keiner eine lösung?



  • 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:

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmfc98/html/_mfc_cwnd.3a3a.invalidate.asp

    MfG


Anmelden zum Antworten