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