6
votes

Mappage de texture opengl - 2D

J'essaie de rendre une texture simple (64x64) à un quad 64x64. Le quad lui-même est rendu, mais pas la texture. (Ça ralentant un quad blanc blanc 64x64.)

J'utilise sol à charger L'image. p> xxx pré>

Ceci est mon code de rendu, je ne la mapperai peut-être pas correctement, afin que cela puisse être le problème aussi. P>

static GLuint Texture;

static void LoadTextures()
{
    Texture = LoadPNG("filename");
}

static void glRenderTest()
{   
    glRectF rect = {20, 20, 64, 64};
    glDrawTexturedQuad(rect, Texture);
}


15 commentaires

hm .. Je l'ai vérifié avec le tutoriel Selon NEHE ( NEHE .GameDev.net / Données / Leçons / Leçons.asp? Leçon = 06 ) Mais sur les appels OpenGL, je n'ai pu trouver rien de maladroit. Êtes-vous sûr que la fonction de chargement d'image fonctionne correctement?


Pour vérifier pour Constantinius, la génération automatique d'un damier a tendance à être la chose la plus facile. Par exemple. Pour (chaque x) {pour (chaque y) {couleur = ((x ^ y) & 8)? noir blanc; }}


Eh bien, ma manutention d'erreur a l'air correcte et cela ne rendrait pas un damier non plus, mais je peux simplement l'avoir fait de mal aussi, je l'ai essentiellement collé pour l'avoir fait rapidement. // CSC.VILLANOVA.EDU/~MDAMIAN/GRAPHICS/ Notes / Gltextures / ...


Mon quad peut-il être en arrière, je piratage d'un match, donc je ne sais pas quel type de système mondial qu'il utilise, à l'aide du quad plus?


Si vous dites, que vous pouvez voir votre quad, mais seulement sans la texture, cela ne changerait rien, je suppose. BTW Ce que vous voulez dire, c'est l'abattage de la face arrière, que vous pouvez éteindre, en tapant gldisable (gl_cull_face); .


Je vais essayer ce commandement gldisable et ce que je voulais dire, est-il possible que le quad ralentissait avec le dos, me faisant face à moi et que la texture est du côté que je ne peux pas voir et que je ne peux pas voir. Je suis assez certain que c'est possible. (EDIT: GLDISABLE N'a changé rien.)


Je viens d'essayer une image PNG différente, cela ne fonctionnerait pas non plus, je pourrais essayer des drapeaux de texture différents, etc. Ainsi, à moins que ce ne soit un drapeau ou rendu faux comme je l'ai suggéré dans mon dernier post, je suis exclu.


Le quad est-il juste noir? Cela signifierait que vous avez l'éclairage et ne définissez pas les conditions d'éclairage correctes. Ensuite, vous obtenez une couleur noire multipliée par la couleur de la texture, qui est juste Balck. Essayez gldisable (gl_lighting); ou utilisez GLTEXENVI (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); prendre la couleur de la texture (ce qui est probablement ce que vous voulez).


Non, il est rendu blanc, la texture n'était qu'une image souriante que j'ai trouvée sur Google, je faisais essentiellement tester mon code de rendu. L'objectif réel est de créer de nouveaux éléments d'interface graphique. (Quel type de valeur GL donne aux textures, j'ai vérifié la valeur de celle que je passe et que c'était 0, utilise-t-il des identités comme ça? Ou est-ce un signe que cela va mal?)


0 est définitivement faux, c'est un identifiant réservé, ce qui signifie une texture invalide. Je pense donc qu'il y a quelque chose qui ne va pas avec les glgentextures (bien que je ne sache pas quoi).


Je pense que nous sommes sur quelque chose, j'ai changé le code pour utiliser la texture de GLUINT [1], et maintenant, il stocke une valeur de 1, mais, au moment où il atteint mon code de rendu quad, c'est 0 encore, donc je suis jolie Près de la fabrication de cela, je pense, il suffit de faire passer cette valeur correctement.


Mais la façon dont vous utilisez la texture dans votre code, la texture de GLUINT était correcte.


Hmm, eh bien, j'allais par le lien vers le tutoriel de Nehe posté plus tôt. ? Je l'ai retourné et vérifié mes valeurs, il est 1 après le code de chargement de l'image, il est 1 après que je l'enregistre à mon Var Static, mais 0 après le passant à mon code quad. ???


Le comportement décrit ci-dessus utilise le même code dans mon poste d'origine. Je vérifiais la valeur dans mon code quad, c'est là que j'avais vu que j'ai rapporté initialement. (BTW, j'ai essayé de forcer un 1 dans l'appel GLBindTexture juste avant de rendre, mais cela n'a pas fonctionné.) - Je viens de vérifier les dimensions de l'image, et elles sont correctes après la charge, elle doit donc être chargée.


Je pirate un jeu et ajoute de nouvelles fonctionnalités, le jeu lui-même pourrait-il lui-même jeter la texture de OpenGL? J'essaierai d'ajouter mon code à une touche appuyez sur la touche, et de voir si cela fonctionne après que le jeu soit complètement initialisé, etc. | Modifier: Le jeu vissait mon identifiant, mais le chargement avec une touche ne fonctionne toujours pas, cependant, je reçois un identifiant de 28 à travers le conseil d'administration, donc je suis plus proche. :)


4 Réponses :


0
votes

Je ne vois pas votre réglage d'une fonction de texture. Essayez d'ajouter ceci après GLBindTexture dans la fonction de dessin de géométrie: xxx

Essayez la fonction de texture différente pour répondre à votre besoin: GL_Decal, GL_BLEND, GL_MODULE, etc.


1 commentaires

Eh bien, cela a probablement contribué, mais ce n'était pas la question. J'ai essayé divers drapeaux, tous ont donné le même résultat, un quad blanc vide.



1
votes

sont tous dans le même fichier?

static GLuint Texture;

static void LoadTextures()
{
    Texture = LoadPNG("filename");
}

static void glRenderTest()
{   
    glRectF rect = {20, 20, 64, 64};
    glDrawTexturedQuad(rect, Texture);
}


1 commentaires

Ouais, tout est dans le même fichier et le numéro est correct sur toutes les fonctions maintenant. Cela était dû au moteur de jeu que je piste de vider les textures lors du démarrage (pour une raison quelconque). (J'utilise maintenant une touche de frappe pour déclencher mon code une fois le jeu entièrement chargé.)



1
votes

Essayez d'utiliser gdebugger gdebugger . Cela vous permettra de voir toutes les textures chargées dans OpenGL et fournit également d'autres outils de débogage.


0 commentaires

7
votes

Avez-vous essayé d'appeler xxx

avant xxx


2 commentaires

J'ai eu cette question et vous m'avez aidé à résoudre le remerciement. J'appelais BindTexture près de Glbegin (), je devais déplacer les appels GltextParameterf () après Glbindtexture. Machines d'état :).


+1 Je suivais un didacticiel et je n'avais pas mentionné l'appel à glenable (GL_Texture_2D); . Grâce à votre réponse, mon problème est résolu.