TGALoader für OpenGL
-
- Beiträge: 52
- Registriert: Mi Mai 12, 2010 3:48 pm
TGALoader für OpenGL
Kennt jemand nen guten TGALoader für OpenGL...
Am besten in C++ geschrieben
Am besten in C++ geschrieben
return EXIT_FAILURE;
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: TGALoader für OpenGL
TGA wird - soweit ich weiß - gerne verwendet, weil es ein sehr primitives Format ist. Die Bitmap versteckt sich direkt hinter dem Header, wenn ich mich recht entsinne.
Von daher brauchst Du Dir nur das Format rauszusuchen, den Header zu laden und Du weißt, wieviele Informationen als Bitmap folgen.
Von daher brauchst Du Dir nur das Format rauszusuchen, den Header zu laden und Du weißt, wieviele Informationen als Bitmap folgen.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
-
- Beiträge: 52
- Registriert: Mi Mai 12, 2010 3:48 pm
Re: TGALoader für OpenGL
Also mein TGALoader ist soweit fertig
nur momentan zeigt mir opengl gar nichts an...
hier der code vom main programm
nur momentan zeigt mir opengl gar nichts an...
hier der code vom main programm
Code: Alles auswählen
#include<stdlib.h>
#include"GLheaders.h"
#include"tgaloader.h"
void SetupRC(){
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
GLbyte *bytes;
GLint width, height, components;
GLenum format;
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
bytes = LoadTGA("test.tga", &width, &height, &components, &format);
glTexImage2D(GL_TEXTURE_2D, 0, components, width, height, 0, format, GL_UNSIGNED_BYTE, bytes);
free(bytes);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glEnable(GL_TEXTURE_2D);
}
void ChangeSize(GLint w, GLint h){
GLfloat AspectRatio;
if(h==0){
h=1;
}
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
AspectRatio = (GLfloat)w/(GLfloat)h;
if(w <= h){
glOrtho(-100.0f, 100.0f, -100/AspectRatio, 100/AspectRatio, 1.0f, -1.0f);
}
else{
glOrtho(-100.0f * AspectRatio, 100.0f * AspectRatio, -100.0f, 100.0f, 1.0f, -1.0f);
}
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void DrawScene(){
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f);
glVertex3f(-3.0f, -3.0f, -6.0f);
glTexCoord2f(1.0f, 0.0f);
glVertex3f(3.0f, -3.0f, -6.0f);
glTexCoord2f(1.0f, 1.0f);
glVertex3f(3.0f, 3.0f, -6.0f);
glTexCoord2f(0.0f, 1.0f);
glVertex3f(-3.0f, 3.0f, -6.0f);
glutSwapBuffers();
}
int main(int argc, char **argv){
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(400, 400);
glutCreateWindow("TGALoader Test 1");
SetupRC();
glutDisplayFunc(DrawScene);
glutReshapeFunc(ChangeSize);
glutMainLoop();
return 0;
}
return EXIT_FAILURE;
Re: TGALoader für OpenGL
Irgendwie finde ich nirgendwo Aufruf von 'glGenTextures' und 'glBindTexture'. Somit hast du auch keinen von OpenGL verwendbaren Platz für eine Textur bzw. hast auch nie eine Textur aktiviert...
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)
OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at
OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at
-
- Beiträge: 52
- Registriert: Mi Mai 12, 2010 3:48 pm
Re: TGALoader für OpenGL
ich kenn mich ja mit texturen (noch) nicht so gut aus.
ich habe eigentlich gedacht das würde glTex2D machen
ich habe eigentlich gedacht das würde glTex2D machen
return EXIT_FAILURE;
Re: TGALoader für OpenGL
Kann ja noch werdenpaparoach777 hat geschrieben:ich kenn mich ja mit texturen (noch) nicht so gut aus.
Das du gar nichts siehst liegt daran dass dein Viereck außerhalb des sichtbaren Bereichs liegt:
Code: Alles auswählen
glOrtho(-100.0f * AspectRatio, 100.0f * AspectRatio, -100.0f, 100.0f, 1.0f, -1.0f);
// ...
glVertex3f(-3.0f, -3.0f, -6.0f);
Wenn du das änderst wirst du wahrscheinlich ein Quadrat in irgendeiner Farbe sehen. Frag mich bitte nicht was die Standardwerte für Farben in OpenGL sind. Am Besten legst du die Farbe zum Löschen (glClearColor(float r, float g, float b, float a)) und zum Zeichnen (glColor3f(float r, float g, float b)) selber fest, dann kann es nicht passieren das Vorder- und Hintergrund die selbe Farbe haben.
Sobald das funktioniert kannst du versuchen die Textur anzuzeigen. Damit in OpenGL Operationen mit Texturen durchgeführt werden muss zuerst die entsprechende Textur festgelegt werden. Dabei gibt es mehrere Typen von Texturen wie GL_TEXTURE_2D oder GL_TEXTURE_3D. Bevor man mit einer Textur einer der Typen arbeiten kann muss man die zu verwendete Textur mit ihrem Namen setzten. Also für eine 2d-Textur zb so:
Code: Alles auswählen
glBindTexture(GL_TEXTURE_2D, texture_id);
Code: Alles auswählen
glGenTextures(1, &texture_id); // einen Namen holen und in texture_id speichern
Code: Alles auswählen
glDeleteTextures(1, &texture_id);
Code: Alles auswählen
GLuint texture_id;
glGenTextures(1, &texture_id);
glBindTexture(GL_TEXTURE_2D, texture_id);
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)
OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at
OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at
-
- Beiträge: 52
- Registriert: Mi Mai 12, 2010 3:48 pm
Re: TGALoader für OpenGL
Standfarbe für OpenGL müsste eigentlich weiß sein...
Na ja egal.
Aber wie bekomm ich jetzt die aus dem TGA geladenen Daten in die Textur???
Post Scriptum:
Danke das mit dem Blickfeld erweitern hat geklappt. jetzt seh ich schonmal ein Viereck
Na ja egal.
Aber wie bekomm ich jetzt die aus dem TGA geladenen Daten in die Textur???
Post Scriptum:
Danke das mit dem Blickfeld erweitern hat geklappt. jetzt seh ich schonmal ein Viereck
return EXIT_FAILURE;
Re: TGALoader für OpenGL
Eigentlich eh so wie du es gezeigt hast. Du musst nur zuerst wie beschrieben einen OpenGL Textur Namen holen und setzen und erst dann die Textur laden.paparoach777 hat geschrieben:Aber wie bekomm ich jetzt die aus dem TGA geladenen Daten in die Textur???
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)
OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at
OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at
-
- Beiträge: 52
- Registriert: Mi Mai 12, 2010 3:48 pm
Re: TGALoader für OpenGL
Ok hab ich gemacht.
Aber auf dem Bildschirm ist nur ein schwarzes Quadrat...
Aber auf dem Bildschirm ist nur ein schwarzes Quadrat...
return EXIT_FAILURE;
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: TGALoader für OpenGL
glEnable(GL_TEXTURE_2D)?paparoach777 hat geschrieben:Ok hab ich gemacht.
Aber auf dem Bildschirm ist nur ein schwarzes Quadrat...
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.