seltsame 3d-rendererung lol
-
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 ...