Recent Posts

Pages: 1 2 [3] 4 5 ... 10
21
Merci Patrice, oups!!! M. Terrier,

Je ne m'attendais pas à autant, je vous en remercie...

Je crois aussi que je devrais me remettre à C/C++. Bonne résolution pour la nouvelle année...

J'ai vue que vous aviez plusieurs Tutos sur le sujet... Je vais m'y remettre...

En attendant, merci encore et je vous souhaite de joyeux temps de réjouissance pour la période de Noël...

 
22
Monsieur DRABS

Les versions express de WinDev ne sont pas adaptées, on ne peut pratiquement rien faire avec.
En outre WinDev ne permet pas de créer du code compilé natif (uniquement du p-code).
Seules les DLLs du framework WinDEV sont écrites en C/C++, mais la taille du fremework est monstrueux et ne cesse de croitre de version en version.
J'ai créé de très belles applications avec WinDev il y a 15 à 20 ans, mais elles étaient toutes interfacées avec du code bas niveau pour contourner la lenteur du p-code.

Pour un programmeur expérimenté WinDev est pratique, surtout pour créer des maquettes, mais des que les choses sérieuses commencent alors c'est une autre histoire. Pour moi, rien ne remplace la connaissance de la programmation bas niveau de type SDK, mais c'est une expertise qui se perd...

23
Monsieur Lauzon.

Merci pour les pdf. Mais j'ai décidé de laisser tomber WinDev jutement à cause du manque de compatibilité d'une version à l'autre.
Je vous conseille de basculer en C/C++ si vous voulez écrire un jeu et faire du temps réel.
Le projet CUBE traduit en C/C++ se trouve ici
https://www.developpez.net/forums/d2168345/c-cpp/c/contribuez/the-cube-champ-cube-windev-opengl-demo/

Note: Le projet ne gère qu'un seul véritbale cube, les autres sont des clones virtuels.

Voici un exemple rapide montrant le principe de ce que vous voulez faire directement en code OpenGL C/C++

Code: [Select]
#include <GL/glut.h>
#include <stdlib.h>
#include <time.h>

// Identifiants de texture
GLuint textureIDs[6];

// Positions des dés
GLfloat dicePositions[5][3] = {
    {-2.0f, 0.0f, 0.0f},
    {-1.0f, 0.0f, 0.0f},
    {0.0f, 0.0f, 0.0f},
    {1.0f, 0.0f, 0.0f},
    {2.0f, 0.0f, 0.0f}
};

// Fonction pour charger les textures
void loadTextures() {
    // Chargez vos textures ici
    // Pour simplifier, nous utilisons des données fictives
    glGenTextures(6, textureIDs);
    for (int i = 0; i < 6; i++) {
        glBindTexture(GL_TEXTURE_2D, textureIDs[i]);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
        // Remplacez par le chargement réel de la texture
        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 256, 256, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);
    }
}

// Fonction pour dessiner un dé
void drawDie() {
    static GLfloat vertices[][3] = {
        {-0.5, -0.5, -0.5}, {0.5, -0.5, -0.5}, {0.5, 0.5, -0.5}, {-0.5, 0.5, -0.5},
        {-0.5, -0.5, 0.5},  {0.5, -0.5, 0.5},  {0.5, 0.5, 0.5},  {-0.5, 0.5, 0.5}
    };
    static GLint faces[][4] = {
        {0, 1, 2, 3}, {3, 2, 6, 7}, {7, 6, 5, 4}, {4, 5, 1, 0}, {5, 6, 2, 1}, {7, 4, 0, 3}
    };
    for (int i = 0; i < 6; i++) {
        glBindTexture(GL_TEXTURE_2D, textureIDs[i]);
        glBegin(GL_QUADS);
        for (int j = 0; j < 4; j++) {
            glTexCoord2f(j == 0 || j == 3 ? 0.0f : 1.0f, j == 0 || j == 1 ? 0.0f : 1.0f);
            glVertex3fv(vertices[faces[i][j]]);
        }
        glEnd();
    }
}

// Callback d'affichage
void display() {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
    glTranslatef(0.0f, 0.0f, -5.0f);

    for (int i = 0; i < 5; i++) {
        glPushMatrix();
        glTranslatef(dicePositions[i][0], dicePositions[i][1], dicePositions[i][2]);
        drawDie();
        glPopMatrix();
    }

    glutSwapBuffers();
}

// Callback clavier
void keyboard(unsigned char key, int x, int y) {
    if (key == ' ') {
        // Lancer les dés
        srand(time(NULL));
        for (int i = 0; i < 6; i++) {
            glBindTexture(GL_TEXTURE_2D, textureIDs[i]);
            // Remplacez par le chargement réel de la texture
            // Ici, nous utilisons simplement une couleur aléatoire comme donnée fictive
            GLubyte textureData[256 * 256 * 3];
            for (int j = 0; j < 256 * 256 * 3; j++) {
                textureData[j] = rand() % 256;
            }
            glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 256, 256, 0, GL_RGB, GL_UNSIGNED_BYTE, textureData);
        }
        glutPostRedisplay();
    }
}

// Initialiser OpenGL
void init() {
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_TEXTURE_2D);
    loadTextures();
}

// Fonction principale
int main(int argc, char** argv) {
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
    glutInitWindowSize(800, 600);
    glutCreateWindow("Lancer de dés");

    init();

    glutDisplayFunc(display);
    glutKeyboardFunc(keyboard);

    glutMainLoop();
    return 0;
}

Explication
Chargement des textures : La fonction loadTextures génère six identifiants de texture et lie des textures fictives. Remplacez le chargement des textures fictives par le chargement réel des données d'image (par exemple, en utilisant les fonctions de GDImage pour créer une texture).

Dessin d'un dé : La fonction drawDie dessine un dé en utilisant les six textures.

Rendu de la scène : La fonction display efface l'écran, configure la vue et dessine les cinq dés.

Lancer les dés : La fonction keyboard gère la pression de la barre d'espace pour simuler le lancer des dés en attribuant des textures aléatoires aux faces.

Initialisation et boucle principale : La fonction main initialise GLUT, configure les callbacks d'affichage et de clavier, et démarre la boucle principale.

Cet exemple utilise GLUT pour simplifier. Dans une application réelle, vous remplaceriez le chargement des textures fictives par des données d'image réelles et amélioreriez la logique de lancer des dés pour un comportement plus réaliste.
24
Je ne possède pas WD26 (j'ai uniquement WD17).
Sans voir le code que vous avez modifié, il est très difficile de vous répondre.

Concernant les sprites, vous devez les créer une fois pour toute (dans votre cas 5 sprites, toujours les mêmes).

Je ne pense pas que la version de Windev soit un enjeu...

Je crois bien créer les sprites mais je peux ou ne sais pas comment les afficher...

De Plus, lorsque je quitte je n'élimine pas les instances de la mémoire. Ce qui crée une surcharge de la mémoire et une erreur fatale après quelques répétition du cycle de lancer des dés.

J'inclus trois procédures :
   1- L'initialisation de la fenêtre et la destruction des instances: Win_GDImage.pdf
   2- Le lancer des dés avec la création des sprites: LancerLesDés.pdf
   3- La fonction de la création des dés: GDImageCreateSprite.pdf

Merci à l'avance
25
Bonsoir Patrice,

Je viens de découvrir hier qu'il y a moyen d'enregistrer la version "28-express" de WinDev gratuitement (comme privé). C'est limité à 32 bits, mais avec l'expérience que tu as avec WinDev, je pense que cela vaut la peine de regarder ce qui a changé.

Je voudrais te parler sérieusement d'un projet que j'envisage, mais pas ici. Je t'enverrai un mail privé ou un message privé.

À bientôt,
26
Je ne possède pas WD26 (j'ai uniquement WD17).
Sans voir le code que vous avez modifié, il est très difficile de vous répondre.

Concernant les sprites, vous devez les créer une fois pour toute (dans votre cas 5 sprites, toujours les mêmes).
27
Questions & Comments about GDImage / GDImage 64 bit sur une plateforme windev 26
« Last post by Michel Lauzon on December 16, 2024, 10:28:42 pm »
J'ai récupéré la DLL de GDImage et j'ai modifié l'exemple "The Cube" de Patrice Terrier... Pour la faire rouler sur une plateforme Windev 26 de PCSoft sur Windows 10...

Le but est de renforcer mon jeux de dés (Dix Milles) avec du graphisme qu'offre GDImage. Je dois donc faire rouler 5 dés sur un aire de jeu...

Partant de la routine THE CUBE, je réussis à faire le lancer de un dé... Dans mes procédures je réussis à lancer les 5 dés et recouvrir la face terminal pour pouvoir continuer le jeux mais toujours un seul dé roule sur la surface de jeu.

Ainsi je peux relancer les dés mais après un certain nombre de lancer, erreur fatal met un terme à l'application. Je n'arrive pas à ouvrir le DUMP de la mémoire pour voir ce qu'il se passe mais je me doute qu'il y a une surcharge de la mémoire n'étant pas capable de bien éliminer toutes les instances des SPRITES créer...

Je me heurte à ceci car je n'ai pas les connaissance pour bien manipuler les librairies de graphismes !!! J'aimerais bien trouver des documents pouvant me guider dans cette nouvelle aventure???

Essentiellement, de la routine originale j'ai modifié les procédures:
 1- La fin de l'initialisation de WIN_GDImage
 2- GDIamgeCreateSprite()
 3- RenderAnimation()
 En plus de rajouter l'interface des variables (GP) pour un tableau de 5 unités

J'imagine que ma requête est assez importante mais quelques piste de solutions et de bonnes documentations m'aiderait beaucoup...

Merci à l'avance

Michel Lauzon

28
The 3D Model Collection / Pagani Utopia
« Last post by Patrice Terrier on November 25, 2024, 05:44:31 pm »
Pagani Utopia

More than 400 hours work to create this beauty...



















If you download this model, please consider making a small donation to help me keep this forum alive, thank you!


29
Get ObjReader & Documentation / Full version 3.03
« Last post by Patrice Terrier on November 25, 2024, 10:25:19 am »
Full version 3.03

The new compressed .7z archive is attached to the first post of this thread.

When saving a screen shot, the explorer dialog box was never closing after the image was saved.
This bug mainly occured with Windows 11, it has been fixed.

30
Tips & Tricks / Re: SDK Window including openGl
« Last post by Frank Brübach on November 14, 2024, 11:32:51 am »
Bonjour et merci beaucoup zu pour cette example .. thanks , Frank
Pages: 1 2 [3] 4 5 ... 10