[OS4][OpenGL] Scrolling d’étoiles sur 4 plans en parallaxe

12 sujets de 1 à 12 (sur un total de 12)

  • AmiDARK

    • Messages : 3040
    #6960

    Juste pour le fun …

    Je débute en C++ et en OpenGL …

    (je n’y connais vraiment rien dans ces 2 domaines précédents .. mais je m’amuse à apprendre)

    Et donc, pour le fun, je partage mon premier essai de scrolling d’étoiles pour Amiga OS 4 et OpenGL …

    /* OpenGL Sample #1

    SStar scrolling with 4 parallaxs

    */

    #include

    #include

    #include

    #include

    #include

    float PosXY[256][2];

    /* WHAT WE WANT TO DISPLAY ON SCREEN MUST BE ADDED IN THIS FUNCTION */

    void My_glRendering( void )

    {

    int i;

    glClearColor( 0.0, 0.0, 0.0, 0.0); /* Set backdrop as black */

    glClear( GL_COLOR_BUFFER_BIT ); /* Clear the backdrop with glClearColor color */

    glColor3f( 1.0, 1.0, 1.0 );

    for( i = 0; i < 256 ; i++ ){ PosXY[1] -= 0.0001f ;

    if ( i < 64 ) PosXY[1] -= 0.0001f ;

    if ( i < 128 ) PosXY[1] -= 0.0001f ;

    if ( i < 192 ) PosXY[1] -= 0.0001f ;

    if ( PosXY[1] <=0.0 ) PosXY[1] = 1.0;

    glBegin(GL_POINTS) ;

    glVertex3f( PosXY[1], PosXY[2], 0.0f );

    glEnd() ;

    }

    glFlush();

    }

    /* SOME INITIALIZATIONS HERE */

    void My_glInit( void )

    {

    glMatrixMode( GL_PROJECTION );

    glLoadIdentity() ;

    glOrtho( 0.0, 1.0, 0.0, 1.0, -1.0, 1.0 );

    }

    /* MAIN C PROCEDURE STARTUP-SEQUENCE IS HERE */

    int main(int argc, char** argv)

    {

    int i;

    for( i = 1; i < 256 ; i++ ){ PosXY[1] = rand() % 100000 / 100000.0 ;

    PosXY[2] = rand() % 100000 / 100000.0 ;

    }

    glutInit(&argc, argv); /* Initialize Glut */

    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); /* Define display mode properties such as single buffer, color mode and */

    glutInitWindowSize( 640, 480 ); /* define the sizes of the window to create */

    glutInitWindowPosition( 300, 300 );

    glutCreateWindow("AmiDARK Test Window"); /* Create the final rendering window */

    My_glInit();

    glutDisplayFunc( My_glRendering );

    glutIdleFunc( My_glRendering );

    mglEnableSync(GL_TRUE );

    glutMainLoop();

    return 0;

    }

    Voici un lien vers l’archive ( en RAR ) qui contient à la fois le fichier .c la makefile, le projet en CodeBENCH et l’exécutable pour testouiller :

    http://files.odyssey-creators.com/os4opengl/OpenGLStarsv1.rar

    Murakami

    • Messages : 689
    #110567

    Je viens juste de tester sur mon MicroA1. Ça me rappelle le bon vieux temps des démos sur A500 ! :-)

    AmiDARK

    • Messages : 3040
    #110568

    Ben alors … A part Murakami, personne n’a testé mon petit prog d’étoiles ?

    henes

    • Messages : 2616
    #110569

    Buffer overflow et trash/crash à l’horizon.

    Remplace 257 par 256 dans les for().

    cclecle

    • Messages : 331
    #110570

    eu… pourquoi ?

    un int ne fait-il pas 16bits ?

    donc -32768..32767 ?

    A600 + 604n + RTC + Vampire V2 600, Coffin R54 / wb3.1.4.1
    A1200 + Vampire V2 1200, en cours de construction 🙂

    Anonyme

    • Messages : 211
    #110571

    i=1 ou i=0 ?

    krabob

    • Messages : 1171
    #110572

    henes a raison, pour scanner une table de 256 elements

    la boucle for ressemble à:

    for( i = 0; i < 256 ; i++ ){ } le premier element adressable est 0, le dernier element adressable est 255. Le C/C++ permet de pouvoir compiler et adresser des éléments au delà des tables, ce qui peut faire planter. (on ne sait pas ce qu’il s’y trouve.)

    AmiDARK

    • Messages : 3040
    #110573

    Oui je sais, j’ai modifié cela mais je n’ai pas encore uploadé de nouvelle version … je modifie le post inital pour mentionner à 256 comme il se devrait.

    thellier

    • Messages : 688
    #110574

    Bonjour

    J’ai un peu modifié ton prog

    Tu devrais le mettre sur aminet car un prog 3D COURT c’est pédagogique et puis il est compatible tout OS

    Alain

    /* OpenGL Sample #1 Star scrolling with parallaxs from AmiDARK – 2009*/

    /* Enhancements from Alain Thellier */

    #define STARCOUNT 300

    #define STARSIZE 6.0

    #define STARSPEED 0.0002

    #include

    #include

    #include

    #include

    #include

    struct star3D {float x,y,size,speed,r,g,b;};

    #define NLOOP(nbre) for(n=0;n

    AmiDARK

    • Messages : 3040
    #110575

    Salut,

    C’est une idée sympa en effet :)

    Mais en fait j’ai pas trop le temps de le faire ces jours ci .. peut-être + tard …

    Merci

    @ +

    Alex

    • Messages : 1025
    #110576

    En parlant de ça peut-être qu’il pourrait être sympa de proposer une série d’articles (A=P, Obligement et/ou Gurumed.net) sur ton exploration du C sur AmigaOS et d’OpenGL. ça pourrait susciter des envies, qui sait ?

    AmiDARK

    • Messages : 3040
    #110577

    C’est une idée intéressante

    (je verrais dès que j’aurais un peu + de temps de libre)

    d’ailleurs j’ai eu beaucoup d’aide sur le forum d’Amigans.net …

    Franchement, même si tu as l’impression de passer pour un noob, les gars te répondent correctement avec toutes les informations dont tu as besoin … J’apprécie grandement ce forum qui est pour moi de Qualité !!!

12 sujets de 1 à 12 (sur un total de 12)

  • Vous devez être connecté pour répondre à ce sujet.

Forums AmigaOS, MorphOS et AROS Création [OS4][OpenGL] Scrolling d’étoiles sur 4 plans en parallaxe

Amiga Impact