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, ®istres);
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.
Voila je vous remerci d'avance pour tout vos reponce.#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;
}
A se propo je recherche des programmeurs (langage C et C++) pour développer le moteur 3D
allez @+++
Partager