OPenGL to DirectX9



  • Kann mir den folgenden COde mal jemand von OpenGL nach DirectX9 "übersetzten"?

    void DrawCube( CViewerDoc* doc )
    {
    	glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
    	glBegin( GL_TRIANGLE_STRIP );
    		glColor3f( 1.0f, 0.0f, 0.0f );
    		glVertex3f( -1.0f, -1.0f, 0.0f );
    		glVertex3f( 1.0f, -1.0f, 0.0f );
    		glVertex3f( -1.0f, 1.0f, 0.0f );
    		glVertex3f( 1.0f, 1.0f, 0.0f );
    	glEnd();
    
    	glBegin( GL_TRIANGLE_STRIP );
    		glColor3f( 1.0f, 0.0f, 0.0f );
    		glVertex3f( -1.0f, -1.0f, -2.0f );
    		glVertex3f( 1.0f, -1.0f, -2.0f );
    		glVertex3f( -1.0f, 1.0f, -2.0f );
    		glVertex3f( 1.0f, 1.0f, -2.0f );
    	glEnd();
    
    	glBegin( GL_TRIANGLE_STRIP );
    		glColor3f( 0.0f, 1.0f, 0.0f );
    		glVertex3f( -1.0f, -1.0f, 0.0f );
    		glVertex3f( -1.0f, -1.0f, -2.0f );
    		glVertex3f( -1.0f, 1.0f, 0.0f );
    		glVertex3f( -1.0f, 1.0f, -2.0f );
    	glEnd();
    
    	glBegin( GL_TRIANGLE_STRIP );
    		glColor3f( 0.0f, 1.0f, 0.0f );
    		glVertex3f( 1.0f, -1.0f, 0.0f );
    		glVertex3f( 1.0f, -1.0f, -2.0f );
    		glVertex3f( 1.0f, 1.0f, 0.0f );
    		glVertex3f( 1.0f, 1.0f, -2.0f );
    	glEnd();
    
    	glBegin( GL_TRIANGLE_STRIP );
    		glColor3f( 0.0f, 0.0f, 1.0f );
    		glVertex3f( -1.0f, 1.0f, 0.0f );
    		glVertex3f( 1.0f, 1.0f, 0.0f );
    		glVertex3f( -1.0f, 1.0f, -2.0f );
    		glVertex3f( 1.0f, 1.0f, -2.0f );
    	glEnd();
    
    	glBegin( GL_TRIANGLE_STRIP );
    		glColor3f( 0.0f, 0.0f, 1.0f );
    		glVertex3f( -1.0f, -1.0f, 0.0f );
    		glVertex3f( 1.0f, -1.0f, 0.0f );
    		glVertex3f( -1.0f, -1.0f, -2.0f );
    		glVertex3f( 1.0f, -1.0f, -2.0f );
    	glEnd();
    }
    
    void DrawDocWire( CViewerDoc* doc )
    {
    	glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
    	if ( doc->m_currentModel != NULL )
    		DrawMd3Wire( doc->m_currentModel );
    }
    
    // andere Funktion
    {
             //Get a DC for the Client Area
    	m_pDC = new CClientDC(this);
    
    	//Failure to Get DC
    	if( m_pDC == NULL )
    		return FALSE;
    
    	if( !SetupPixelFormat() )
    		return FALSE;
    
             //Create Rendering Context
    	m_hRC = ::wglCreateContext( m_pDC->GetSafeHdc() );
    
        //Failure to Create Rendering Context
        if( m_hRC == 0 )
            return FALSE;
    
    	//Make the RC Current
    	if( ::wglMakeCurrent( m_pDC->GetSafeHdc(), m_hRC ) == FALSE )
    		return FALSE;
    
    	// Usual OpenGL stuff
    
    	glClearColor( 0.0f, 0.0f, 0.0f, 0.0f );
    	glClearDepth(1.0f);
    	glEnable( GL_DEPTH_TEST );
    	glEnable( GL_TEXTURE_2D );
    	glLineWidth( 2.0f );
    	glPointSize( 3.0f );
    
             return TRUE;
    }
    
    BOOL COpenGLWnd::SetupPixelFormat()
    {
    	static PIXELFORMATDESCRIPTOR pfd = 
    	{
    		sizeof(PIXELFORMATDESCRIPTOR),    // size of this pfd
    		1,                                // version number
    		PFD_DRAW_TO_WINDOW |              // support window
    		PFD_SUPPORT_OPENGL |              // support OpenGL
    		PFD_DOUBLEBUFFER,                 // double buffered
    		PFD_TYPE_RGBA,                    // RGBA type
    		24,                               // 24-bit color depth
    		0, 0, 0, 0, 0, 0,                 // color bits ignored
    		0,                                // no alpha buffer
    		0,                                // shift bit ignored
    		0,                                // no accumulation buffer
    		0, 0, 0, 0,                       // accumulation bits ignored
    		16,                               // 16-bit z-buffer
    		0,                                // no stencil buffer
    		0,                                // no auxiliary buffer
    		PFD_MAIN_PLANE,                   // main layer
    		0,                                // reserved
    		0, 0, 0                           // layer masks ignored
    	};
    
       int m_nPixelFormat = ::ChoosePixelFormat( m_pDC->GetSafeHdc(), &pfd );
    
        if ( m_nPixelFormat == 0 )
            return FALSE;
    
        return ::SetPixelFormat( m_pDC->GetSafeHdc(), m_nPixelFormat, &pfd );
    }
    

    Das sind OpenGL Funktionen aus einer MFC Anwendung. Und die muss ich irgendie von OpenGL nach DirectX 9 "konvertiren". Ich habs versucht, aber net richtig geschaft. Kann mir jemadn helfen? Für so etwas gibt es aber sicher kein Proggi, oder?



  • Kann das keiner? Will das keiner?



  • Ich machs für 300 Euro.

    Bye, TGGC (Pipe my World.)



  • Dumping: 250 EUR zzgl ein Kasten Andechs Doppelbock



  • Ok 200.

    Bye, TGGC (Pipe my World.)



  • Hört auf euch zu nix zu unterbieten!
    Wir sind hier schließlich nicht bei Jobdoo!

    ---------
    *Flüster*:
    Bei mir wärn für den Preis sogar die 8ér Version mit drin enthalten.



  • Ich mach's für 'ne heisse Nacht mit Deiner Tante.

    Allerdings dann ohne Error-Handling und so... 🤡 👍

    *SCNR* 😃



  • Ok, da kann ich nicht mehr mit.

    Bye, TGGC (Pipe my World.)



  • Sgt. Nukem: die sieht grausam aus.



  • (D)Evil schrieb:

    Sgt. Nukem: die sieht grausam aus.

    Das macht nichts. 🤡

    Gut, vielleicht machst Du's doch besser selber... :p



  • Ich habs schon versucht, doch ich bin dabei gescheitert, was z.b. die FUnktion PIXELFORMATDESCRIPTOR zumbeispiel bewirkt. bei DirectX kenn ich die Funktionen ja, aber net bei OpenGL und bei DX kann man die ja auch in der Doku nachgucken aber was ist bei OpenGL?



  • aber was ist bei OpenGL?

    Da lädt man sich das OGl Red Book runter.



  • (D)Evil schrieb:

    Ich habs schon versucht, doch ich bin dabei gescheitert, was z.b. die FUnktion PIXELFORMATDESCRIPTOR zumbeispiel bewirkt. bei DirectX kenn ich die Funktionen ja, aber net bei OpenGL und bei DX kann man die ja auch in der Doku nachgucken aber was ist bei OpenGL?

    Die Init-Scheisse von OpenGL unter Windows ist in der Tat grausam. 👎

    Einfach schön streamlined DirectX initialisieren. 💡

    PIXELFORMATDESCRIPTOR ist halt so'n mega struct, mit dem Du letztendlich den Videomodus setzt. Also RGB Tiefe, Depthbuffer, etc. pp



  • Ich hab jetzt mal DirectX und ne Engine initialisiert und dann noch nen Dreick ausgegeben, doch ich hab das Problem, das ich 4 Davon abgeleitete Klassen habe, die auf die Render Funktion zugreifen. Wenn ich die renderFunktion aus irgend einer abgeleiteten Klasse starte, stürzt das Programm genau an dieser stelle ab. Wie muss ich die RenderFunktion schreiben, damit mir der gram net abstürzt? 🙂



  • Meine Kristallkugel sagt: mach weiter!

    Bye, TGGC (Pipe my World.)



  • BOOL CDirectXWnd::RenderScene()
    {
    	HRESULT		hResult;
    	tbMatrix	mRotation;		// Rotationsmatrix
    	tbMatrix	mTranslation;	// Translationsmatrix
    	tbMatrix	mWorld;			// Vereinende Weltmatrix
    
    	// Rotations- und Translationsmatrix des Dreiecks erzeugen
    	mRotation = tbMatrixRotationY(TB_DEG_TO_RAD(g_fTime * 90.0f));
    	mTranslation = tbMatrixTranslation(tbVector3(0.0f, 0.0f, 2.0f));
    
    	// Beide Matrizen kombinieren und als Weltmatrix einsetzen
    	mWorld = mRotation * mTranslation;
    	m_pd3dDevice->SetTransform(D3DTS_WORLD, (D3DMATRIX*)(&mWorld));
    
    	// -------------------------------------------------------------
    
    	// Den Bildpuffer und den Z-Buffer leeren
    	if(FAILED(hResult = m_pd3dDevice->Clear(0,
    											NULL,
    											D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,
     											D3DCOLOR_XRGB(0, 0, 63),
     											1.0f,
     											0)))
    	{
    		// Fehler beim Leeren!
    		MessageBox("Fehler beim Leeren der Puffer", "Fehler", MB_OK | MB_ICONEXCLAMATION);
    		TB_ERROR_DIRECTX("m_pd3dDevice->Clear", hResult, TB_STOP);
    	}
    
    	// Szene beginnen
    	m_pd3dDevice->BeginScene();
    
    	// Nun das Dreieck zeichnen
    	if(FAILED(hResult = m_pd3dDevice->DrawPrimitiveUP(D3DPT_TRIANGLELIST,	// Dreiecksliste
    											          1,					// 1 Dreieck
     													  g_aTriangleVertex,	// Vertexdaten
    													  sizeof(SVertex))))	// Vertexgröße
    	{
    		// Fehler beim Zeichnen!
    		MessageBox("Fehler beim Zeichnen des Dreiecks", "Error", MB_OK | MB_ICONEXCLAMATION);
    		TB_ERROR_DIRECTX("m_pd3dDevice->DrawPrimitiveUP", hResult, TB_STOP);
    	}
    
    	// Szene beenden
    	m_pd3dDevice->EndScene();
    
    	// Der große Moment: den Bildpuffer sichtbar machen
    	m_pd3dDevice->Present(NULL, NULL, NULL, NULL);
    
    	return TB_OK;
    }
    

    Das ist die Render Funktion.



  • Sgt. Nukem schrieb:

    Die Init-Scheisse von OpenGL unter Windows ist in der Tat grausam. 👎

    Einfach schön streamlined DirectX initialisieren. 💡

    Jetzt hör mal auf, das du immer gegen OpenGL flamest, jedes Kind weis, das OpenGL hundert bis hundertfünfzigmal besser als DirectX ist !!!!!!11
    Ausserdem benutzen nur von M$ gehirngewaschene Windoof Jünger diesen DirectWitz. Linux ruuulzzz!!!!!!!!!!!!!!!!!!!!!111
    Versetz dich doch mal in die Lage, von den armen Leuten, die Linux entwickeln, und du würden dich so beleidigen!!!!11
    Ich kannsr eionfach nicht mehr hörenn. Nieder mit Billy Boy und den ganzen faschistischen Microblöd schweinekram!!!!!11eins
    Ausserdem ist OpenGL viel besser als C#.
    Ich hoffe nur, das bald alle die Wahrheit erkennen, und nur mehr Linux benutzen und dann werden solche Flamer gegen OpenGL einfach asu dem Formu geworfenn!!!!!111einself 🤡



  • Genau, jedes Kind, vor allem die mal den Sample Code für ein Dreieck c&p haben und an alle Sätze min 3 ! hängen. 😎

    Bye, TGGC (Pipe my World.)



  • Hey mann, meine OpenGL Dreiecke sind tausendmal besser, als deine DirectSuxx Dreiecke, weil ich hab nähmlich Hardwareunterstützung!!!! Und ausserdem brauche ich nur 5 Zeilen um ein Dreieck zu rendern und du vorher hunderte Zeilen von absolut unsinnigem, nichtsnutzigen Init Code, der nur die GraKa ausbremst!!! :p

    //Edit

    Und ausserdem ruckeln die Sachen, die ich für Windoof schreibe immer total, das beweist das M$ absolut unfähig und geldgeil ist.

    (oh gott, ich kann bald nicht mehr) 🙂



  • ChockoCookie schrieb:

    Und ausserdem ruckeln die Sachen, die ich für Windoof schreibe immer total, das beweist das M$ absolut unfähig und geldgeil ist.

    Stimmt genau. Und ich bin mit meinem Golf schon viermal gegen einen Baum gefahren, das beweist das VW keine vernünftigen Autos bauen kann.



  • Killing me softly schrieb:

    Stimmt genau. Und ich bin mit meinem Golf schon viermal gegen einen Baum gefahren, das beweist das VW keine vernünftigen Autos bauen kann.

    Nein, das beweist das heute jeder Idiot einen Führerschein bekommt. 😉 :p


Anmelden zum Antworten