Annonces Google
Serveur IRC
Serveur : irc.portlane.se
Canal : #AmigaNG
Activité du Site

Pages vues depuis 25/07/2007 : 24 889 301

  • Nb. de membres 186
  • Nb. d'articles 1 269
  • Nb. de forums 19
  • Nb. de sujets 20
  • Nb. de critiques 24

Top 10  Statistiques

Index du forum »»  Création-Développement »» Demande de bench #Zero

Demande de bench #Zero#2404

14Contributeur(s)
Crisothunoppczzd10hElwoodLioK-LthellierdavebracoMurakamicortosadiruxEggmanPetrolFernecho
3 Modérateur(s)
K-LElwoodcorto
Murakami Murakamiicon_post
43 fps sur Sam440.
Lisez aMiGa=PoWeR !
aMiGa=PoWeR Website
davebraco davebracoicon_post

Bon ben le X5000 se débrouille bien sur ce genre d'exercice ;-)
A1200PPC / Sam440ep / Sam460ex / X1000 / X5000
K-L K-Licon_post
Impressionnant ! 
--
AmigaONE X1000/1,8 Ghz (A-Eon), Radeon RX560, 2 Go de Ram et OS4.1 FE
Crisot Crisoticon_post
Ah cool! J'ai bricolé un petit truc qui a fait perdre beaucoup à UAE moyennant un gain théorique sur le vrai hardware. J'étais un peu déçu de voir que le X1000 n'en a pas profité, en revanche je ne m'attendais pas à ce que le X5000 gagne autant ! Cool!
--
AmigaOne X1000 - 2 Go DDR2 - Sapphire R9 280x Toxic - Crucial MX200 500 Go - Alim/Cooling BeQuiet
Crisot Crisoticon_post
Sinon, la One fonctionne, mais sans fog (brouillard distant). Le fog a été complètement explosé sur Warp3D, les fonctions de paramétrages ne répondent pas, certaines choses sont "hardcodées", et tout le monde s'en fout.

J'en avais parlé à Daytona à l'époque, il m'avait orienté sur quelques fonctions non documentées. Je vais faire un petit soft de test et le lancer sur Os4depot avec quelques trolls...
--
AmigaOne X1000 - 2 Go DDR2 - Sapphire R9 280x Toxic - Crucial MX200 500 Go - Alim/Cooling BeQuiet
davebraco davebracoicon_post
Haha! Tu produits du code aux phéromones pour trolls?!  
A1200PPC / Sam440ep / Sam460ex / X1000 / X5000
thellier thelliericon_post

Hello

J'ai jamais compris comment on paramétrait le fog dans Warp3D : si seulement c'était comme dans OpenGL...

Au final le fog est implémenté dans WaZp3D mais il marche certainement pas faute de comprendre comment WaRp3D l'utilise

Faire une fog pas "nice" est trivial : voici le code de Mesa

(Un fog "nice" s'arrête aussi au milieu des faces quand on arrive à sa fin mais je croie pas que Warp3D l'implémente non plus...)

Question: j'ai noté que le bump de Microbe3D marchait plus sur ma Sam460 sur un WaRp3D plus récent: connais tu quel modif de code il faut ?


/*
 * Compute the fogged color for an array of vertices.
 * Input:  n - number of vertices
 *         v - array of vertices
 *         color - the original vertex colors
 * Output:  color - the fogged colors
 */
void gl_fog_rgba_vertices( const GLcontext *ctx, ULONG n, float v[][4], UBYTE color[][4] )
{
float f,invf;
float rFog = ctx->Fog.Color[0] * 255.0F;
float gFog = ctx->Fog.Color[1] * 255.0F;
float bFog = ctx->Fog.Color[2] * 255.0F;
float end = ctx->Fog.End;
ULONG i;
float d; 
 
 switch (ctx->Fog.Mode) {
      case GL_LINEAR:
  d = 1.0F / (ctx->Fog.End - ctx->Fog.Start);
  for (i=0;i<n;i++) {
     float f = (end - ABSF(v[i][2])) * d;
     f = CLAMP( f, 0.0F, 1.0F );
  invf=(1.0F-f);
     color[i][0] = (UBYTE) (f * color[i][0] + invf * rFog);
     color[i][1] = (UBYTE) (f * color[i][1] + invf * gFog);
     color[i][2] = (UBYTE) (f * color[i][2] + invf * bFog);
  }
  break;
      case GL_EXP:
  d = -ctx->Fog.Density;
  for (i=0;i<n;i++) {
     float f = exp( d * ABSF(v[i][2]) );
     f = CLAMP( f, 0.0F, 1.0F );
  invf=(1.0F-f);
     color[i][0] = (UBYTE) (f * color[i][0] + invf * rFog);
     color[i][1] = (UBYTE) (f * color[i][1] + invf * gFog);
     color[i][2] = (UBYTE) (f * color[i][2] + invf * bFog);
  }
  break;
      case GL_EXP2:
  d = -(ctx->Fog.Density*ctx->Fog.Density);
  for (i=0;i<n;i++) {
     float z = ABSF(v[i][2]);
     float f = exp( d * z*z );
     f = CLAMP( f, 0.0F, 1.0F );
  invf=(1.0F-f);
     color[i][0] = (UBYTE) (f * color[i][0] + invf * rFog);
     color[i][1] = (UBYTE) (f * color[i][1] + invf * gFog);
     color[i][2] = (UBYTE) (f * color[i][2] + invf * bFog);
  }
  break;
      default:
  gl_problem(ctx, "Bad fog mode in gl_fog_rgba_vertices");
  return;
   }
}

Sam440 - Sam460 - X5000 - PowerBookG4 - WinUAE - MiniMig
Crisot Crisoticon_post
Vite fait avant le boulot:

Le FOG de Warp3D est très simple à comprendre: Il ne FONCTIONNE PAS.

W3D_SetFogParams (); <- Est SANS EFFET. Dayto m'a indiqué que ce n'était plus à utiliser, mais ce n'est pas stipulé dans l'autodoc.



Il m'a orienté vers une fonction avec des paramètres non documentés:

W3D_Fog fog;
fog.fog_start=0.35;
fog.fog_end=0.05;
fog.fog_color.r=0.0;
fog.fog_color.g=0.0;
fog.fog_color.b=1.0;
W3D_SetParameter(context,W3D_FOG_COLOR,&fog.fog_color);
W3D_SetParameter(context,W3D_WFOG_START,&fog.fog_start);
W3D_SetParameter(context,W3D_WFOG_END,&fog.fog_end);
W3D_SetParameter(context,W3D_ZFOG_START,&fog.fog_start);
W3D_SetParameter(context,W3D_ZFOG_END,&fog.fog_end);

Problèmes:
W3D_WFOG_START ou W3D_ZFOG_START sont sans effet, le fog start est toujours considéré à 1.0
W3D_WFOG_END ou W3D_ZFOG_END sont sans effet, le fog end est toujours considéré à 0.0



Autre chose:

W3D_SetState(WS->context, W3D_FOG_COORD, W3D_DISABLE); <- NE FONCTIONNE PAS, Warp3D est hardcodé pour considèrer TOUJOURS qu'il y a une coord fog sitot que W3D_FOGGING est W3D_ENABLE.

Ainsi donc en compiled vertex array il faut impérativement que W3D_VFORMAT_FOG apparaisse dans le vertex format. Sans compiled vertex array, il faut impérativement un W3D_FogCoordPointer(). On ne peut pas se contenter d'utiliser le Z en guise de fog.



Ma vieille démo de 2006 utilisait convenablement le fog. Elle se servait du Z (W3D_FOG_COORD, W3D_DISABLE) ce qui n'est plus possible, elle modifiait le FOG_START et le FOG_END, ce qui n'est plus possible non plus.



En résumé: Aujourd'hui, le FOG va de 0 à 1 et nécessite impérativement une coordonnée dédiée. On ne peut changer que la couleur. Rien d'autre.



En clair: C'est de la merde.
--
AmigaOne X1000 - 2 Go DDR2 - Sapphire R9 280x Toxic - Crucial MX200 500 Go - Alim/Cooling BeQuiet
thellier thelliericon_post

Mais on est d'accord sur ces deux points

1) le fog ne marche pas

2) Warp3D V5 (celui d'OS4) abandonne les fonctions de la V4 et même celle de la V5 du début : en gros les derniers Warp3D ont plus de compatibilité ascendante

C'est pour ça que je t'ai copié ce bout de code : c'est pour implémenter un fog dans ta démo en modifiant la couleur des vertex

Alain

Sam440 - Sam460 - X5000 - PowerBookG4 - WinUAE - MiniMig
Crisot Crisoticon_post
Partant du principe que t'as un fog de 0 à 1 dont tu peux modifier la couleur, tu peux effectivement faire ce que tu veux moyennant quelques maths.

Partant du principe que y'as pas une seule ligne de C dans mon moteur de rendu, j'ai un peu de boulot... :-)
--
AmigaOne X1000 - 2 Go DDR2 - Sapphire R9 280x Toxic - Crucial MX200 500 Go - Alim/Cooling BeQuiet
Petites Annonces

0 annonce(s) publiée(s)

Consulter

AmigaOS 4.1

Laissez-vous tenter par
AmigaOS 4.1
AmiTheme

AmiTheme