DrawLine est une fonction lente, mais le pire c'est l'utilisation de float (et de fonctions les manipulant) : utilise une représentation des nombres avec virgule fixe, et précalcule tes sinus/cosinus. Pour le traçage de lignes, ExtGraph fournit une fonction très rapide, mais peut-être un peu grosse.

« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas
. »
Une petite optimisation :
/* ====================================================== */
/* = Function : Drawing Sphere = */
/* = Input : X,Y, ray, Phase & angleY, angleX = */
/* = Angles are used for projection formula = */
/* = Output : - = */
/* ====================================================== */
void DrawSphere(unsigned short x, unsigned short y, unsigned short r, float phase, float angleY, float angleX)
{
// real sphere coords
float xa = 0.0,
ya = 0.0,
za = 0.0;
// computation var.
float a = 0.0,
b = 0.0,
j = 0.0;
// counter for latitudes
short int latitude = 0,
longitude = 0,
delta = 0;
short int vertex = 180;
short tab[vertex][2];
//-----------------------------------------------------------
// computing sphericals points
for( a=-PI/2.0 ; a<=PI/2.0 ; a+=SPHERE_PRECISION,latitude++)
{
if(phase>PI)
{
b=phase-PI;
j=PI;
}
else
{
b=0.0;
j=phase;
}
// compute all the line
while(b<=j)
{
xa = (cos(a)*cos(b));
ya = (cos(a)*sin(b));
za = sin(a);
xa *= r;
ya *= r;
za *= r;
tab[longitude][0] = (unsigned short)Int_Float(xa*sin(angleX)+ya*-cos(angleX));
tab[longitude][1] = (unsigned short)Int_Float(za+ya*sin(angleY));
b+=SPHERE_PRECISION;
longitude++;
}
}
delta = (short)ceil((float)(longitude/latitude));
// drawing latitude lines with computed points
for(longitude=0,latitude=1;longitude<(vertex-delta);longitude++,latitude++)
{
if(latitude>=delta)
{
latitude=1;
longitude++;
}
DrawLine(tab[longitude][0]+x,tab[longitude][1]+y,tab[longitude+1][0]+x,tab[longitude+1][1]+y,A_NORMAL);
}
// drawing longitude lines with latitude's points computed before
for(longitude=0;longitude<(vertex-delta);longitude++)
DrawLine(tab[longitude][0]+x,tab[longitude][1]+y,tab[longitude+delta][0]+x,tab[longitude+delta][1]+y,A_NORMAL);
}
Astronome Amateur
Programmeur quand il fait pas bo !
> ExtGraph est sans doute tres bien, mais je ne crois pas approprie pour mon prog
FMI, pourquoi ? En tout cas, contrairement à presque toutes les autres librairies, ExtGraph n'a pas tout un stub d'init / deinit.
Jyaif Le 22/06/2005 à 22:49 Et ces fonction pour permettre de faire des trucs "tranquillement" ne sont pas faisables sans un "stub d'init/deinit" ?
Jyaif Le 23/06/2005 à 02:27 "C'est sûr, mais en conséquence elle n'a pas certains features intéressantes de ce libs."
> disons que quand tu veux gérer des plans avec ExtGraph, tu dois le programmer à la main, à moins d'utiliser un tilemap engine.
ExtGraph toute seule, évidemment, car elle n'intègre pas de routines de grayscale. Mais TIGCCLIB et Grib, avec lesquelles elle fonctionne parfaitement, le font !
> Un seul binaire sur la calc,
<troll>Compatibilité on-calc sux, et j'ai des arguments déjà exposés dans d'autres topics - même s'il faut reconnaître un défaut au niveau de la facilité de transfert d'une calculette à une autre, les 92+/V200 sont plus rares !</troll>
> un seul header sur PC,
Certes, mais celui d'ExtGraph (ainsi que la lib) n'est séparé en plusieurs morceaux que parce que pas tout le monde n'a besoin du tilemap engine et de la brute-force (preshifting), qui rendraient le header moitié plus gros et illisible que ce qu'il n'est déjà - ~100 KB !
> Pareil pour les fonctions de synchronisation, genlib propose des fonctions et variables très bien foutues pour faire ça tranquillement.
Idem que plus haut: Grib.
GenLib n'existe qu'en grayscale, alors que beaucoup de programmes utilisant ExtGraph sont en B/W.

Ben, déjà, ça commence par les programmes de TICT: depuis que je maintiens les programmes, j'ai mis ExtGraph dans plusieurs d'entre eux. Il me semble que Civ89, par exemple, utilise ExtGraph.
C'était pour faire remarquer qu'ExtGraph a aussi un mode B/W. "Beaucoup" ne veut en effet pas forcément dire la majorité. Les programmes les plus connus (Ice Hockey 68k et autres de Travis, etc.) sont en grayscale.
Sauf si ça a sauté dans la 1.x (ce dont je doute), Genlib fait effectivement aussi du noir et blanc...

Que cache le pays des Dieux ? -
Forum Ghibli -
Forum LittéraireLa fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.
Oui, mais elle n'est pas vraiment conçue pour. Très peu de fonctions permettent de travailler en BW (comparé à ExtGraph qui propose environ toutes ses fonctions en BW/nvg).

« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas
. »
Oui bien sûr, mais la fonctionnalité demeure.

Que cache le pays des Dieux ? -
Forum Ghibli -
Forum LittéraireLa fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.
Ben, il faut carrément chercher pour voir qu'elle permet en effet de faire du B/W (en fait, je n'avais pas trouvé). Les recherches "BW", "B/W" et "B&W" dans la doc ne retournent presque rien !
Même l'intro ne dit pas immédiatement qu'elle permet de faire du B/W, et encore, c'est assez indirect:
"GENLIB is an asm dynamic (kernel based) graph 4-gray tiles-oriented library for TI-92, TI-92+, Ti-89, V200 and Titanium compatible with C and ASM"
[...]
What are the main features of GENLIB?
[...]
Put fast sprites: more than 13000 sprites (16x16) / second! (B&W).
[...]
The Black&White standard graph functions work with GENLIB.
[...]
Je suppose que Monsieur Julien Sabatier dit en termes peu diplomatiques que je devrais lire la doc et me documenter avant de "critiquer" ?
Puisque sa contribution, que tu m'as décrite, est de son style habituel, il faudrait en effet au moins le kicker du topic...