mourdad
Messages postés8Date d'inscriptionlundi 17 mai 2010StatutMembreDernière intervention23 février 2012
-
21 juil. 2011 à 13:47
cptpingu
Messages postés3840Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention23 août 2024
-
21 juil. 2011 à 15:07
salut j'ai un code c++ et j'aimerias le transformer en xilinx
quelqu'un peut m'aider????????
je sais pas comment transformer le new :'(
voici le code
#include <math.h>
#define MX 160 // Millieu de l'abscisse
#define MY 100 // Millieu de l'ordonnee
#define DISTANCE 250 // Distances de l'obervateur
#define AMBIANT 20 // Lumiere ambiante
#define DIFFUSE 220 // Lumiere diffuse
#define MAX_POLY 150 // Nb max de polygones
#define MAX_SOMM 75 // Nb max de sommets
#define SIN(x) SinTable[x] // Macro SIN()
#define COS(x) CosTable[x] // Macro COS()
#define SWAP(a,b) {a ^= b; b ^=a; a ^= b;} // Macro SWAP()
// ------------------- STRUCTURES DE DONNEES --------------------------//
// type matrice reelle de 4x4
typedef float _mat4x4[4][4];
// Structure pour representer un point dans un espace 2D
typedef struct
{
int x,y;
unsigned char couleur;
}_2D;
// Structure pour representer un point dans un espace 3D
typedef struct
{
float x,y,z;
} _3D;
// Structure qui definie un sommet avec ses differentes coordonnees
typedef struct
{
_2D ecran; // coordonnees d'ecran
_3D local; // coordonnees locales
_3D monde; // coordonnees dans le monde
_3D normale; // normale au sommet
} _sommet;
// Structure pour representer une face d'un polygone
typedef struct
{
short a,b,c; // trois points d'un triangle
unsigned char col; // couleur de la face
float z; // profondeur z moyenne (pour tri)
_3D normale; // normale de la face
}_tri;
// Structure pour contenir un objet
typedef struct
{
int nbsommet, nbpolygone; // nombre de sommets et de polygones
_sommet sommet[MAX_SOMM]; // coordonnees des sommets
_tri poly[MAX_POLY]; // polygones (triangles)
}_objet;
typedef struct // Structure pour le remplissage de polygones
{
long gauche,droite;
long cmin, cmax;
}_TScan;
char *ecran = (char *) (0xA0000000L); // Memoire video
char *virtuel = new char[64000L]; // Ecran virtuel
float SinTable[360], CosTable[360]; // Table des sinus et cosinus
int ordre[MAX_POLY]; // Tableau pour trier les polys
TScan scanline[200]; // Largeur des lignes des polys
int miny,maxy; // hauteur min et max des polys
_mat4x4 matrice; // mat de transformation homogene
_mat4x4 mat1, mat2; // matrices temporaires
_3D lumiere = {0,0,1}; // vecteur de lumiere
_objet unObjet; // un objet 3D
/////////////////////////////////////////////////////////////////////////
// hline - Dessine une ligne horizontale //
/////////////////////////////////////////////////////////////////////////
void hlineG(int x1, int x2, int coul1, int coul2, int y)
{
long x;
float difx = x2-x1+1;
float nbcoul = coul2-coul1+1;
float couleur = coul1;
float pas = nbcoul/difx;
unsigned int offset = (y<<8)+(y<<6)+x1;
if(x2<x1)
{
SWAP(x1,x2);
SWAP(coul1,coul2);
}
for (x=x1;x<=x2;x++)
{
virtuel[offset++] = couleur;
couleur += pas;
}
}
/////////////////////////////////////////////////////////////////////////
// precalc - Calcule le tableau de sinus/cosinus //
/////////////////////////////////////////////////////////////////////////
void precalc()
{
int angle;
for(angle=0; angle<360; angle++)
{
SinTable[angle]=sin(angle*M_PI/180.0);
CosTable[angle]=cos(angle*M_PI/180.0);
}
}
/////////////////////////////////////////////////////////////////////////
// transformation - multiplication de chaque sommet par la matrice //
/////////////////////////////////////////////////////////////////////////
void transformation(_mat4x4 m)
{
_sommet *sommet;
int v;
/////////////////////////////////////////////////////////////////////////
// calcnormal - calcule les normales de face pour chaque polygones //
/////////////////////////////////////////////////////////////////////////
void calcnormal()
{
_3D v1,v2;
int face,sommet;
for( face=0; face unObjet.poly[ordre[position+1]].z)
{
tempval = ordre[position+1];
ordre[position+1] = ordre[position];
ordre[position] = tempval;
position = -1;
}
position++;
}
}
/////////////////////////////////////////////////////////////////////////
// dessine_objet - dessine les sommets de l'objet //
/////////////////////////////////////////////////////////////////////////
void dessine_objet()
{
int nb=0;
double angle;
float Znormale;
unsigned char col;
_2D poly2D[3];
// Boucle principale du rendeur
int face;
for( face=0; face\n");
//getch();
// asm {MOV AX,0x13; INT 0x10} // à modifier durant le traitement selon les ports de la carte
precalc(); // Calcul de la table de Sinus
normalise(&lumiere);// normalisation du vecteur de la lumière
// while(!kbhit()) // clic sur une touche pour sortir de la boucle
{
memset(virtuel,0,64000L); // memoire virtuelle pour afficher l'objet sur un écran noir (0)
cptpingu
Messages postés3840Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention23 août 2024126 21 juil. 2011 à 15:07
Bonjour.
1) Si tu remplaces le new et le delete par malloc et free, c'est une application C. Aucun intérêt d'avoir écrit ça en C++, si ce n'est pour ne pas profiter du langage. La personne qui a écrit ce programme l'a en tout cas écrit en C, même si elle a dû compilé en C++ derrière.
2) Qu'est-ce que Xilinx ? Pourquoi ne pas poster ta question sur un forum "Xilinx" ?
3) Merci de mettre ton code dans une balise de code.
4) Je rappelle que l'on aide à faire un travail, mais que l'on ne fait pas l'intégralité de celui-ci. Donc si tu veux de l'aide, commence par traduire toi même ce code en "Xilinx", puis poste ce que tu as commencé en indiquant les parties sur lesquelles tu n'es pas sur de la traduction.
________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfoliohttp://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question