IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

DirectX Discussion :

Mip Mapping


Sujet :

DirectX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 26
    Par défaut Mip Mapping
    j'ai activé le mip mapping pour les textures en les créant via cette méthode dans InitDeviceObjects:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HRESULT hr = D3DXCreateTextureFromFileInMemoryEx( pd3dDevice, srcdata, texture->size, D3DX_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, D3DUSAGE_DYNAMIC, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, 0, NULL, NULL, &texture->dxdata );
    srcdata étant les données de la texture qui sont en mémoire au format bmp ou dds

    et ensuite juste avant de dessiner les triangles, dans Render() je fais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		pd3dDevice->SetTexture ( 0, textures[textureindex].dxdata ) ;
    //		pd3dDevice->SetSamplerState(0, D3DSAMP_MIPFILTER, D3DTEXF_POINT);
    les textures changent bien de taille en fonction de si je suis près ou loin, mais le problème c'est que elles changent trop vite de taille
    je fais meme pas un pas en arrière et les textures deviennent déjà toutes petites =(

    qu'est ce que j'ai fais de mal ? =(

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Normalement t'es pas sensé voir le changement de niveau de mip, mets comme filtre D3DTEXF_LINEAR et ce sera ok je pense.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 26
    Par défaut
    non en linear cela fait pareil
    ce n'est pas que je vois le niveau en fait c'est vraiment que ce niveau change trop vite
    c'est à dire qu'à quelques pas à peine les textures deviennent une couleur uniforme
    ca fait des effets spéciaux marrant mais ce n'est pas le but =)
    il faut que je me colle aux murs pour voir leur texture normalement

  4. #4
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Par défaut
    [j'y connait rien en directX mais j'essaye quand même]
    est ce que tu lui a specifier suffisament de niveau de mipmap ?
    si tu n'a que 2 niveau de mipmap ca peut etre normal...
    [/j'y connait rien en directX mais j'essaye quand même]
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  5. #5
    Membre Expert

    Profil pro
    Programmeur
    Inscrit en
    Août 2002
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : Août 2002
    Messages : 1 091
    Par défaut
    screen ?

    Mon site web | Mon blog | Mes photos | Groupe USA
    > BONJOUR, JE SUIS NOUVEAU SUR CE FORUM
    > presse la touche caps lock, stp
    > OH.. MERCI C EST BEAUCOUP PLUS FACILE COMME CA

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 26
    Par défaut
    bon voilà en image ce que ca me fait :

    très près :


    un peu plus loin :


    loin :


    très loin :

  7. #7
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Hmm tes niveaux de mipmap ont pas l'air en grande forme là, normalement ça devrait pas faire si crade. Si tu les sauvegarde dans un fichier bitmap par exemple pour les visualiser (avec Texture->GetSurfaceLevel puis D3DXSaveSurfaceToFile), est-ce qu'ils sont bons ?

    Est-ce que tu laisses Dx les générer ou bien ils sont déjà présents dans le fichier dds d'origine ?

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 26
    Par défaut
    ben visiblement il n'y a qu'1 level de mipmap dans les DDS d'origine, et de plus les differents niveaux n'utilisent pas que des textures au format DDS mais aussi au format BMP

    pour creer les textures j'utilise la function que j'ai mis plus haut :
    "D3DXCreateTextureFromFileInMemoryEx" et en nombre de levels mipmap j'ai laissé D3DX_DEFAULT

    j'y connais pas grand chose j'ai mis comme dans les exemples donc j'ai cru comprendre qu'en laissant DEFAULT c'est directx qui se chargerait de tout mais en fait je sais pas trop =(

    j'ai fais ce que tu as dit, j'ai mis 5 à la place de default et j'ai sauvegardé les 5 levels de chaque texture avec les fonctions que tu m'as dis
    et bizarrement une fois sauvegardés, les textures 512x512 deviennent des textures au 1er level, 8x512, le 2eme level 8x256 etc....
    bizarre bizarre qu'est ce que j'ai fais comme betise lol

    voilà le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    	for ( int i=0; i<5; i++ )
    	{
    		IDirect3DSurface9* texturelevel;
     
    		texture->dxdata->GetSurfaceLevel( i, &texturelevel );
     
    		CString nomfile;
    		nomfile.Format( "%s%d.bmp", texture->name, i );
     
    		D3DXSaveSurfaceToFile( nomfile, D3DXIFF_BMP, texturelevel, NULL, NULL );
     
    	}

    par contre si j'utilise "D3DXCreateTextureFromFileInMemory" à la place, là tout marche bien sauf que j'ai encore des problèmes de lointain genre les lignes d'une texture sur les bords dont certaines parties disparaissent comme sur cette photo :



    dans ce cas là est-ce que le mip mapping fonctionne ???

  9. #9
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Ah oui tiens, bizarre les dimensions de tes mipmaps . Je sais pas trop d'où ça peut venir. Au pire, essaie de faire un code complet minimal qui reproduit le problème. C'est un peu fastidieux parfois, mais ça permet dans 90% des cas de trouver l'erreur.
    Si la version "non-ex" de D3DXCreateTextureFromFileInMemory fonctionne, ça te donne un bon point de départ : réécris ton appel à D3DXCreateTextureFromFileInMemoryEx avec les paramètres qui seraient pris avec D3DXCreateTextureFromFileInMemory (ils sont indiqués dans la doc du SDK), et remplace les un à un par les tiens, et hop tu choppes le vilain canard.

    Pour ton problème de bordure c'est surement une histoire de filtrage, bidouille de ce coté là.

  10. #10
    Membre Expert

    Profil pro
    Programmeur
    Inscrit en
    Août 2002
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : Août 2002
    Messages : 1 091
    Par défaut
    Citation Envoyé par ptidrone
    dans ce cas là est-ce que le mip mapping fonctionne ???
    les radeon ont des problemes avec les lignes d'un pixel dans les textures.
    (meme avec anisotropie ou mipmapping trilinéaire)

    Dans ce cas là tu en demandes peut-etre un peu trop à la carte.

    La solution c'est de demander à tes artistes de créer leur textures pour que de telles problèmes n'arrivent pas.

    Mon site web | Mon blog | Mes photos | Groupe USA
    > BONJOUR, JE SUIS NOUVEAU SUR CE FORUM
    > presse la touche caps lock, stp
    > OH.. MERCI C EST BEAUCOUP PLUS FACILE COMME CA

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 26
    Par défaut
    le problème c'est que je fais un logiciel pour visualiser les "maps" d'un jeu qui s'appelle everquest
    et dans ce jeu quand j'y joue ca ne me fait pas de lignes pointillées comme ca

Discussions similaires

  1. mip mapping textures et progressive mesh
    Par korsakoff69 dans le forum DirectX
    Réponses: 3
    Dernier message: 30/04/2010, 20h40
  2. [EJB2.1 Entity] [BES] Mapping automatique et clés étrangères
    Par Bobby McGee dans le forum Java EE
    Réponses: 3
    Dernier message: 15/10/2003, 10h33
  3. Réponses: 2
    Dernier message: 11/07/2003, 18h24
  4. Problème avec memory mapping
    Par gemai dans le forum C
    Réponses: 13
    Dernier message: 04/07/2003, 09h50
  5. Editeur de MAP en delphi pour jeux directX
    Par PetitScorpion dans le forum DirectX
    Réponses: 5
    Dernier message: 09/07/2002, 18h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo