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

Pages vues depuis 25/07/2007 : 25 253 017

  • Nb. de membres 187
  • Nb. d'articles 1 270
  • Nb. de forums 19
  • Nb. de sujets 20
  • Nb. de critiques 24

Top 10  Statistiques

Index du forum »»  Création-Développement »» AmiDARK Engine Rel0.8 Wip : FX2D part 1 : Fake Rasters

AmiDARK Engine Rel0.8 Wip : FX2D part 1 : Fake Rasters#1458

7Contributeur(s)
AmiDARKthellierartblinkElwoodzzd10hLio
3 Modérateur(s)
K-LElwoodcorto
AmiDARK AmiDARKicon_post
Bonsoir à tous.
Maintenant que le plugin est bien *commencé* je peux en parler.

Comme vous le savez, l'objectif de l'AmiDARK Engine, sera de fournir à peu de choses près, les mêmes commandes BASIC que DarkBASIC Professional ou DarkGDK, pour créer des jeux 2D et 3D sur Amiga New Generation.

L'AmiDARK Engine, au cours de son développement verra donc, tout comme DarkBASIC Professional et DarkGDK, des *plugins* additionnels se greffer au moteur de jeu pour ajouter au jeu de commandes originales, des jeux de commandes qui n'existent pas dans les versions initiales de DarkBASIC Professional & DarkGDK sur PC.

J'ai donc initié ce principe, pendant les finitions de cette version 0.8, en commençant le plugin nommé FX2D.
Ce plugin contiendra donc, plusieurs commandes qui permettront de faire des effets spéciaux en 2D.

Pour l'instant, ce plugin FX2D ne contient qu'un seul jeu de commande qui s'appelle "Fake Raster"... J'en vois déjà certains se lécher les babines en se disant ... Raster ... Copper ... Ce sont des effets de couleurs ? Et bien je répondrai un grand "OUI"... Cependant, les limitations ne sont pas les mêmes que sur nos anciens Amiga OS 1.x à 3.x sur ECS, AGA, etc.
Ce système de raster ne s'applique que sur la couleur de fond. On ne peux pas l'appliquer à des couleurs différentes mais seulement à la couleur de fond.
On peut créer jusqu'à 16 effets rasters dont l'affichage peut être contrôlé par un filtre qui permet différents types de superpositions des rasters.
Cependant, avec les couches ALPHA dans nos textures et images, on peut créer des intégrations bien plus souples et fluides que ce que l'on pouvait sur nos Amiga Classiques.

Voici donc, le jeu de fonctions actuels pour ces effets Raster :

FXCreateFakeRaster( RasterID, HeightInPixels )
FXCreateFakeRasterEx( RasterID, HeightInPixels, FilterMODE )
FXCreateFakeRasterExé( RasterID, HeightInPixels, FilterMODE, YPosition )
FXDeleteRaster( RasterID )

FXSetRasterLine( RasterID, YLine, RGBColor )
FXSetRasterGradient( RasterID, StartYLine, StartRGBColor, EndYLine, EndRGBColor )
FXSetRasterY( RasterID, YPosition )
FXUpdateRaster( RasterID )
FXSetRasterFilter( RasterID, FilterMODE )

FXSetRasterFromMemblock( MemblockID, RasterID )
FXMakeMemblockFromRaster( RasterID, MemblockID )

FXHideRaster( RasterID )
FXShowRaster(RasterID )
FXDisableRasters()
FXEnableRasters()

=FXRasterExist( RasterID )
=FXGetRasterLine( RasterID, YLine )
=FXGetRasterY( RasterID )
=FXGetRasterHeight( RasterID )
=FXIsRasterUpdated( RasterID )

Actuellement ce plugin contient 20 commandes liés aux "Fake Raster".
Cependant d'autres commandes sont prévues pour d'autres effets...

La seule question qui reste actuellement en suspens sera le status de ce plugin ... Sera t-il intégré par défaut dans le moteur de jeu en tant que Bonus ou ... Sera t-il fourni .. A part... Aucune décision n'est prise pour l'instant.

Voici un petit *shot* de la démonstration crée en l'honneur de ce nouveau plugin :


Et surtout, remarquez combien le code source pour réaliser cette démonstration (effet inclut) est court :


#!!!include!!!?"libamidark.h"
void?DarkLoop(?void?){
??//?On?définit?l'affichage.
??DESetDisplayMode(?640,?400,?32?);
??DESyncOn();
??DESyncRate(?60?);
??//?On?charge?l'image?à?afficher?au?1er?plan.
??DELoadImageEx(?"Medias/Environment.png",?1,?1?);
??//?On?crée?un?nouvel?effet?raster?et?on?défini?les?dégradés?de?couleur.
??FXCreateFakeRaster(?1,?256?);
??FXSetRasterGradient(?1,?0,?DERgb(?32,?32,?64?),?128,?DERgb(?128,?64,?128?)?);
??FXSetRasterGradient(?1,?128,?DERgb(?128,?64,?128?),?255,?DERgb(?255,?255,?255?)?);
??FXUpdateRaster(?1?);?//?On?finalize?le?raster?pour?qu'il?soit?visible.
??//?Boucle?principale?de?la?démonstration.
??while(?!DELoop()?){
????DECls();
????DEPasteImageEx(?1,?0,?0,?1?);
????DESync();?//?Les?effets?raster?sont?mis?à?jour?à?la?synchro?automatiquement.
???}
?}



Vous pouvez vous demander .... Mais où est l'effet en fait ?
Voici un *shot* qui vous montre la différence sans/avec :




EDIT du message original :
Voici aussi, la démonstration utilisant des Rasters incluts DEDANS des images. Donnant encore plus de relief et de contraste à une image :
Première image sans aucun effet raster, image originale seule :


Seconde image, effets rasters incluts :


voici le code source de cette démonstration technique :

int kMode = 1; // Default mode display Rasters.
int mKey = 0;

#!include! "libamidark.h"
void DarkLoop( void ){
// Setup the display output.
DESetDisplayMode( 640, 480, 32 );
DESyncOn();
DESyncRate( 60 );
DEInk( DERgb( 255, 255, 255 ), DERgb( 0, 0, 0 ) );

// 1stly we load the needed Image.
DELoadImageEx( "Medias/mRaster_Background.png", 1, 1 );
DELoadImageEx( "Medias/mRaster_Sun.png", 2, 1 );
DELoadImageEx( "Medias/mRaster_Bar.png", 3, 1 );
DELoadImageEx( "Medias/mRaster_AmiDARK_LightShaft.png", 4, 1 );
DELoadImageEx( "Medias/mRaster_AmiDARK.png", 5, 1 );
// The Bar Raster FX.
FXCreateFakeRaster( 1, 56 );
FXSetRasterGradient( 1, 0, DERgb( 0, 0, 0 ), 55, DERgb( 125, 177, 224 ) );
FXSetRasterY( 1, 212 );
FXUpdateRaster( 1 );
FXHideRaster( 1 );
// Main AmiDARK Engine - Multiple Raster - Raster Effect
FXCreateFakeRaster( 2, 107 );
FXSetRasterGradient( 2, 0, DERgb( 0, 0, 0 ), 53, DERgb( 96, 65, 31 ) );
FXSetRasterGradient( 2, 54, DERgb( 96, 65, 31 ), 106, DERgb( 0, 0, 0 ) );
FXSetRasterY( 2, 187 );
FXUpdateRaster( 2 );
FXHideRaster( 2 );
// Raster 3 - BackGround Space Light
FXCreateFakeRaster( 3, 480 );
FXSetRasterGradient( 3, 0, DERgb( 33, 47, 64 ), 64, DERgb( 0, 0, 0 ) );
FXSetRasterGradient( 3, 416, DERgb( 0, 0, 0 ), 479, DERgb( 33, 47, 64 ) );
FXSetRasterY( 2, 0 );
FXUpdateRaster( 3 );

while( !DELoop() ){
DECls();
mKey = DEScanCode();
if ( mKey == 2 ){ kMode = 0; }
if ( mKey == 3 ){ kMode = 1; }
if ( kMode == 1 ){
DEFXImageRasteredEx( 1, 0, 0, 3, 0 ); // Background Image - With raster #3, 480px
DEPasteImageEx( 2, 0, 0, 1 ); // Sun Image - No Transparency
DEFXImageRasteredEx( 3, 0, 212, 1, 1 ); // The Bar Image - With Raster #1, 56px
DEPasteImageEx( 4, 0, 164, 1 ); // Logo Light Shaft - Transparency Only
DEFXImageRasteredEx( 5, 0, 187, 2, 1 ); // AmiDARK Logo - With Raster #2, 106px
}else{
DEPasteImageEx( 1, 0, 0, 0 ); //
DEPasteImageEx( 2, 0, 0, 1 ); // No raster at all!
DEPasteImageEx( 3, 0, 212, 1 ); //
DEPasteImageEx( 4, 0, 163, 1 ); //
DEPasteImageEx( 5, 0, 187, 1 ); //
}
DESetCursor( 0, 0 );
DEPrint( "Press 0 to disable Rasters, 1 to enable raster." );
if ( kMode == 1 ){
DEPrint( "Currently : Rasters = On" );
}else{
DEPrint( "Currently : Rasters = Off" );
}
DESync();
}
}


@+.

Message édité par : AmiDARK / 28-01-2013 10:56
Message édité par : AmiDARK / 05-02-2013 23:57
AmiDARK AmiDARKicon_post
Sujet initial modifié, example ajouté avec code source & snapshots :)
thellier thelliericon_post
Hello

Je comprends pas y a que des StartYLine, EndYLine et pourtant ça "dégrade" (très joliment d'ailleurs..) en y et EN X ?
Comment ça marche donc ?
D'autre part cette syntaxe serait plus logique
Id=FXCreateFakeRaster(256);
FXSetRasterGradient(Id, 0, DERgb( 32, 32, 64 ), 128, DERgb( 128, 64, 128 ) );

et aussi
"avec les couches ALPHA" mais utilise RGBColor
==> vaudrait mieux alors avoir des RGBAColor, non ?

Bien amicalement
Alain

AmiDARK AmiDARKicon_post
Salut Thellier,

En fait, l'objectif était de recréer un effet similaire aux effets raster/copper de dégradés de couleur par lignes que l'on avait sur Amiga Classiques (68k avec ECS, OCS, AGA...)

Genre l'effet de fond bleu de Turrican 2


FXCreateFakeRaster( RasterID, HeuteurEnLignes ) :
Créer un effet Raster.
FXSetRasterGradient( RasterID, Début, 1ereCouleur, Fin, Dernièrecouleur ) :
Crée un dégradé de couleurs dans un Raster depuis la ligne Début jusqu'à la ligne Fin
FXUpdateRaster( RasterID ) :
Crée en fait la texture 1D qui sera utilisée pour l'effet Raster

Donc j'utilise MiniGL, une texture 1D appliquée à un cadre de la hauteur demandé dans FXCreateFakeRaster et de la largeur de l'écran visible.
Il y a donc, comme sur Amiga Classiques 1 couleur par ligne.
C'est l'alpha présent dans l'image originale (et pas quantifiable sur le snapshot) qui te donne l'illusion que l'effet se fusionne dans toute l'image dans les X & Y. Mais l'effet est simplement de haut en bas. Le reste, c'est l'Alpha présent dans l'image qui colle l'image en la fusionnant avec le raster :p

Le raster étant tracé avant la 2D (car tout est bufférisé (images, textes, rasters, dans l'ordre demandés) et tracé pendant le DESync() ), le raster apparait derrière les images et si, ton image utilise l'alpha, alors on pourra +/- voir l'effet raster dans les parties transparentes de ton image.
Lorsque je parle d'alpha, c'est simplement ce fait que j'expose.
Je pense peut-être ajouter 1 paramète d'alpha global pour chaque RasterID mais pas encore mis en place.
Par contre, j'ai déjà mis en place les filtres de rendu inter rasters pour que certains puissent se chevaucher en s'additionnant, se soustrayant, se masquant, etc... (avec les filtres genre GL_SUBTRACT, GL_ADD, GL_REPLACE, etc. )
Genre, pour pouvoir faire des démos de ce type :

Mais avec des raster lines qui se chevauchent en transparence entre elles, etc ...
Ce devrait être plus joli je pense... Je vais concocter une petite démo de ce type en "technical demonstration" pour montrer le potentiel de l'effet :p

Quand à la syntaxe, si j'utilise les index RasterID, c'est parce que l'AmiDARK Engine a pour vocation d'être compatible avec DarkGDK qui lui, est basé sur DarkBASIC Professional, un langage basic qui fonctionne donc par index (cf. par exemple : Load Object "Fichier.x", Index). Une fois l'AmiDARK Engine complet terminé, je travaillerai sur un IDE et une méthode pour créer un langage BASIC : 'l'AmiDARK Basic" qui sera beaucoup plus proche de DarkBASIC Professionel.

Voila :p
J'espère avoir éclairé ta lanterne ;)
(tu vois c'est de ce genre d'idées que je parlais lorsque je mentionnais, dans le sujet de crisot "Intelligence Créatrice" (bon c'est un peu arrogant mais j'aime ce terme très ésotérique :p)... Trouver une idée pour réaliser un effet particulier :p

Petit edit, Voici la nouvelle démonstration technique qui sera présente dans la version 0.8 de l'AmiDARK Engine et qui montre l'utilisation des Fake Raster :


@+

Message édité par : AmiDARK / 28-01-2013 19:49
artblink artblinkicon_post
Yeeesssss....

Dommage que sa reste inaccessible pour moi, quand t'es habitué au basic, t'es habitué au basic et c'est pas faute d'avoir essayé... Désolé, mais un truc genre holly ou Amos est plus simple pour moi .... snif :paf
Elwood Elwoodicon_post
@AmiDARK

J'aime bien quand tu utilises des mots que je comprends pas :-D

Bien joué en tout cas.
--
Philippe Ferrucci
Avec une Sam460 et AmigaOS 4.1, je suis eco-responsable. Cool !
AmiDARK AmiDARKicon_post
@ArtBlink :
L'étape suivant la finition de l'AmiDARK Engine te plaira : l'AmiDARK Basic

@Elwood :
lool

Pour patienter en attendant la version 0.8, voici la démo avec son executable pour que vous puissiez tous la testouiller chez vous :
http://files.amidark-engine.com/Rel0.8/RasterDemo.lha

Hav'fun

@+
AmiDARK
artblink artblinkicon_post
@Amidark: La seul chose que je te demande si c'est possible, c'est que l'on ne soit pas obligé de définir le type de variable ,genre binaire, 32 bits, alpha, constante, hexa, à virgule, char etc... sa, c'est franchement pénible et pour un programmeur en basic, il y a rien de plus casse pied ;-)

Pareil, un programmeur basic c'est :

A=1+2 et pas A:=1+2... nous c'est = et pas :=

Ou des trucs que j'ai vu dans certain language

Variable$=Sort{Table[0]+Table[1]}

(essayé de taper cette ligne... casse pied)

J'espère que l'Amidark Basic sera aussi simple que Amos (voir même plus ;-) )
AmiDARK AmiDARKicon_post
Artblink,

En Amos tu avais tout de meme les flottant en : monflottant# = 1.0
Non ?
Il faut au moins pouvoir différencier les 2 types de variables car les flottants sont plus longs à calculer.
zzd10h zzd10hicon_post
Je viens d'essayer ta nouvelle démo sur ma Radeon9250,
c'est très sympa, bravo :=!

Mais vu que c'était un poil lent, j'ai reéssayé tes démos de la version 0.7.
Et là, quand je relance la démo Boing Ball, horreur, j'ai ça

http://zzd10h.amiga-ng.org/Divers/AmiDark_Boing_KO.JPG

Par contre, j'en ai essayé 4-5 autres et elles, elles marchent très bien (à part le pb de lenteur du au debug)
Donc le pb semble être sur la Boing.
Cette Boing marchait très bien en décembre (si tu te souviens, je l'avais recompilé pour virer les debug, edit : d'ailleurs la version originale ne marche pas non plus)

Alors, est-ce les drivers Warp3D qui ont été màj debut janvier ?
Chez toi, ça marche toujours la Boing ?

Sinon, je répéte, ta nouvelle démo est bien mais un chouilla lente sur ma 9250 (super mal gérée sur X1000, je sais !)

Message édité par : zzd10h / 28-01-2013 22:56
Petites Annonces

0 annonce(s) publiée(s)

Consulter

AmigaOS 4.1

Laissez-vous tenter par
AmigaOS 4.1
AmiTheme

AmiTheme