Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

04.07.2012, 01:26

OpenGL Textur

Halloooo! Ich habe meinen Code nun schon mit 6 verschiedenen Beispielen verglichen. Leider wird die Textur trotzdem nicht auf der gewünschten Seite eines gefakten Würfels angezeigt.
Noch besser: Sie wird gar nicht angezeigt.
Nichts hat geholfen bzw. sich so hart von meinem Code unterschieden, dass es, nach meiner Betrachtungsweise, relevant dafür gewesen wäre.
Würde mal wer drüber gucken? Bestimmt ist irgendwas mit 'ner Reihenfolge oder so falsch. :(
Achja, deutsche Kommentare sind Erwähnungen, dass etwas heraus gelassen wurde. Nicht, dass wer denkt, dass ja das alles da fehlen würde. :D

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
GLuint LoadTexture(sf::Image *Image)
{
    GLuint TextureID;
    glGenTextures(1, &TextureID);
    glBindTexture(GL_TEXTURE_2D, TextureID);
    glTexImage2D(GL_TEXTURE_2D,
                0,
                GL_RGB,
                Image->getSize().x, Image->getSize().y,
                0,
                GL_RGB,
                GL_UNSIGNED_BYTE,
                Image->getPixelsPtr());
    return TextureID;
}

GLuint _textureId;

void InitRendering()
{
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_COLOR_MATERIAL);
    glEnable(GL_NORMALIZE);
    //glShadeModel(GL_SMOOTH);
    
    sf::Image* Image = new sf::Image();
    if(!Image->loadFromFile("texture.png"))
        exit(0);
    _textureId = LoadTexture(Image);
    delete Image;
}
void DrawScene()
{
    //Das Übliche :3

    //////
    //Cube
    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D, _textureId);

    glRotatef(_angle, 1.f, 1.f, 0.f);
    glColor3f(1.f, 1.f, 1.f);
    glBegin(GL_QUADS);

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
    
    //Front
    glNormal3f(0.f, 0.f, 1.f);
        glTexCoord2f(0.f, 0.f);
    glVertex3f(-1.5f, -1.f, 1.5f);
        glTexCoord2f(1.f, 0.f);
    glVertex3f(1.5f, -1.f, 1.5f);
        glTexCoord2f(1.f, 1.f);
    glVertex3f(1.5f, 1.f, 1.5f);
        glTexCoord2f(0.f, 1.f);
    glVertex3f(-1.5f, 1.f, 1.5f);

    glDisable(GL_TEXTURE_2D);

    //Right
    glNormal3f(1.f, 0.f, 0.f);
    glVertex3f(1.5f, -1.f, -1.5f);
    glVertex3f(1.5f, 1.f, -1.5f);
    glVertex3f(1.5f, 1.f, 1.5f);
    glVertex3f(1.5f, -1.f, 1.5f);

    //Back
    //...
    //...
    glEnd();
    
    glutSwapBuffers(); //Send the Scene to screen. :3
}

Danke schon mal!

MfG
Check

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

04.07.2012, 02:06

Sicher, dass dein LoadTexture() so stimmt? Laut Doku gibt sf::Image::GetPixelsPtr() einen Pointer auf RGBA8 Daten zurück, nicht RGB8...

Btw: Du kannst dein temporäres sf::Image gleich einfach auf dem Stack anlegen und dir das new/delete sparen ;)
Und exit() verwendet man in C++ nicht...

3

04.07.2012, 04:30

Whaa. xD
Ich dachte das ginge. Dann muss ich Wohl oder Übel doch libpng benutzen. :/

MfG
Check

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

04.07.2012, 06:19

Nein, musst Du nicht. Du nimmst einfach GL_RGBA und gut.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

5

04.07.2012, 12:46

Bevor ich das schrieb, war etwas müde und deswegen schreibfaul, hab ich das auch so versucht
Das Ergebnis ist leider trotzdem gleichbleibend mit dem vorherigem. =(
Und nein die Textur selbst hat keinen einzigen transparenten oder gleichfarbigen Inhalt.
Danke jedenfalls schon mal! :)

MfG
Check

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

6

04.07.2012, 12:51

Hast du ein funktionsfähigen Beispielcode?
@D13_Dreinig

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

04.07.2012, 13:08

Füll deine Textur eben mal mit einer konstanten Farbe oder so, um zu sehen, ob dort das Problem liegt...

8

04.07.2012, 13:24

David_pd: 6 verschiedene.
dot: Meine Textur ist komplett rot.
Der pseudo-Würfel ist dunkelbraun.

MfG
Check

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

9

04.07.2012, 13:25

Aber du liest sie immer noch aus einer Datei. Und die Frage ist eben gerade, ob nicht vielleicht dort das Problem liegt...

10

04.07.2012, 13:27

Bin eben mal mit'm Debugger drüber.
Das Teil ist schon mit gescheitem Inhalt gefüllt, wenn du das meinst.

MfG
Check

Werbeanzeige