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

Pages vues depuis 25/07/2007 : 25 371 480

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

Top 10  Statistiques

Index du forum »»  Création-Développement »» Microbe3D nouvelle version dispo

Microbe3D nouvelle version dispo#2005

3Contributeur(s)
thelliersinisrusCrisot
3 Modérateur(s)
K-LElwoodcorto
thellier thelliericon_post

>Si c'est pas trop de taff tu pourrais me faire tout les exemples en arexx?
Euh , non .
J'ai déjà trop souffert avec arexx ces derniers temps ... arexx me sort par les yeux ...
En plus je vois pas l'intérêt de tout convertir il vaut mieux piocher les effets dans le source de demo-view


Voici ce que font les demos
demo-simpler: charge/tourne un logo = prog simple
demo-window: idem mais dans une partie d'une fenetre perso
demo-clock: charge des objets, crée des instances hierarchiques, les anime selon l'heure courante
demo-harm: charge des objets, crée des instances hierarchiques comme un bras, l'anime avec la souris et touche i
demo-map: charge des objets,crée une map, la remplit de tiles comme un damier
demo-map-heli: idem ajoute un objet helicoptere au dessus et l'anime avec la souris
demo-boing: crée à la main un objet avec microbe3D (un boing) le tourne, affiche un background
demo-bones: crée à la main des bones sur un objet crée des instances hierarchiques comme un serpent, l'anime avec la souris et touche i
demo-fonts: à partir d'un seul objet et 4 textures crée plein d'objets (un objet par lettre), les mets dans une map selon un texte, anime
demo-view: charge/edite/modifie/sauve des objets 3D et motion-capture


demo-arexx1: idem demo-simpler
demo-arexx2: charge un objet ours, en crée 2 instances, les anime avec 2 motion-captures
demo-arexx2: charge un objet bimbo, en crée 1 instance, la positionne et change 2 lights,l'anime avec une motion capture
demo-arexx4: idem demo-map


data/-Add-AmigaLogo.rexx idem que demo-simpler mais comme plugin executable depuis demo-view


>vivement un support de la 3d pour pouvoir en profiter vraiment

Il te faudrait une carte 3D déjà supportée pour ta becane


Alain



 

sinisrus sinisrusicon_post
j'ai une radeon4650 je croise les doigts pour que la prochaine version de warp3d la supporte

Bon je vais voir si j'arrive à convertir moi même tes sources en arexx mais c'est pas gagné je capte rien en C :-/


--
Coin coin... amitheme.amiga-ng.org
Sam460 1,15Ghz - OS4.1FE - Radeon Saphir HD7750 R7 250E - 2Go de ram

Message édité par : sinisrus / 05-01-2015 17:35
sinisrus sinisrusicon_post
@Alain

Je test la fonction :

Scene=U3D_OpenScene('Rexx Demo',"bump2.jpg",0,0,300,300,0)

Le deuxième paramètre je ne suis pas sur de comprendre c'est bien pour mettre une image de
fond? (Le Bitmap backbuffer)??

Attention si vous utilisez cette fonction alors Microbe3D ne gére pas la fenêtre :
c'est à vous de la créer/gérer

ça veux dire quoi? je ne suis pas sur de comprendre tu veux dire que cette fonction
n'affiche pas directement la preview 3d dans une fenêtre comme l'autre fonction?

--
Coin coin... amitheme.amiga-ng.org
Sam460 1,15Ghz - OS4.1FE - Radeon Saphir HD7750 R7 250E - 2Go de ram
thellier thelliericon_post

APTR U3D_OpenScene(APTR win, APTR bm, UWORD x, UWORD y, UWORD width, UWORD height,ULONG flags);


> c'est bien pour mettre une image de
fond?


Non ça veut dire que tu as créé toi meme
une "struct bitmap" nommée bm
une "struct window" nommée win


et que tu les fournis toi meme à Microbe3D pour qu'il trace dedans


Cad que Microbe3D va tracer dans bm puis ce sera copié à l'endroit x y de la fenetre
Ca sert pour une appli déjà existante ayant déjà une fenêtre pour  que Microbe3D  puisse y tracer à une endroit donné .
bm est facultatif = si t'en donne pas un il en allouera un tout seul


Dans ton cas ça servirait uniquement si tu récupérais le pointeur de ta fenetre de ton appli rexx et voulait y tracer qque chose en 3D à un endroit x y


>ça veux dire quoi? je ne suis pas sur de comprendre tu veux dire que cette fonction
n'affiche pas directement la preview 3d dans une fenêtre comme l'autre fonction?


Ca veut dire que c'est une fonction plus "manuelle" à mettre en route que tu doit savoir gérer une fenetre et les évenements qui s'y passent (souris,clavie)
Avec EasyOpenScene par contre Microbe3D va ouvrir sa  propre fenetre,allouer la bitmap et gérer la souris et le clavier = utilise donc plutôt cette fonction pour débuter :-)


Alain


Note:
Pour mettre une image de fond on fais ainsi  (mat_girl est ici une des textures définies pour l'objet3D dans le fichier .mtl)
 Material =U3D_Find(Object,U3D_MATERIAL,"mat_girl");     /* girl material */
 U3D_SetSpecialMaterial(Object,Material,NULL,U3D_MATBACKGROUND);   /* as background */

sinisrus sinisrusicon_post
ok la fonction U3D_OpenScene() ne semble pas compatible rxmui je peux créer une fenetre et les évenements qui s'y passent (souris,clavie) mais ça n'affiche pas le contenu 3d dedans :-( dommage bon pas grave je ferai avec l'autre fonction.

Tu vois c'est pour cette raison que je te demander pour avoir des fenêtre sans bord et definir la zone d'affichage dans la fenêtre.

Sinon j'ai un autre problème avec la fonction U3D_SetLight(scene,1,ColorTest)

en arexx pour définir la couleur ça ne marche pas j'arrive à avoir que du bleu ou noir


j'ai fais ça:

ColorTest="0.9,0.5,0.0,1.0"

U3D_SetLight(scene,1,ColorTest)
--
Coin coin... amitheme.amiga-ng.org
Sam460 1,15Ghz - OS4.1FE - Radeon Saphir HD7750 R7 250E - 2Go de ram
thellier thelliericon_post
tu as un exemple dans demo-arexx3 qui utilise les lights

    Color1=U3D_Get(Scene,U3D_REXXMEMORY,0)            /* use 16 bytes (=4 floats) at memory position 0 in arexx reserved memory */
    Light=U3D_Get(Scene,U3D_LIGHT,1)
    U3D_RexxSetColor(Color1,1.00,0.50,0.00,1.00)        /* orange */
    U3D_SetLight(Light,TRUE,Color1)
    U3D_Translate(Light,-0.93,0.93,1.00,U3D_RESET)   

    Color2=U3D_Get(Scene,U3D_REXXMEMORY,16)            /* use 16 bytes (=4 floats) at memory position 16 in arexx reserved memory */
    Light=U3D_Get(Scene,U3D_LIGHT,2)
    U3D_RexxSetColor(Color2,0.50,0.40,1.00,1.00)        /* light blue */
    U3D_SetLight(Light,TRUE,Color2)
    U3D_Translate(Light,0.93,-0.93,1.00,U3D_RESET)


en fait les couleurs sont défininies en C avec un pointeur sur une couleur (cad 16 octets) : comme c'est difficile à faire
avec rexx aussi j'ai créé un bloc de mémoire pour arexx que l'on peut manipuler plus facilement
Ici la premiere light est à la pos 0 dans la rexxmemory la deuxiéme à la pos 16 etc...

Note: Une couleur est sous la forme de 4 valeurs float r g b a 32 bits soit 4X4=16 octets


Sur OpenScene si tu peut récupérer le pointeur de ta fenetre alors  ça devrait marcher avec rxmui
Donne moi un bout de source arexx je verrai comment le faire

Dans l'ensemble regarde dans les sources pour voir comment marche une fonction : si t'as un utilitaire qui fait chercher les fichiers qui contiennent le texte "U3D_SetLight" alors ça aide

Alain
sinisrus sinisrusicon_post
@Alain

Voici un exemple de code la couleur ne marche pas

/* Created with BuildOther v1.0 */
/* By Sinisrus ? 2014 */

if ~show('l',"Microbe3D.library") then addlib("Microbe3D.library",0,-30,0)

VanillaKey=0



/* U3D_SetValue(Scene,U3D_REXXDEBUG,TRUE) */
Scene =U3D_EasyOpenScene('Rexx Demo',300,300)


??? Color1=U3D_Get(Scene,U3D_REXXMEMORY,0)??????? ???? /* use 16 bytes (=4 floats) at memory position 0 in arexx reserved memory */
??? Light=U3D_Get(Scene,U3D_LIGHT,1)
??? U3D_RexxSetColor(Color1,1.0,1.0,1.0,1.0)?????? ? /* orange */
??? U3D_SetLight(Light,TRUE,Color1)



Object=U3D_Read(Scene,'data/AmiLogo.obj') /* load a 3D object */


U3D_Unitize(Object,2.0) /* fit to screen (ie -1.0 +1.0) */
U3D_Normals(Object,0.0) /* do simple face normals */

U3D_GridWeld(Object,(1.0/300.0),0.001,0.001) /* will remove the double points not visible on screen */


Instance=U3D_AddInstance(Scene,Object,'Instance') /* add to scene */


U3D_SetValue(Scene,U3D_FPSLIMIT,30)

/********************************************************************************/

echo 'Esc for quit '
do while(VanillaKey< 1)

U3D_Rotate(Instance,3.0,1.0,4.0,U3D_CHANGE) /* rotate logo */

U3D_DrawScene(Scene) /* draw all */
VanillaKey =U3D_QueryValue(Scene,U3D_VANILLAKEY) /* get keyboard value */
end


U3D_Delete(Scene)

call remlib("Microbe3D.library")
EXIT
--
Coin coin... amitheme.amiga-ng.org
Sam460 1,15Ghz - OS4.1FE - Radeon Saphir HD7750 R7 250E - 2Go de ram
thellier thelliericon_post

TRUE est pas défini dans ton programme


J'ai aussi affiché les lights pour voir et c'est ok


========================================


/* Created with BuildOther v1.0 */
/* By Sinisrus ? 2014 */


if ~show('l',"Microbe3D.library") then addlib("Microbe3D.library",0,-30,0)


VanillaKey=0
TRUE=1;



/* U3D_SetValue(Scene,U3D_REXXDEBUG,TRUE) */
Scene =U3D_EasyOpenScene('Rexx Demo',300,300)



    Color1=U3D_Get(Scene,U3D_REXXMEMORY,0)          
    Light=U3D_Get(Scene,U3D_LIGHT,1)
    U3D_RexxSetColor(Color1,1.0,1.0,1.0,1.0)       
    U3D_SetLight(Light,TRUE,Color1)
 U3D_SetValue(Scene,U3D_SHOWLIGHTS,TRUE)


 


Object=U3D_Read(Scene,'data/AmiLogo.obj') /* load a 3D object */



U3D_Unitize(Object,2.0) /* fit to screen (ie -1.0 +1.0) */
U3D_Normals(Object,0.0) /* do simple face normals */


U3D_GridWeld(Object,(1.0/300.0),0.001,0.001) /* will remove the double points not visible on screen */



Instance=U3D_AddInstance(Scene,Object,'Instance') /* add to scene */



U3D_SetValue(Scene,U3D_FPSLIMIT,30)


/****************************************************************************** **/


echo 'Esc for quit '
do while(VanillaKey< 1)


U3D_Rotate(Instance,3.0,1.0,4.0,U3D_CHANGE) /* rotate logo */


U3D_DrawScene(Scene) /* draw all */
VanillaKey =U3D_QueryValue(Scene,U3D_VANILLAKEY) /* get keyboard value */
end



U3D_Delete(Scene)


call remlib("Microbe3D.library")
EXIT


 

sinisrus sinisrusicon_post
pour la couleur c'est R,G,B,? et c'est quoi la 4 eme valeur?

Peut-on avoir un rendu fil de fer?
Message édité par : sinisrus / 07-01-2015 17:05
thellier thelliericon_post
La 4eme c'est A alpha la transparence mais sur les lampes ça sert à rien .... (mettre A a 1.0)

Oui on peut faire en fil de fer
NULL=0
        U3D_SetSpecialMaterial(Object,Material,NULL,U3D_MATWIREFRAME)
en points
        U3D_SetSpecialMaterial(Object,Material,NULL,U3D_MATPLOT)
ou normal
        U3D_SetSpecialMaterial(Object,Material,NULL,U3D_MATSOLID)

Alain

Petites Annonces

0 annonce(s) publiée(s)

Consulter

AmigaOS 4.1

Laissez-vous tenter par
AmigaOS 4.1
AmiTheme

AmiTheme