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

Développement 2D, 3D et Jeux Discussion :

Création d'une interface graphique


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 40
    Points : 16
    Points
    16
    Par défaut Création d'une interface graphique
    Salut a tous.

    voila je voudrez crées de tout pièce un moteur 3D. Mathématiquement j'ai déjà trouver les fonction suivante.
    -La projection d'un point sur un plan en respectant la respective conique.
    -création d'une matrice a partir des points(création de la projection des faces sur le plan).
    -remplissage des fasses en respectant les UVs et les source de lumière.
    -détection collision entre un vecteur dans l'espace et une fasse(ensemble former par le plan former par deux vecteur).

    A partir de la je peux tirer pleins de chose sauf que pour la programation graphique il y a problème. A partir de la je me pose la question a quoi dont s'être embêté comme sa pour ne pas pouvoir afficher l'image calculer. il y a de quoi se fracasser le crane contre un mur.

    Voila mon objectif sur ce sujet est de ne pas toucher à de grosse librairie comme direct x ou autre. En autre je veux tous faire moi même, pour sa; j'ai utiliser deux méthode:
    sous DJGPP le mode VESA

    Ne vous étonnez pas si la présentation du code n'est pas top, il étais en conception lorsque je les abandonner. Le problème est le suivant; au dessus du mode 0x112 mon écran m'affiche : fréquence trop élever. Y as t'il un moyen de remédier a se problème. Du genre un système de corection de fréquence comme sous direct x( j'ai vu sa en trifouillent dans les configuration de ma carte)

    voici le code

    #include <conio.h>
    #include <string.h>
    #include <dpmi.h>
    #include <dos.h>




    char ecran_vir[5242880];



    void int_vesa()
    {
    __dpmi_regs registres;
    registres.x.ax = 0x4F02;
    registres.x.bx = 0x110;
    __dpmi_int(0x10, &registres);
    return;
    }




    int main()
    {

    int_vesa();
    ecran_vir[65536] = 100;
    dosmemput(ecran_vir + 65535,65535,0xA0000);
    getch();
    return 0;
    }

    Deuxième méthode:
    sous dev c++ avec SDL.h
    seulement la j'ai une fréquence d'image médiocre:

    640*480*32bit : 32img/s
    800*600*32bit : 16img/s
    1024*768*32bit : 8img/s

    Je me pose une question: ne serai se pas le fais que je dessine directement dans la mémoire de la carte graphique. Dans se cas y a t'il un moyen de faire un écran virtuelle.


    #include <sdl\sdl.h>
    #include <conio.h>

    SDL_Surface* ecran;

    void int_graphique(int RX ,int RY)
    {
    SDL_Init(SDL_INIT_VIDEO);
    atexit(SDL_Quit);
    ecran = SDL_SetVideoMode(RX, RY, 16, SDL_SWSURFACE | SDL_FULLSCREEN | SDL_DOUBLEBUF);
    SDL_ShowCursor(0);
    }




    void attendreTouche(void)
    {
    SDL_Event event;

    do
    SDL_WaitEvent(&event);
    while (event.type != SDL_QUIT && event.type != SDL_KEYDOWN);
    }





    void dot(int x, int y, char rouge, char gaune, char bleu)
    {
    *((Uint16*)(ecran->pixels) + x + y * ecran->w) = SDL_MapRGB(ecran->format, rouge, gaune, bleu);
    }




    void sync()
    {
    SDL_Flip(ecran);
    //SDL_UpdateRect(affichage, 0, 0, 0, 0);
    }




    int main(int argc, char** argv)
    {
    int i;
    int j;
    int k;
    int co1;
    int co2;
    int co3;
    int_graphique(1024,768);
    for (j = 0; j < 80; j++)
    {
    co1 = rand() % 255;
    co2 = rand() % 255;
    co3 = rand() % 255;
    for (i = 0; i < 1024; i++)
    {
    for (k = 0; k < 768; k++) dot(i, k, co1, co2 ,co3);
    }
    sync();
    }

    attendreTouche();
    return 0;
    }
    Voila je vous remerci d'avance pour tout vos reponce.
    A se propo je recherche des programmeurs (langage C et C++) pour développer le moteur 3D
    allez @+++

  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 : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Plutôt bizarre de vouloir éviter DirectX et OpenGL, et d'utiliser SDL qui lui-même les utilise.

    Quant à écrire directement en mémoire vidéo avec le mode VESA, VGA ou que sais-je, c'est à oublier tout de suite. Disons que c'était marrant à une certaine époque, mais là c'est plus vraiment d'actualité.

  3. #3
    Invité
    Invité(e)
    Par défaut
    écrire directement en mémoire vidéo avec le mode VESA, VGA
    Que de souvenirs d'un coup... Les interruptions videos en QBasic... Ah la la la...

  4. #4
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 40
    Points : 16
    Points
    16
    Par défaut
    pourten la fréquence d'image est mieux que avec sdl.h

  5. #5
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Citation Envoyé par sieuzac
    Deuxième méthode:
    sous dev c++ avec SDL.h
    seulement la j'ai une fréquence d'image médiocre:

    640*480*32bit : 32img/s
    800*600*32bit : 16img/s
    1024*768*32bit : 8img/s

    Je me pose une question: ne serai se pas le fais que je dessine directement dans la mémoire de la carte graphique. Dans se cas y a t'il un moyen de faire un écran virtuelle.
    1-une fréquence d'image élevé ne signifie pas pour autant jeu + rapide
    2-pour faire un écran virtuel il faut allouer un tampon mémoire supplémentaire.
    Avec un dos extender il n'ya pas de problèmes bien que les dos-extender limitent la mémoire
    3-je déconseille d'utiliser VESA c'est un peu dépassé comme le dit Laurent et pas du tout compatible sur toutes les machines sauf si tu conçois un système sans OS genre borne d'information ou embarqué..
    Avant je programmais avec Watcom + Dos4gw et mes propres routines VESA en assembleur ça ne tournait pas toujours bien..
    Si tu bidouilles avec la fréquence tu risques d'endommager le moniteur de l'utilisateur qui va exploiter ton programme.
    Le mieux est d'utiliser SDL

  6. #6
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 40
    Points : 16
    Points
    16
    Par défaut
    ok pour SDL.h dans se cas comment allouer de la mémoire et comment sont partitionner les fenêtre d'affichage ?

  7. #7
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Citation Envoyé par sieuzac
    ok pour SDL.h dans se cas comment allouer de la mémoire et comment sont partitionner les fenêtre d'affichage ?
    l'allocation mémoire est classique avec new ou malloc
    Pour dessiner les vecteurs arrêtes et sommets des objets 3d , il suffit d'appeler SDL_Surface::lock et unlock
    Ceci dit faire son propre moteur de tracé 3d tu n'est pas au bout de tes peines !
    Faut calculer les transformations 3d, plaquer les textures calculer l'éclairage..

  8. #8
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 40
    Points : 16
    Points
    16
    Par défaut
    Faut calculer les transformations 3d, plaquer les textures calculer l'éclairage..
    Sa c'est bon s'est fais en grosse partie. Maintenant il faux que je gère l'affichage. Pour sa je vais suivre vaut conseille et on verra bien.
    Merci a tous!

  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 : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Si c'est vraiment trop lent, tu peux aussi utiliser OpenGL et une texture dynamique. Tu auras plus de chances de pouvoir optimiser les transferts GPU avec OpenGL, qui donne accès à toutes les fonctions et optimisations de ton GPU, qu'avec SDL qui ne fait que des copies bêtes et méchantes de pixels.

  10. #10
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 40
    Points : 16
    Points
    16
    Par défaut
    Oué le truc s'est que a la base je voulez faire de la programmation hardware.
    Voila pourquoi je me suis penchée sur VESA. Mais sa bug beaucoup
    Un truc sur laquelle j'aimerais que l'on me réponde : pourquoi mon écran se mets en fréquence trop élever au dessus du mode 112h soit 640*480*16M

  11. #11
    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 : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Un truc sur laquelle j'aimerais que l'on me réponde : pourquoi mon écran se mets en fréquence trop élever au dessus du mode 112h soit 640*480*16M
    Je suis même pas sûr qu'on puisse encore accéder à ces modes avec les OS modernes... Je ne suis pas un pro de ces techniques "anciennes" mais ce n'est clairement pas une voie dans laquelle je m'engagerais.

  12. #12
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 40
    Points : 16
    Points
    16
    Par défaut
    Bon donc j'oublie sa. Mais s'est dingue que l'on ne peux plus toucher au matos comme sa. Maintenant éméton que j'alloue de la mémoire pour crées un écran virtuelle sous SDL.h comment se structure un pixel sur l'étendu de la mémoire comme sous vesa.

  13. #13
    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 : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Bon donc j'oublie sa. Mais s'est dingue que l'on ne peux plus toucher au matos comme sa.
    Entre l'OS, le driver, le GPU, ... il y a maintenant tellement de couches intérmédiaires, qu'il vaut mieux éviter de donner des accès aussi primitifs.

    Maintenant éméton que j'alloue de la mémoire pour crées un écran virtuelle sous SDL.h comment se structure un pixel sur l'étendu de la mémoire comme sous vesa.
    J'ai pas compris ta question. Un pixel avec SDL c'est 1, 2, 3 ou 4 composantes selon le format de pixel choisi. Ensuite l'écran ce n'est qu'une surface, un tableau linéaire de hauteur * largeur pixels. La clé pour ne pas perdre trop en performances, c'est de faire tous les traitement en mémoire vive, et de copier en un bloc la surface vers le GPU entre un lock et un unlock.

  14. #14
    Membre à l'essai
    Inscrit en
    Décembre 2005
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 40
    Points : 16
    Points
    16
    Par défaut
    Et comment sous vesa s'étais simple mais la sous quelle adresse 0xA0000 ou autre.
    J'ai fais des ésé mais sa plante méchant(écran noir)

  15. #15
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Citation Envoyé par sieuzac
    Et comment sous vesa s'étais simple mais la sous quelle adresse 0xA0000 ou autre.
    J'ai fais des ésé mais sa plante méchant(écran noir)
    Est-ce que tu peux faire des phrases en bon français correct et de préférences sans fautes je ne comprends vraiment rien à ce que tu écris...
    Avec un dos extender l'adresse de la mémoire vidéo ne sera pas 0xA0000 mais 0xA0000 0000 ( à vérifier ) puisque ce n'est plus segment:offset en mode "flat"
    Je doute que SDL gère la programmation Dos /VESA mais je vais vérifier

Discussions similaires

  1. Création d'une interface graphique
    Par apu04 dans le forum Bibliothèques
    Réponses: 8
    Dernier message: 25/05/2009, 10h19
  2. Création d'une interface graphique un peu poussée
    Par Ivenoproblemwiththat dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 04/01/2008, 16h00
  3. création d'une interface graphique
    Par dz_robotix dans le forum Linux
    Réponses: 1
    Dernier message: 18/04/2007, 11h52
  4. [Swing] Création d'une interface graphique SWING + MVC
    Par Sylmandel dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 21/04/2006, 09h03

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