seltsame 3d-rendererung lol



  • S.O.S.!!!!



  • Ja bring doch mal den betreffenden code.. Mag keine Software downloaden und ausfuehren...



  • Blendstages oder Alpha aktiviert? Ist nur eine Vermutung, da ich mit sicherheit keine Software einfach so ausfuehre.



  • ok, ok ich wollte bislang vermeiden, hier 3 seiten sourcecode zu posten... aber klar, da ich ein sehr gefährlicher Virus bin.... 🙄

    //--------------------------------------------------------------------------- 
    #include <vcl/vcl.h>
    #include <gl/gl.h> 
    #include <gl/glu.h>
    #include <gl/glaux.h>
    #include <FLOAT.H>
    #pragma hdrstop
    #include "opengl.h"
    
    int rdreieck;
    int rachteck;
    int rviereck;
    //--------------------------------------------------------------------------- 
    #pragma resource "*.dfm" 
    
    TForm1 *Form1; 
    //--------------------------------------------------------------------------- 
    __fastcall TForm1::TForm1(TComponent* Owner) 
        : TForm(Owner) 
    { 
        Form1->Width=Screen->Width;
        Form1->Height=Screen->Height;
        Form1->Left=0;
        Form1->Top=0;
         DEVMODE dmScreenSettings;
        // Instanz von DEVMODE wird erzeugt
    
        memset(&dmScreenSettings,0,sizeof(dmScreenSettings)); 
        // Diese wird geleert
    
        dmScreenSettings.dmSize=sizeof(dmScreenSettings); 
        // dmsize soll genauso groß wie die dmScreenSettings sein
    
        dmScreenSettings.dmPelsWidth = 1280;
        // Die drei Werte (height, width und bits)
        // wurden der Prozedur übergeben und werden
        // nun in dmScreenSettings gespeichert
    
        dmScreenSettings.dmPelsHeight = 1024;
        dmScreenSettings.dmBitsPerPel = 0;
        dmScreenSettings.dmFields=DM_BITSPERPEL|
        DM_PELSWIDTH|DM_PELSHEIGHT;
        // Hier werden die drei Werte in einem Ausdruck gespeichert
    
       ChangeDisplaySettings(&dmScreenSettings,CDS_FULLSCREEN);
       ShowWindow(Handle,SW_SHOW); // Fenster anzeigen
      	SetForegroundWindow(Handle); // Priorität des Programms wird erhöht
      	SetFocus(); // Tastatureingaben werden
                      // jetzt an das Programm geleitet
           ShowCursor(true);
    
        i=5;
        Application->OnIdle = IdleLoop;
        _control87(MCW_EM, MCW_EM);
        // Set the clear color to black
    	glClearColor(0.0, 0.0, 0.0, 0.0);
    
    	// Set the shading model
    	glShadeModel(GL_FLAT);
    
    	// Set the polygon mode to fill
    	glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
    
    	// Enable depth testing for hidden line removal
    	glEnable(GL_DEPTH_TEST);
    
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::IdleLoop(TObject*, bool& done)
    {
         done = false;
         RenderGLScene();
         SwapBuffers(hdc);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::RenderGLScene()
    {
         //Place your OpenGL drawing code here
    	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    
    	// Set the modelview matrix to be the identity matrix
    	glLoadIdentity();
         glTranslatef(-1.5f,-1.5f,-8.0f);
      // Auf der X-Achse 1.5 Einheiten zurück (Nach links)
      // Auf der Y-Achse 1.5 Einheiten zurück (Nach unten)
      // Auf der Z-Achse 6 Einheiten zurück (In den Bildschirm hinnein.)
       glRotatef(rdreieck,0.0f,1.0f,0.0f);
      // Die Pyramide soll um die Y-Achse rotiert werden
    
      glBegin(GL_TRIANGLES);
      // Es folgen die Koordinaten für mehrere Dreiecke
    
        glColor3f(0.0f,0.0f,1.0f); // das vordere soll blau werden
        glVertex3f( 0.0f, 1.0f, 0.0f); // oben (vorderes Dreieck)
        glVertex3f(-1.0f,-1.0f, 1.0f); // links (vorderes Dreieck)
        glVertex3f( 1.0f,-1.0f, 1.0f); // rechts (vorderes Dreieck)
    
        glColor3f(1.0f,0.0f,0.0f); // das rechte soll rot werden
        glVertex3f( 0.0f, 1.0f, 0.0f);  // oben (rechtes Dreieck)
        glVertex3f( 1.0f,-1.0f, 1.0f);  // links (rechtes Dreieck)
        glVertex3f( 1.0f,-1.0f, -1.0f); // rechts (rechtes Dreieck)
    
        glColor3f(0.0f,1.0f,0.0f); // das hintere grün
        glVertex3f( 0.0f, 1.0f, 0.0f);  // oben (hinteres Dreieck)
        glVertex3f( 1.0f,-1.0f, -1.0f); // links (hinteres Dreieck)
        glVertex3f(-1.0f,-1.0f, -1.0f); // rechts (hinteres Dreieck)
    
        glColor3f(1.0f,1.0f,0.0f); // und das linke gelb
        glVertex3f( 0.0f, 1.0f, 0.0f); // oben (linkes Dreieck)
        glVertex3f(-1.0f,-1.0f,-1.0f); // links (linkes Dreieck)
        glVertex3f(-1.0f,-1.0f, 1.0f); // rechts (linkes Dreieck)
    
      glEnd(); // Zeichenaktion beenden
    
      glLoadIdentity(); // zurücksetzen
       glTranslatef(-0.5f,0.8f,-9.0f);
      // 5 Einheiten nach links, 0.8 Einheiten nach unten,
      // 9 Einheiten "in" den Schirm
    
      glRotatef(rviereck,1.0f,1.0f,0.0f);
      // Der Würfel soll um die X- und Y-Achse rotiert werden
      glBegin(GL_QUADS); // Vierecke zeichnen
       glColor3f(0.0f,1.0f,0.0f); // Mit Blau gehts los
      glVertex3f( 1.0f, 1.0f,-1.0f); // oben rechts (OBEN)
      glVertex3f(-1.0f, 1.0f,-1.0f); // oben links (OBEN)
      glVertex3f(-1.0f, 1.0f, 1.0f); // unten links (OBEN)
      glVertex3f( 1.0f, 1.0f, 1.0f); // unten rechts  (OBEN)
      glColor3f(1.0f,0.5f,0.0f); // Orange
       glVertex3f( 1.0f,-1.0f, 1.0f); // oben rechts (UNTEN)
       glVertex3f(-1.0f,-1.0f, 1.0f); // oben links (UNTEN)
       glVertex3f(-1.0f,-1.0f,-1.0f); // unten links (UNTEN)
       glVertex3f( 1.0f,-1.0f,-1.0f); // unten rechts  (UNTEN)
         glColor3f(1.0f,0.0f,0.0f); // Rot
       glVertex3f( 1.0f, 1.0f, 1.0f); // oben rechts (VORNE)
       glVertex3f(-1.0f, 1.0f, 1.0f); // oben links (VORNE)
       glVertex3f(-1.0f,-1.0f, 1.0f); // unten links (VORNE)
       glVertex3f( 1.0f,-1.0f, 1.0f); // unten rechts  (VORNE)
       glColor3f(1.0f,1.0f,0.0f); // Gelb
       glVertex3f( 1.0f,-1.0f,-1.0f); // oben rechts (HINTEN)
       glVertex3f(-1.0f,-1.0f,-1.0f); // oben links (HINTEN)
       glVertex3f(-1.0f, 1.0f,-1.0f); // unten links (HINTEN)
       glVertex3f( 1.0f, 1.0f,-1.0f); // unten rechts  (HINTEN)
        glColor3f(1.0f,0.0f,1.0f); // Violet
       glVertex3f( 1.0f, 1.0f,-1.0f); // oben rechts (RECHTS)
       glVertex3f( 1.0f, 1.0f, 1.0f); // oben links (RECHTS)
       glVertex3f( 1.0f,-1.0f, 1.0f); // unten links (RECHTS)
       glVertex3f( 1.0f,-1.0f,-1.0f); // unten rechts (RECHTS)
       glEnd(); // Zeichenaktion beenden
    
      glLoadIdentity(); // zurücksetzen
    
    glTranslatef(3.0f,0.0f,-9.0f);
    // 3 Einheiten nach rechts, 9 Einheiten "in" den Schirm
    
    glRotatef(rachteck,0.0f,0.0f,1.0f); // Die Firgur soll um die Z-Achse rotiert werden
      glBegin(GL_POLYGON); // Ein Polygon (in diesem Falle ein Achteck.)
      // jede Ecke bekommt eine andere Farb
    
        glColor3f(1.0f,0.0f,0.0f); // rot
        glVertex3f(-0.5f, 1.5f, -1.0f); // obere Ecke links
        glVertex3f( 0.5f, 1.5f, -1.0f); // obere Ecke recht
    
        glColor3f(0.0f,0.0f,1.0f); // blau
        glVertex3f( 1.5f, 0.5f, -1.0f); // rechte Ecke oben
        glVertex3f( 1.5f,-0.5f, -1.0f); // rechte Ecke unten
    
        glColor3f(0.0f,1.0f,0.0f); // grün
        glVertex3f( 0.5f,-1.5f, -1.0f); // untere Ecke rechts
        glVertex3f(-0.5f,-1.5f, -1.0f); // untere Ecke links
    
        glColor3f(1.0f,1.0f,0.0f); // gelb
        glVertex3f(-1.5f,-0.5f, -1.0f); // linke Ecke unten
        glVertex3f(-1.5f, 0.5f, -1.0f); // linke Ecke oben
        glEnd(); // Zeichenaktion beenden
    
      glBegin(GL_TRIANGLES); //Dreiecke sollen gezeichnet werden
      // jedes bekommt eine andere Farbe
    
        glColor3f(1.0f,0.0f,0.0f); // rot
        glVertex3f( 0.0f, 0.0f, 1.0f); // gemeinsamer Mittelpunkt
        glVertex3f(-0.5f, 1.5f, -1.0f); // obere Ecke links
        glVertex3f( 0.5f, 1.5f, -1.0f); // obere Ecke rechts
    
        glColor3f(0.0f,0.0f,1.0f); // blau
        glVertex3f( 0.0f, 0.0f, 1.0f); // gemeinsamer Mittelpunkt
        glVertex3f( 1.5f, 0.5f, -1.0f); // rechte Ecke oben
        glVertex3f( 1.5f,-0.5f, -1.0f); // rechte Ecke unten
    
        glColor3f(0.0f,1.0f,0.0f); // grün
        glVertex3f( 0.0f, 0.0f, 1.0f); // gemeinsamer Mittelpunkt
        glVertex3f( 0.5f,-1.5f, -1.0f); // untere Ecke rechts
        glVertex3f(-0.5f,-1.5f, -1.0f); // untere Ecke links
    
        glColor3f(1.0f,1.0f,0.0f); // gelb
        glVertex3f( 0.0f, 0.0f, 1.0f); // gemeinsamer Mittelpunkt
        glVertex3f(-1.5f,-0.5f, -1.0f); // linke Ecke unten
        glVertex3f(-1.5f, 0.5f, -1.0f); // linke Ecke oben
      glEnd(); // Zeichenaktion beenden
    
    	// Flush the buffer to force drawing of all objects thus far
    	glFlush();
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
        hdc = GetDC(Handle);
        SetPixelFormatDescriptor();
        hrc = wglCreateContext(hdc);
        wglMakeCurrent(hdc, hrc);
        SetupRC();
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::SetupRC()
    {
        glClearColor(0.0f,0.0f, 0.0f, 0.0f);
        glClear(GL_COLOR_BUFFER_BIT);
        glFlush();
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormDestroy(TObject *Sender)
    {
        ReleaseDC(hdc,NULL);
        wglMakeCurrent(hdc, NULL);
        wglDeleteContext(hrc);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::SetPixelFormatDescriptor()
    {
        PIXELFORMATDESCRIPTOR pfd = {
            sizeof(PIXELFORMATDESCRIPTOR),
            1,
            PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER,
            PFD_TYPE_RGBA,
            24,
            0,0,0,0,0,0,
            0,0,
            0,0,0,0,0,
            32,
            0,
            0,
            PFD_MAIN_PLANE,
            0,
            0,0,0
            };
        PixelFormat = ChoosePixelFormat(hdc, &pfd);
        SetPixelFormat(hdc, PixelFormat, &pfd);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormResize(TObject *Sender)
    {
        GLfloat nRange = 200.0f;
        glViewport(0, 0, ClientWidth, ClientHeight);
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
    
        if (ClientWidth <= ClientHeight)
           glOrtho(-nRange, nRange, -nRange*ClientHeight/ClientWidth,
                    nRange*ClientHeight/ClientWidth, -nRange, nRange);
        else
           glOrtho(-nRange*ClientWidth/ClientHeight, nRange*ClientWidth/ClientHeight,
                    -nRange, nRange, -nRange, nRange);
    
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    Timer1->Enabled=true;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormClick(TObject *Sender)
    {
    //i=30000;
    //Timer1->Enabled=true;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button3Click(TObject *Sender)
    {
    Timer1->Enabled=false;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
    	TShiftState Shift)
    {
    	if(VkKeyScan(Key)==27)Close();
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Timer2Timer(TObject *Sender)
    {
    //
      	// Set the new viewport size
    	glViewport(0, 0, Form1->Width, Form1->Height);
    
    	// Choose the projection matrix to be the matrix
    	// manipulated by the following calls
    	glMatrixMode(GL_PROJECTION);
    
    	// Set the projection matrix to be the identity matrix
    	glLoadIdentity();
    
    	// Define the dimensions of the Orthographic Viewing Volume
    	glOrtho(-10, 10, -10, 10, -10, 10);
    
    	// Choose the modelview matrix to be the matrix
    	// manipulated by further calls
    	glMatrixMode(GL_MODELVIEW);
           //Place your OpenGL drawing code here
         	// Clear the RGB buffer and the depth buffer
    	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    rachteck++;
    rdreieck++;
    rviereck++;
    RenderGLScene();
    }
    //---------------------------------------------------------------------------
    

    so, bittschön und vielen dank
    chris90



  • chris90 schrieb:

    du solltest deinen quellcode auch mal neu kompilieren 🙄

    Was willst du mir damit sagen?
    Bei der vagen Beschreibung des Problems, die du abgeliefert hattest, war das der beste Tipp den man riskieren konnte ohne sich auf Annahmen oder Mutmaßungen zu stützen.
    Hast ja nicht mal gesagt welche API du benutzt ...



  • Also wenn du ein echter Profi wärst, dann könntest du sofort wenn jemand sagt: "Mein Programm läuft nicht", erkennen, was der Fehler ist. So dumme Sprüche kannste echt steckenlassen. Fehlerbeschreibung pfft. Wenn du keine Ahnung hast, dann sag halt nix. Bist du etwa nur so ein Troll, der nur auf ganz schlau macht?!

    Bye, TGGC (Keine Macht den Dummen)



  • wie wärs, wenn du den zu rendernden raum vergrößerst? also bei mir sieht es so aus , als ob er vorne oder hinten die polygone abschneiden.
    (nur eine idee)

    .MamboKurt



  • danke, mambokurt & TGGC!

    Ich glaube ich werde es nochmal versuchen mit vergrößtertem raum (gute Idee!!).
    Wenn es dann nicht geht, lass ich es und steige auf WinAPI (<-RULZ) um.
    Achja, lassen sich z.b. einfache strategiespiele mit opengl und WinAPI realisieren?

    danke,
    chris90



  • danke, mambokurt & TGGC!

    Ich glaube ich werde es nochmal versuchen mit vergrößtertem raum (gute Idee!!).
    Wenn es dann nicht geht, lass ich es und steige auf WinAPI (<-RULZ) um.
    Achja, lassen sich z.b. einfache strategiespiele mit opengl und WinAPI realisieren?

    danke,
    chris90



  • chris90 schrieb:

    Wenn es dann nicht geht, lass ich es und steige auf WinAPI (<-RULZ) um.

    Allerdings!

    Achja, lassen sich z.b. einfache strategiespiele mit opengl und WinAPI realisieren?

    Ja.
    Du solltest erstmal DirectX sehen... *schwärm*



  • Mhh, da hats wohl einer nicht verstanden?! 😎

    Bye, TGGC (Keine Macht den Dummen)



  • chris90 schrieb:

    Achja, lassen sich z.b. einfache strategiespiele mit opengl und WinAPI realisieren?

    Nein.
    Da nehm' lieber BlitzBasic. 👍



  • TGGC schrieb:

    Also wenn du ein echter Profi wärst, dann könntest du sofort wenn jemand sagt: "Mein Programm läuft nicht", erkennen, was der Fehler ist. So dumme Sprüche kannste echt steckenlassen. Fehlerbeschreibung pfft. Wenn du keine Ahnung hast, dann sag halt nix. Bist du etwa nur so ein Troll, der nur auf ganz schlau macht?!

    LOL, sorry du hast recht ...
    Werde noch etwas an meiner Kristallkugel üben gehen ... 🙂


Anmelden zum Antworten