Arathorns Open GL thread
-
Jo, da ich in letzter zeit viel mir open gl lerne, und ab und an probleme hab und keine lust hab immer nen neuen thread aufzumachen, mach ich hier mal nen sammelthread für meine Open GL fragen auf.
1.Frage: ich hab ein Problem mit dem Texturieren von Quads. in dem code aus der übungslektion funzt es, aber wenn ich das ganze nun auch bei nem anderen Programm machen will, gehts nichtmehr. Compiliert wird alles ohne fehler, aber die texturierte fläche bleibt weiß...( ja, die textur ist vorhanden, 512*512 groß und hat 24 Bit. Und sie ist im pasenden ordner. die textur von dem anderen projekt hat übrigends die selben eigenschaften.) aber hier mal die codeausschnitte:
#include <windows.h> // Header File For Windows #include <stdio.h> #include <gl\gl.h> // Header File For The OpenGL32 Library #include <gl\glu.h> // Header File For The GLu32 Library #include <gl/glaux.h> //Heder File for the GLaux library . . . GLuint texture[1]; . . . AUX_RGBImageRec *LoadBMP(char *Filename) //Loads a BMP image { FILE *File=NULL; // File Handle if (!Filename) // Make Sure a filename was given { return NULL; } File = fopen(Filename,"r"); //Check if the file exists if (File) //Does the file exist { fclose(File); //Close the handle return auxDIBImageLoad(Filename); //Load the BMP and return a pointer } return NULL; } int LoadGLTextures() // Load Bitmaps and convert to textures { int Status = FALSE; //Status Indicator AUX_RGBImageRec *TextureImage[1]; // Create Storage space for the textures memset(TextureImage, 0, sizeof(void *) * 1); // SEt the pointer to null //Load the BMP, Check for errors, if bitmap´s not found quit if (TextureImage[0] = LoadBMP("Data/Front_1.bmp")) { Status = TRUE; //Set the status to true glGenTextures(1, &texture[0]); //Create the texture //Typical Texture Generation, Using Data From the Bitmap glBindTexture(GL_TEXTURE_2D, texture[0]); //Generate the texture glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); //Linear Filtering glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); //Linear Filtering if (TextureImage[0]) //If texture exists { if (TextureImage[0]->data); //if texture image exists { free(TextureImage[0]->data); //Free the texture image memory } free(TextureImage[0]); //Free the image structure } } return Status; } . . . int InitGL(GLvoid) // All Setup For OpenGL Goes Here { if(!LoadGLTextures()) //rufe textur lade routine auf { return FALSE; //wenn textur nicht geladen wurde gebe FALSE zurück } glShadeModel(GL_SMOOTH); // Enable Smooth Shading glClearColor(0.0f, 0.0f, 0.0f, 0.5f); // Black Background glClearDepth(1.0f); // Depth Buffer Setup glEnable(GL_DEPTH_TEST); // Enables Depth Testing glDepthFunc(GL_LEQUAL); // The Type Of Depth Testing To Do glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Really Nice Perspective Calculations return TRUE; // Initialization Went OK } . . . int DrawGLScene(GLvoid) // Here's Where We Do All The Drawing { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear Screen And Depth Buffer glLoadIdentity(); // Reset The Current Modelview Matrix glTranslatef(xpos, ypos, zpos); // Move Left 1.5 units and 6.0 into the screen glRotatef(rquad, 0.0f, 1.0f, 0.0f); //Rotate around the y-axis glBindTexture(GL_TEXTURE_2D, texture[0]); //wählt die textur aus glBegin(GL_QUADS); // Drawing uses Quads glTexCoord2f(0.7f, 1.0f); glVertex3f( 0.4f, 3.0f, 0.0f); //Top right front glTexCoord2f(0.3f, 1.0f); glVertex3f(-0.4f, 3.0f, 0.0f); //Top left front glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.5f, 0.0f, 0.0f); //Middle left front glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.5f, 0.0f, 0.0f); //Middle right front glVertex3f( 1.5f, 0.0f, 0.0f); //Middle right front glVertex3f(-1.5f, 0.0f, 0.0f); //Middle left front glVertex3f(-1.0f,-0.5f, 0.0f); //Bottom left front glVertex3f( 1.0f,-0.5f, 0.0f); //Bottom right front glVertex3f(-1.0f,-0.5f,-0.5f); //back left Bottom glVertex3f(-1.0f,-0.5f, 0.0f); //front left bottom glVertex3f( 1.0f,-0.5f, 0.0f); //front right bottom glVertex3f( 1.0f,-0.5f,-0.5f); //back right bottom glVertex3f(-1.5f, 0.0f,-0.5f); //back top middle-side-left glVertex3f(-1.5f, 0.0f, 0.0f); //front top middle-side-left glVertex3f(-1.0f,-0.5f, 0.0f); //front bottom middle-side-left glVertex3f(-1.0f,-0.5f,-0.5f); //back bottom middle-side-left glVertex3f( 1.5f, 0.0f,-0.5f); //back top middle-side-right glVertex3f( 1.5f, 0.0f, 0.0f); //front top middle-side-right glVertex3f( 1.0f,-0.5f, 0.0f); //front bottom middle-side-right glVertex3f( 1.0f,-0.5f,-0.5f); //back bottom middle-side-right glVertex3f(-0.4f, 3.0f,-0.5f); //back top side left glVertex3f(-0.4f, 3.0f, 0.0f); //front top side left glVertex3f(-1.5f, 0.0f, 0.0f); //front bottom side left glVertex3f(-1.5f, 0.0f,-0.5f); //back bottom side left glVertex3f( 0.4f, 3.0f,-0.5f); //back top side right glVertex3f( 0.4f, 3.0f, 0.0f); //front top side right glVertex3f( 1.5f, 0.0f, 0.0f); //front bottom side right glVertex3f( 1.5f, 0.0f,-0.5f); //back bottom side right glVertex3f(-0.4f, 3.0f,-0.5f); //back left top glVertex3f(-0.4f, 3.0f, 0.0f); //front left top glVertex3f( 0.4f, 3.0f, 0.0f); //front right top glVertex3f( 0.4f, 3.0f,-0.5f); //back right top glVertex3f( 0.4f, 3.0f,-0.5f); //Top right back glVertex3f(-0.4f, 3.0f,-0.5f); //Top left back glVertex3f(-1.5f, 0.0f,-0.5f); //Middle left back glVertex3f( 1.5f, 0.0f,-0.5f); //Middle right back glVertex3f( 1.5f, 0.0f,-0.5f); //Middle right back glVertex3f(-1.5f, 0.0f,-0.5f); //Middle left back glVertex3f(-1.0f,-0.5f,-0.5f); //Bottom left back glVertex3f( 1.0f,-0.5f,-0.5f); //Bottom right back glEnd(); // End drawing rquad += 0.5f; //decrease the rotation variable for the quad return TRUE; // Everything Went OK }liegts vielleicht daran, dass zum testen erstmal nur eine seite texturiert werden soll?
-
Hab ichs übersehen oder fehlt da ein
glEnable(GL_TEXTURE_2D);?
-
Aua. ich sollte nächstes mal genauer lesen. thx, für die antwort.
aja, hab hier in nem anderen thread was von dem neuen Open GL 3.0 gelesen. lohnt es sich übnerhaupt noch das alte zu lernen, oder soll ich lieber auf das neue warten?
-
Arathorns Sohn schrieb:
Aua. ich sollte nächstes mal genauer lesen. thx, für die antwort.
aja, hab hier in nem anderen thread was von dem neuen Open GL 3.0 gelesen. lohnt es sich übnerhaupt noch das alte zu lernen, oder soll ich lieber auf das neue warten?
Die Grundlagen kannst du auch ruhig am Alten lernen, so schnell stirbt das nicht aus. Und außerdem weis ich ja nicht ob deine Graka auch potentiell OGL3-fähig ist^^
-
Ist ne X1950XT, also nicht wirklich so alt. aja, ist das nehe tut empfehlenswert?
-
Arathorns Sohn schrieb:
Ist ne X1950XT, also nicht wirklich so alt. aja, ist das nehe tut empfehlenswert?
Also wenn sich quer durch Foren liest, wird es sehr oft empfohlen. Ich persönlich finde den Farbstil der Website grauenhaft. Und die Tuts selbst naja es gibt sehr viel. Aber der Stil ist nicht mein Fall. Da musst du einfach selber schauen, ob du was damit anfangen kannst.
http://www.gamedev.net/ Die Seite ist auch ziemlich gut.
-
Die Nehe Tutorials sind ziemlich umfangreich, aber leider verwendet der Autor einen etwas kruden C/C++ Mix (sieht aus wie C, manchmal steht dann aber auch new mittendrin...)
Grüße,
Martin
-
die seite gamedev kenn ich, hab zumindest schon davon gehört. aja, wegen dem farbstil, es gibt hier ne deutsche übersetzung in ordentlichen farben.^^
http://www.joachimrohde.com/cms/xoops/modules/articles/article.php?id=10
-
Den Farbstil kann man auch ändern...
-
Die nehe Tuts sind ziemlich OK was OGL angeht. C++ sollte man schon können, dann stört es auch nicht wenn der "C++ Stil" grauenhaft ist -- man sieht was man mit OGL machen muss, "die Form" bleibt einem selbst überlassen.
-
jo, thx. aber ich hab ne weitere frage. ich hab ein 3d objekt gemacht, das sechseckicg ist, also brauche ich auch für jede fläche zwei faces, für die ich je andere texturen benutzen möchte, aber an dem punkt, wo die beiden texturen des font aufeinander treffen, gibt es einige weiße pixel( fast eine durchgehende reihe), aber die texturen sind bis auf den letzten pixel grau, und nicht weiß. Was kann ich machen?
-
wo die beiden texturen des font aufeinander treffen, gibt es weiße pixel
was'n fuer'n font?
Was kann ich machen?
'nen screenshot posten?
-
http://s6.directupload.net/images/070920/temp/c2uRZbcH.png
da. nix gegen die texturen(provisorisch) oder meinen musikgeschmack^^
-
jetzt verrate uns doch noch ein paar details:
wie sehen deine texturkoordinaten aus, wie sieht die textur aus (groesse) und wie kopierst du selbige in den grafikspeicher.
-
Bis auf die größe findest du alles in post 1. groß sind beide 512*512( coord der zweiten textur kommen jetzt.)
so, die ganzen coords( auch die von textur eins.)
glBindTexture(GL_TEXTURE_2D, texture[0]); //wählt die textur aus glBegin(GL_QUADS); // Drawing uses Quads glTexCoord2f(0.7f, 1.0f); glVertex3f( 0.4f, 3.0f, 0.0f); //Top right front glTexCoord2f(0.3f, 1.0f); glVertex3f(-0.4f, 3.0f, 0.0f); //Top left front glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.5f, 0.0f, 0.0f); //Middle left front glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.5f, 0.0f, 0.0f); //Middle right front glEnd(); glBindTexture(GL_TEXTURE_2D, texture[1]); glBegin(GL_QUADS); glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.5f, 0.0f, 0.0f); //Middle right front glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.5f, 0.0f, 0.0f); //Middle left front glTexCoord2f(0.25f, 0.0f); glVertex3f(-1.0f,-0.5f, 0.0f); //Bottom left front glTexCoord2f(0.75f, 0.0f); glVertex3f( 1.0f,-0.5f, 0.0f); //Bottom right front glVertex3f(-1.0f,-0.5f,-0.5f); //back left Bottom glVertex3f(-1.0f,-0.5f, 0.0f); //front left bottom glVertex3f( 1.0f,-0.5f, 0.0f); //front right bottom glVertex3f( 1.0f,-0.5f,-0.5f); //back right bottom glVertex3f(-1.5f, 0.0f,-0.5f); //back top middle-side-left glVertex3f(-1.5f, 0.0f, 0.0f); //front top middle-side-left glVertex3f(-1.0f,-0.5f, 0.0f); //front bottom middle-side-left glVertex3f(-1.0f,-0.5f,-0.5f); //back bottom middle-side-left glVertex3f( 1.5f, 0.0f,-0.5f); //back top middle-side-right glVertex3f( 1.5f, 0.0f, 0.0f); //front top middle-side-right glVertex3f( 1.0f,-0.5f, 0.0f); //front bottom middle-side-right glVertex3f( 1.0f,-0.5f,-0.5f); //back bottom middle-side-right glVertex3f(-0.4f, 3.0f,-0.5f); //back top side left glVertex3f(-0.4f, 3.0f, 0.0f); //front top side left glVertex3f(-1.5f, 0.0f, 0.0f); //front bottom side left glVertex3f(-1.5f, 0.0f,-0.5f); //back bottom side left glVertex3f( 0.4f, 3.0f,-0.5f); //back top side right glVertex3f( 0.4f, 3.0f, 0.0f); //front top side right glVertex3f( 1.5f, 0.0f, 0.0f); //front bottom side right glVertex3f( 1.5f, 0.0f,-0.5f); //back bottom side right glVertex3f(-0.4f, 3.0f,-0.5f); //back left top glVertex3f(-0.4f, 3.0f, 0.0f); //front left top glVertex3f( 0.4f, 3.0f, 0.0f); //front right top glVertex3f( 0.4f, 3.0f,-0.5f); //back right top glVertex3f( 0.4f, 3.0f,-0.5f); //Top right back glVertex3f(-0.4f, 3.0f,-0.5f); //Top left back glVertex3f(-1.5f, 0.0f,-0.5f); //Middle left back glVertex3f( 1.5f, 0.0f,-0.5f); //Middle right back glVertex3f( 1.5f, 0.0f,-0.5f); //Middle right back glVertex3f(-1.5f, 0.0f,-0.5f); //Middle left back glVertex3f(-1.0f,-0.5f,-0.5f); //Bottom left back glVertex3f( 1.0f,-0.5f,-0.5f); //Bottom right back glEnd(); // End drawingtexturen kommen auch jetzt.
textur1:http://img341.imageshack.us/img341/6403/front1jj3.th.png
textur2:http://img341.imageshack.us/img341/8656/front2qr3.th.png
-
mach mal texture-repeat aus.
-
thx, aber jetzt ist diese pixel linie schwarz, als wäre an der stelle nix( ur hintergrund)
-
och, i-jemand weiß bestimm was. aber ich hab auch drei neue fragen:
1.Wie schreibe ich mir einen packer und unpacker für gamedaten.( also z.B. um alle texturen zur datei textures.game zu komprimieren. Sprache bitte C++).
2.Wie kann ich die texturen aus dieser datei laden?
3.Welcher dateityp empfiehlt sich für texturen? TGA, JPG, oder PNG, und wie lade ich diesen um ihn in eine textur umzuwandeln?
THX, schonmal für die hilfe.
-
-
THX, aber zu der unrarlib, wären ein paar erklärungen wünschenswert. Kann ich da das format zum packen angeben? und wie kann ich einzelne sachen aus damit gepackten archiven laden? erst in den ram entpacken, oder?
edit: ok, unrarlib ist nur für rars, aber ich möchte files machen, die man nicht einfach mit winrar entpacken und verändern kann...
edit2: und welcher dateityp empfiehlt sich für texturen?