11
Questions & Comments about GDImage / Re: GDImage 64 bit sur une plateforme windev 26
« Last post by Patrice Terrier on December 21, 2024, 03:39:10 pm »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++
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.
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.