C, OpenGL et Xcode

CeetixCeetix Membre
15:56 modifié dans Actualités #1
Bonjour tout le monde.
Voilà  comme certain le savent je suis en école d'ingénieur informatique et chaque année nous devons réaliser un projet de plus en plus complexe. Je vais finir mon cycle prépa et arriver en 3ème année (enfin !).
Avec un ami on réfléchi déjà  au projet que l'on pourrai réaliser lors de cette année.
On a donc penser à  un projet openGL/modélisation de notre école. Vu que je suis sous mac j'aurai aimé savoir comment faire pour coder un petit projet en openGL sous xcode. J'ai regardé sur le net (google est mon ami ^^) mais les indications que je trouve ne marche pas.
Pourriez-vous (si vous le savez) m'indiquer la marche à  suivre pour afficher genre juste une fenetre?
Ensuite vu que c'est en C si j'ai envie de continuer mon dev sur un pc de l'école ça marchera toujours hein ?

Merci !  :P
«1

Réponses

  • MalaMala Membre, Modérateur
    15:56 modifié #2
    Tu as déjà  regardé ici?
    /Developer/Examples/OpenGL
  • CeetixCeetix Membre
    15:56 modifié #3
    Ah non c'est vrai que je pense jamais à  regarder les exemples.
    Et donc suffit d'inclure les lib OpenGEL et Glut ? Si je dev avec tout ça je pourrai porter sans probleme si je veux dev sous Visual Studio ?
  • schlumschlum Membre
    15:56 modifié #4
    Tout ce qui est openGL est parfaitement compatible Windows / Mac / Linux / Solaris...

    Sur Mac, il suffit de compiler avec -framework OpenGL -framework GLUT

    Et pour se lancer dans l'OpenGL -> http://nehe.gamedev.net/
    Il fournit ses exemples sur toutes les plates-formes.
  • CeetixCeetix Membre
    15:56 modifié #5
    Oui j'ai vu ça mais j'ai vu aussi des tuto vraiment pas mal sur le site du zero. Sauf qu'ils utilisent la SDL pour afficher la fenetre et géer les evenements. Je me demande où aller. Quand j'essai le code di site du zero ca compile pas, le compilateur n'aime pas les glBegin etc ... pourtant j'ai bien rajouté les frameworks et j'ai créé un projet SDL. Je pige pas pourquoi.
  • schlumschlum Membre
    15:56 modifié #6
    SDL est une bibliothèque 2D basée sur OpenGL, mais n'est pas installée en standard sur Mac OS X.
  • CeetixCeetix Membre
    15:56 modifié #7
    Oui je l'ai installée déjà  et donc je choisi un projet "SDL Application" apres j'importe mes frameworks GLUT et OpenGL et je test en copiant le main() du site du zero, mais il n'aime pas le glBegin. SI je compile sans le code c'est bon ca m'affiche bien la fenetre noire.
  • schlumschlum Membre
    15:56 modifié #8
    Si ça ne compile pas, c'est forcément qu'il manque les includes correspondants  :P
  • CeetixCeetix Membre
    15:56 modifié #9
    Bah je sais pas trop car il met un truc du genre "Jam is deprecated..." Car j'ai bien tout inclus

    main.cpp
    <br />#include &lt;string.h&gt;<br />#include &lt;stdio.h&gt;<br />#include &lt;math.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &lt;time.h&gt;<br />#include &lt;GLUT/glut.h&gt;<br />#include &lt;OpenGL/glext.h&gt;<br />#include &lt;OpenGL/gl.h&gt;<br />#include &lt;OpenGL/glu.h&gt;<br /><br />#include &quot;main.h&quot;<br />#include &quot;SDL.h&quot;<br />
    
  • schlumschlum Membre
    15:56 modifié #10
    Non, ce ne sont pas les bon headers pour OpenGL avec mac OS X.

    <OpenGL/OpenGL.h>
    <GLUT/glut.h>
  • schlumschlum Membre
    15:56 modifié #11
    ça me rappelle des souvenirs tout ça  :o

    J'ai eu du mal à  le recompiler 5 ans après  :)

    http://cschlum2.free.fr/Robot.zip
  • CeetixCeetix Membre
    15:56 modifié #12
    J'ai changé par les header que tu m'as donné et ça donne tjs pareil.
    Voici mon code entier.

    main.cpp
    <br />#include &lt;string.h&gt;<br />#include &lt;stdio.h&gt;<br />#include &lt;math.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &lt;time.h&gt;<br />#include &lt;GLUT/glut.h&gt;<br />#include &lt;OpenGL/OpenGL.h&gt;<br /><br />#include &quot;main.h&quot;<br />#include &quot;SDL.h&quot;<br /><br />int main(int argc, char *argv&#91;])<br />{<br />&nbsp; &nbsp; SDL_Init(SDL_INIT_VIDEO);<br />&nbsp; &nbsp; SDL_WM_SetCaption(&quot;Mon premier programme OpenGL !&quot;,NULL);<br />&nbsp; &nbsp; SDL_SetVideoMode(640, 480, 32, SDL_OPENGL);<br />	<br />&nbsp; &nbsp; bool continuer = true;<br />&nbsp; &nbsp; SDL_Event event;<br />	<br />&nbsp; &nbsp; while (continuer)<br />&nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; SDL_WaitEvent(&amp;event);<br />&nbsp; &nbsp; &nbsp; &nbsp; switch(event.type)<br />&nbsp; &nbsp; &nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; case SDL_QUIT:<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; continuer = false;<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br />		<br />		glClear(GL_COLOR_BUFFER_BIT);<br />		<br />&nbsp; &nbsp; &nbsp; &nbsp; glBegin(GL_TRIANGLES);<br />		glColor3ub(255,0,0);&nbsp; &nbsp; glVertex2d(-0.75,-0.75);<br />		glColor3ub(0,255,0);&nbsp; &nbsp; glVertex2d(0,0.75);<br />		glColor3ub(0,0,255);&nbsp; &nbsp; glVertex2d(0.75,-0.75);<br />&nbsp; &nbsp; &nbsp; &nbsp; glEnd();<br />		<br />&nbsp; &nbsp; &nbsp; &nbsp; glFlush();<br />&nbsp; &nbsp; &nbsp; &nbsp; SDL_GL_SwapBuffers();<br />&nbsp; &nbsp; }<br />	<br />&nbsp; &nbsp; SDL_Quit();<br />	<br />&nbsp; &nbsp; return 0;<br />}<br />
    
  • CeetixCeetix Membre
    15:56 modifié #13
    Je vous met une capture d'écran car j'arrive toujours pas à  faire marcher ...  :-\\
  • schlumschlum Membre
    15:56 modifié #14
    ça c'est pas la compilation, c'est le lien... Il manque les frameworks probablement du coup.
  • CeetixCeetix Membre
    15:56 modifié #15
    Oui mais je l'ai bien ajouté comme tu peux le voir sur le coté. Non?
  • CeetixCeetix Membre
    15:56 modifié #16
    Personne ? :(
  • CéroceCéroce Membre, Modérateur
    avril 2009 modifié #17
    C'est surtout au niveau de la Target > Link Binary With Libraries que tu peux voir si les frameworks sont effectivement linkées.
    D'ailleurs OpenGL.framework et GLUT.framework devraient être dans Other frameworks.

    Les as-tu ajouté par bouton droit > Add Existing Framework... ?
    Il me semble qu'on a des problèmes si on ne le fait pas ainsi.
  • CeetixCeetix Membre
    avril 2009 modifié #18
    J'ai refait l'ajout dans Other (oui je fais tout le temps clique droit etc..) j'ai verifié dans le target et elles y sont bien.
    Je vois pas ce qui cloche.
    Je joins mon projet si vous voulez voir.
  • schlumschlum Membre
    15:56 modifié #19
    Pas SDL, et pas envie de l'installer... Mais me paraà®t bizarre ton projet, il n'y a pas le Framework SDL, et l'appel au header est fait entre "" (header perso), ce qui est contraire à  toutes les règles.  ???
  • CeetixCeetix Membre
    15:56 modifié #20
    Bah quand je créé un projet SDL je choisi dans mes template et ca le créé automatiquement. Je n'ai pas besoin d'importer un framework, et il me met automatiquement #include "SDL.h"  enfin le problème n'a pas l'air de venir de la SDL car si j'enlève le code OpenGL j'ai bien une fenetre qui s'affiche.
  • NseaProtectorNseaProtector Membre
    avril 2009 modifié #21
    Déja tu as visiblement un souci lié a la conversion du template que tu utilises.
    (Jam is deprecated ....)

    Euh comment te joindre un zip ?
  • CeetixCeetix Membre
    15:56 modifié #22
    En faisant option supplémentaire quand tu clique sur répondre.(en bas du message tapé) . Pourtnzt ce template je l'utilise pour mes projet SDL tout coirt et ca marche super.
  • NseaProtectorNseaProtector Membre
    avril 2009 modifié #23
    Parcontre j'ai un petit souci avec le boolean, a deux on va bien trouver pourquoi...
    Il suffit de renommer main.c en main.cpp et ça marche !
  • CéroceCéroce Membre, Modérateur
    15:56 modifié #24
    Il n'existe pas de type booléen en langage C, mais il me semble que le type boolean existe en C++.
  • AliGatorAliGator Membre, Modérateur
    15:56 modifié #25
    Pour définir le type booléen en C, on peut faire par exemple un truc du genre
    typedef enum { false=0, true } bool;
    
  • CeetixCeetix Membre
    15:56 modifié #26
    Mais je comprends plus rien NSeaProtector. J'ai fait la meme chose que toi et j'avais aussi rajouté le SDL.framework. Ca ne marchait pas et là  ton projet fonctionne. Merci en tout cas ça fonctionne.

    Et pour Ali oui c'est ce que je faisais pour mes projets en C ^^
  • NseaProtectorNseaProtector Membre
    15:56 modifié #27
    Pas de bool en c ? T'es sûr ? T'as l'air sérieux donc c'est possible, moi le C j'ai jamais accroché... J'imagine qu'il suffit en C de se servir d'un integer et de lui affecter la valeur true ou false.
    C'est vrai qu'en ObjC le NSBool est codé en 8 ou 16 Bits, je ne sais plus...

    En tout cas en renommant le .c en .cpp ça fonctionne, car son code était en cpp à  l'origine mais mon template, non.
  • CeetixCeetix Membre
    15:56 modifié #28
    Oui en C tu met juste 1 ou 0 à  un entier.  Mais j'aimerai bien savoir comment tu as fait pour faire fonctionner mon projet...
  • NseaProtectorNseaProtector Membre
    15:56 modifié #29
    dans 1239633155:

    Mais je comprends plus rien NSeaProtector. J'ai fait la meme chose que toi et j'avais aussi rajouté le SDL.framework. Ca ne marchait pas et là  ton projet fonctionne. Merci en tout cas ça fonctionne.

    Et bien vu le message "jam is deprecated..." je me suis dis que la conversion de ton template surrement pour Project builder ou Xcode 2 c'était mal passé, Xcode n'est pas infaillible. J'ai juste repris un exemple SDL qui fonctionne et copier/coller ton code à  la place.

    Parcontre, dis moi tu utilise SDL pour pouvoir le faire tourner sur une autre plateforme ? Parce que si ce n'est pas le cas, cocoa va très bien...
  • schlumschlum Membre
    15:56 modifié #30
    dans 1239633186:

    Pas de bool en c ? T'es sûr ? T'as l'air sérieux donc c'est possible, moi le C j'ai jamais accroché... J'imagine qu'il suffit en C de se servir d'un integer et de lui affecter la valeur true ou false.
    C'est vrai qu'en ObjC le NSBool est codé en 8 ou 16 Bits, je ne sais plus...

    En tout cas en renommant le .c en .cpp ça fonctionne, car son code était en cpp à  l'origine mais mon template, non.


    Bah, même en C++ il n'y a pas de type bool, c'est une parure... C'est codé sur 8 bits, et tu peux lui attribuer toutes les valeurs d'un char, c'est 0 -> false et tout le reste -> true.
  • CeetixCeetix Membre
    15:56 modifié #31
    Oui je veux le porter sous windows car mon école n'est pas sur mac donc bon ...
Connectez-vous ou Inscrivez-vous pour répondre.