Comme indiqué par le titre j'aimerais savoir comment on fait un projet avec le SDK de Ogre, j'ai suivi le tutoriel proposé par Ogre, ici, si je fais ça, cela me met plein d'erreur !
Par exemple visual studio m'affiche ceci :
Après je clique sur install comme indiqué, et j'obtiens ça :
Au final ma question serait je fais quoi avec ça ?
Merci pour vos aides futures!
- Edité par Kitsu Hokkaido 3 janvier 2019 à 18:39:14
Gravité Code Description Projet Fichier Ligne État de la suppression Erreur LNK1120 1 externes non résolus SampleBrowser C:\ogreSdk\ogre\build\bin\Release\SampleBrowser.exe 1 Erreur (active) E0135 class "Ogre::Vector<3, Ogre::Real>" n’a pas de membre "UNIT_Y" SampleBrowser c:\ogreSdk\ogre\OgreMain\include\OgreCamera.h 340 Erreur (active) E0135 class "Ogre::Vector<3, Ogre::Real>" n’a pas de membre "ZERO" SampleBrowser c:\ogreSdk\ogre\OgreMain\include\OgreCamera.h 438 Erreur (active) E0135 class "Ogre::Vector<3, Ogre::Real>" n’a pas de membre "ZERO" SampleBrowser c:\ogreSdk\ogre\OgreMain\include\OgreEntity.h 584 Erreur (active) E0135 class "Ogre::Vector<3, Ogre::Real>" n’a pas de membre "UNIT_SCALE" SampleBrowser c:\ogreSdk\ogre\OgreMain\include\OgreMatrix4.h 319 Erreur (active) E0135 class "Ogre::Vector<3, Ogre::Real>" n’a pas de membre "UNIT_SCALE" SampleBrowser c:\ogreSdk\ogre\OgreMain\include\OgreStaticGeometry.h 619 Erreur LNK2019 symbole externe non résolu _WinMain@16 référencé dans la fonction "int cdecl scrt_common_main_seh(void)" (?__scrt_common_main_seh@@YAHXZ) SampleBrowser C:\ogreSdk\ogre\build\Samples\Browser\MSVCRT.lib(exe_winmain.obj) 1
Voilà je sais d’où viennent toutes ces erreurs, cela vient du fait que le code n’est pas codé en macro c++, le problème je sais pas exactement ce que c’est et où apprendre cette partie du c++ ! Si quelqu’un pouvait m’indiquer un tuto. Autre chose : lorsque je suis dans la configuration évoqué plus haut je sais pas comment je fais pour refaire un autre projet sans tout copier (du coup j'ai mis le code du tuto dans sampleBrowser.cpp). Je veux juste indiquer le chemin comme proposé par le tuto de ogre : ici, je n’arrive pas à appliquer ce qui y est écrit ! Merci.
- Edité par Kitsu Hokkaido 12 janvier 2019 à 12:14:44
Bonjour, merci pour cette réponse je vais installer nuGet, mais mon plus gros problème c'est un bon tuto parce que le tuto de la doc d'Ogre fournit un tuto sans que le code soit en macro du coup ça marche pas ! J'aimerais apprendre la macro c++.
Ok, c'est juste des MACROs, rien à voir avec un "MACRO C++".
C'est un mécanisme rudimentaire venu tout droit du C des années 1970, pas du C++, même si la norme C++ assure une certaine compatibilité avec ces tambouilles. Cela ne fait pas vraiment partie du langage strictement parlant, mais plus des mécanismes de pré-processing des sources.
Le code que vous montrez utilise ce mécanisme de manière assez "standard", pour un vieux programmeur qui ne développe plus sérieusement pour Windows depuis au moins 20 ans minimum.
Vous pouvez prendre n'importe quelle documentation C ou C++ correspondant au compilateur que vous utilisez pour voir comment ça fonctionne.
C'est extrêmement rudimentaire, on a donc très vite fait le tour et il y a bien des manières plus modernes de faire les choses quand cela commence à devenir compliqué avec les MACRO.
C'est aussi très dépendant du compilateur et de comment ont été conçu les sources que vous essayez d'utiliser.
Si le code que vous postez vien de la documentation d'Ogre, alors, ils ont un putain de passif/ dettes techniques au niveau bonne pratique sous Windows.
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
Bonjour, non sur la doc Ogre il n'y a pas de code macro en fait. Le code proposé par la doc n'en contient pas, mais ça ne marche pas si j'utilise ceux-là. Du coup le sdk que j'ai compilé donne parmi les autres projets le projet SampleBrowser, en tant que débutant on peut le compiler pour voir à quoi ressemble Ogre ! J'ai regardé le code du fichier cpp de ce projet et il me semble qu'il est en macro(Le code que j'ai donné était juste un exemple). Le voici :
/*
-----------------------------------------------------------------------------
This source file is part of OGRE
(Object-oriented Graphics Rendering Engine)
For the latest info, see http://www.ogre3d.org/
Copyright (c) 2000-2014 Torus Knot Software Ltd
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
-----------------------------------------------------------------------------
*/
#include <time.h>
#include "OgrePlatform.h"
#include <iostream>
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
#define WIN32_LEAN_AND_MEAN
#include "windows.h"
#include "OgreString.h"
#elif OGRE_PLATFORM == OGRE_PLATFORM_APPLE_IOS
#include "SampleBrowser_iOS.h"
#elif OGRE_PLATFORM == OGRE_PLATFORM_ANDROID
#include "SampleBrowser_Android.h"
namespace OgreBites {
SampleBrowser OgreAndroidBridge::mBrowser;
ndk_helper::PinchDetector OgreAndroidBridge::mPinchGesture;
}
#endif
#include "SampleBrowser.h"
#if OGRE_PLATFORM == OGRE_PLATFORM_WINRT
// short version of SDL_winrt_main_NonXAML.cpp
#include <wrl.h>
#pragma warning(disable:4447)
#pragma comment(lib, "runtimeobject.lib")
INT WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, INT)
{
if(FAILED(Windows::Foundation::Initialize(RO_INIT_MULTITHREADED))) {
return 1;
}
SDL_WinRTRunApp(main, NULL);
return 0;
}
#endif
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
INT WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR cmdLine, INT) {
int argc = __argc;
char** argv = __argv;
#elif OGRE_PLATFORM == OGRE_PLATFORM_ANDROID
void android_main(struct android_app* state) {
#else
int main(int argc, char *argv[]) {
#endif
#if OGRE_PLATFORM == OGRE_PLATFORM_APPLE_IOS
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, @"UIApplication", @"AppDelegate");
[pool release];
return retVal;
#elif OGRE_PLATFORM == OGRE_PLATFORM_ANDROID
OgreBites::OgreAndroidBridge::init(state);
OgreBites::OgreAndroidBridge::go(state);
#else
try
{
bool nograb = false;
if (argc >= 2 && Ogre::String(argv[1]) == "nograb")
nograb = true;
int startUpSampleIdx = -1;
if (argc >= 3)
{
startUpSampleIdx = Ogre::StringConverter::parseInt(Ogre::String(argv[2]), -1);
}
else if (argc >= 2)
{
// first parameter can be either nograb or index. in the former case, we'll just
// get -1, which is fine.
startUpSampleIdx = Ogre::StringConverter::parseInt(Ogre::String(argv[1]), -1);
}
OgreBites::SampleBrowser brows (nograb, startUpSampleIdx);
brows.go();
}
catch (Ogre::Exception& e)
{
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
MessageBoxA(NULL, e.getFullDescription().c_str(), "An exception has occurred!", MB_ICONERROR | MB_TASKMODAL);
#else
std::cerr << "An exception has occurred: " << e.getFullDescription().c_str() << std::endl;
#endif
}
return 0;
#endif
}
@SamuelDjuricic2, t'as pas l'impression de squatter ?
Fais ton propre sujet, SVP.
@AquilaC++, il n'est pas en MACRO, c'est juste du code C++, c'est vrai, truffé à outrance de MACRO pour adapter le code de la fonction "main" (le point d'entrée du programme) à l'ensemble des plateformes cibles qui ont chacune des petites spécificités.
Le plus simple, c'est de garder en tête ta plateforme cible, donc les constantes de compilations qui y correspondent, et ensuite de ne prendre en compte que le code qui est dans les parties correspondant à ta plateforme cible.
Souvent, quand on développe sur ce type de framework multiplateforme, les parties du code qui sont spécifiques à une plateforme sont dans des sections "#if...#else#endif", mais sont assez peu nombreuses et souvent, on ne fait que les copier-coller de la documentation, si cela est nécessaire.
Cet extrait n'est qu'un cas extrême par le statu très particulier du point d'entrée d'un programme : "main".
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
Merci pour votre réponse, j'en prends note ! Mais mon problème majeur c'est que je ne sais pas comment créer un projet avec Ogre 3D. C'est à dire avec le sdk. Ici : https://www.ogre3d.org/download/sdk se trouve la page de téléchargement de Ogre, la phrase : "The “install” target will generate you the SDK that you can then use for your project." m'indique que j'utiliserais ce dossier (que j'ai) pour les ressources, les bibliothèques par conséquent (si je me trompe pas) pour configurer mon projet. Le problème c'est qu'il n'y a pas de tuto pour faire cette étape ou sinon je comprends tout de travers ! Jusqu'à maintenant je mettais le code que je vous ai montré dans le projet sampleBrowser qui lui contenait toutes les dépendances nécessaires dans sa configuration. Toutes les étapes sont dites contenues dans ce tutoriel : https://ogrecave.github.io/ogre/api/latest/tutorials
Merci pour vos aides.
- Edité par Kitsu Hokkaido 19 février 2019 à 13:21:13
>c'est que je ne sais pas comment créer un projet avec Ogre 3D
Qu'entendez vous par "avec" ?
Si c'est comme outil de génération de projet, Ogre 3D n'est pas un framework, c'est une bibliothèque/SDK, il n'a pas à disposer d'outils de génération de projet.
C'est CMake qui sert de générateur de projet.
C'est en fonction de la configuration en entrée de CMake que le type de projet Visual Studio sera choisi et le projet réellement créé.
Il ressemble à quoi le code source dans le projet créé par CMake ?
En fonction de ce qui a été généré, vous utilisez une partie du code source contenu dans le cpp "auberge espagnole" que vous avez posté.
>la phrase : "The “install” target will generate you the SDK that you can then use for your project."
C'est dans le cadre : "We recommend you to build Ogre from source to make it match your needs".
Les outils de génération de makefile fabrique un makefile avec une cible "install" pour faire les dernières actions pour simplifier l'usage du SDK, pas l'intégrer dans un projet, contrairement à ce que fait un gestionnaire de package comme NuGet.
>m'indique que j'utiliserais ce dossier (...) pour configurer mon projet
Oui.
>Le problème c'est qu'il n'y a pas de tuto
C'est très spécifique au contexte de génération : chaine de compilation + IDE.
Dans le projet "sampleBrowser", c'est quel version de la fonction "main" qui est vraiment utilisée ?
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
Donc si je comprends bien je dois utiliser CMake pour créer mon projet à l'aide des ressources du SDK. Parce que sinon je vois pas à quoi sert le sdk pre-build disponible sur leur site. Le problème c'est que je sais pas coder en CMake je me demande donc si ils ont pas un fichier tout près pour un projet basique. Par ailleurs j'ai déjà configuré un projet avec des bibliothèques externes(SFML). Est-ce que je dois faire sensiblement la même chose grâce au sdk, parce que j'ai déjà essayé et ça ne marche pas
Voilà ce que Cmake me créer dans mon dossier build :
>Il ressemble à quoi le code source dans le projet créé par CMake ?
Je vois pas ce que vous voulez dire.
Deedolith si je n'utilise pas nuGet, c'est parce que la version proposée par les paquets est trop ancienne : 1.8.
Voilà merci.
Edit : Au fait je ne comprends pas ce que vous entendez par version de la fonction "main". Peut-être que vous situer mon niveau en programmation vous aidera plus : j'ai suivi le cours c++ du site (je sais qu'il est mal considérée) : mais les livres qui m'était conseillé étaient en Anglais (je me débrouille mais pas au point de lire un livre sur la programmation :D). Ensuite j'ai fais de la SFML c'est tout. Vous me parlez souvent de choses que je ne comprends pas, évidemment je vais chercher. Connaitriez-vous un cours donnant toutes les bases utiles pour la programmation ? Il est dit que ce cours est très instructifs : https://zestedesavoir.com/tutoriels/822/la-programmation-en-c-moderne/ Merci.
- Edité par Kitsu Hokkaido 19 février 2019 à 21:02:38
@Deedolith insiste sur NuGet car c'est vraiment l'approche la plus simple pour utiliser une librairie/un framework/etc...
Mais votre remarque sur obsolescence de la version fournie par NuGet justifie pleinement votre volonté de compiler le SDK sur votre machine. C'est même fait pour.
Un SDK, c'est juste un Kit, avec ce que les concepteurs de la bibliothèque pensent utiles aux développeurs voulant l'utiliser. C'est donc très différent en fonction des concepteurs et des bibliothèques. C'est un peu une pochette surprise et c'est à vous de la déballer (en lisant attentivement la documentation).
Ce que vous nous indiquez du CMake, c'est qu'il est en charge de construire un SDK sur votre machine. Mais il y a peut-être un autre CMake pour construire un projet utilisant le SDK, non ?
Dans le SDK, il y a des exemples, vous pouvez peut-être cloner leur configuration CMake pour construire vos propres projets.
Mais si vous avez du mal avec CMake, essayez de construire un projet directement depuis Visual Studio qui ressemble le plus possible à ceux des exemples du SDK. Mais cela peut représenter pas mal de boulot, car il a beaucoup de paramètres à vérifier dans un projet Visual Studio.
>ce que vous entendez par version de la fonction "main"
Dans l'extrait que vous avez posté, il y a plusieurs fonctions (point d'entrée du programme) différentes, mais une seule est vraiment définie (grâce aux constantes de compilation) :
-d'autres mais qui n'ont pas d'intérêt pour Windows
En sachant laquelle est vraiment utilisée, vous saurez quel type de projet Visual Studio vous devriez créer (mais il faudra aussi le configurer complètement, cf. ci-avant).
Si la signification de "#if" et consort n'est pas claire, prenez la peine de réviser ces bases. C'est fondamentale pour l'utilisation de ce type de librairie multi-plateforme.
Je ne sais pas cela est correctement expliqué dans le cours que vous indiquez, c'est souvent passé un peu rapidement dans les cours mais c'est pas vraiment compliqué. Mais le cours d'OC est une calamité et il faut que vous ayez la démarche de désapprendre ce qu'il vous a foutu dans la tête pour bien apprendre avec un bon cours (bon courage).
Chaque bibliothèque a une méthode plus ou moins spécifique de s'intégrer à un projet. C'est souvent assez proche, mais plus elle est "puissante" plus elle a tendance à avoir des procédés d'intégration "invasifs" sur le projet hôte.
S'il y a des choses que tu ne comprends pas dans nos explications, n'hésites pas à la dire. On ne connait pas tes connaissances et tes difficultés.
Je pense que la lecture du cours de zestedesavoir ne serait pas une perte de temps.
Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
Merci beaucoup pour cette réponse, j'ai tout compris
J'ai réussi à partir de mon SDK et celui de ogre à créer un/des projets. C'est grâce à ce sujet(https://forums.ogre3d.org/viewtopic.php?f=2&t=94823) et à vos explications qui mon bien éclaircit ! Je vais revoir, plutôt voir les bases du c++ et par la suite apprendre Ogre.
Merci pour tout !
Galérer est le succés de la réussite ;')
Comment créer un projet à partir du SDK de Ogre ?
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Galérer est le succés de la réussite ;')
Galérer est le succés de la réussite ;')
Galérer est le succés de la réussite ;')
Galérer est le succés de la réussite ;')
Galérer est le succés de la réussite ;')
Galérer est le succés de la réussite ;')
Galérer est le succés de la réussite ;')
Galérer est le succés de la réussite ;')
Galérer est le succés de la réussite ;')