IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Projets Discussion :

Nouveau moteur de jeux vidéo - présentation et recrutement.


Sujet :

Projets

  1. #301
    Membre actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Novembre 2023
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Novembre 2023
    Messages : 266
    Par défaut Raz le bol du réfractor infini.
    Bonjour, j'aimerais bien avancer mais je suis toujours retardé. Soit par un bug d'affichage (comme avec bistro) et maintenant en plus à cause de l'instabilité des modules c++20 avec les compilateurs. Ca marchait bien avec clang jusqu'à que je me tape un crash de clang lors de la construction d'un modmap. Du coup, réfractor => 2 backends. (Un backend c++20 modules et un backend c++ classique) Du coup à chaque fois, je perd un temps fou, j'avance pas, je pars dand du réfractor infini. Et maintenant que j'ai résolu les problèmes de performance, que j'étais prêt à m'attaquer aux derniers bugs d'affiche paf => noveau problème. Après, oui je n'avance pas!!! C'est normal!!! Quand on a affaire à des nouvelles features cassées!!! Tant que j'y suis, je vais aussi refaire un backend opengl car on ne sait jamais. Non mais sérieusement..., clang ne compile plus la démo, je suis obligé de repasser aux #include. Mais l'objectif fixé pour ce moteur est elevé donc..., ça prend du temps. (Surtout dépasser le rendu des moteurs existants au niveau commercial et leur écosystème, obligé, puisque je peux pas les dépasser au niveau du nombre de features, je suis pas une équipe de 50 personnes)

  2. #302
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 061
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 061
    Billets dans le blog
    12
    Par défaut
    Je comprends même pas que tu sois passé aux modules qui ne sont absolument pas matures...
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  3. #303
    Membre actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Novembre 2023
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Novembre 2023
    Messages : 266
    Par défaut
    Je comprends même pas que tu sois passé aux modules qui ne sont absolument pas matures...
    Je me suis juste laissé bercé par une streameuse qui crée un moteur de jeux (mais je me suis rendu compte que contrairement à ce que moi je pensais, ce qu'elle fait c'est complètement instable.) Je dois réfractoré et faire un fallack aux #include juste à cause d'elle.

  4. #304
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 061
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 061
    Billets dans le blog
    12
    Par défaut
    C'est pas elle qui t'a dit de passer aux modules, c'est toi qui l'as fait. Va pas l'accuser sans raison
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  5. #305
    Membre actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Novembre 2023
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Novembre 2023
    Messages : 266
    Par défaut
    C'est pas elle qui t'a dit de passer aux modules, c'est toi qui l'as fait. Va pas l'accuser sans raison
    C'est vrai mais tu ne comprends même pas pourquoi j'ai choisi de les implémenté quand même et que je vais les rajouté en option. (avec mon backend #include des version précédentes du moteur)

    Je ne citerai même pas, la raison je te laisse la chercher, on voit que tu n'as jamais réalisé de projet commerciaux.

    Castor3D.

  6. #306
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 061
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 061
    Billets dans le blog
    12
    Par défaut
    Elle est forte, celle là...
    Je bosse dans le dev en professionnel depuis plus de 20 ans, Castor3D n'est effectivement qu'un projet personnel.

    Pour un projet commercial, on ne teste pas des features non matures (genre... les modules C++20).
    On teste ça à côté, pour valider le truc avant de le mettre en prod.

    Toi, tu ajoutes tête baissée des trucs que tu connais même pas dans ton "projet commercial" (laisse moi rire), sans mesurer l'impact que ça aura sur le code, juste parce que (de ce que tu dis, hein, j'invente rien) "t'as vu une streameuse qui le fait dans son moteur de jeu", désolé de trouver ça léger comme raison.
    Et je le redis, c'est pas de sa faute à elle, mais de la tienne, tu fais de la marde dans ton moteur, assume un peu..
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  7. #307
    Membre Expert
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 687
    Par défaut
    Citation Envoyé par Laurent7601 Voir le message
    Je n'arrivais pas à me remettre en question. (Mon comportement, mon égo, tout ça)
    Dommage c'était bien parti il y a quelques posts pourtant.

    Blague à part, je pense que pourquoi personne ne t'a jamais aidé sur ce projet est dû à la constante inconstance dont tu fais preuve. Tu mets des nouvelles features en prod sur un coup de tête, Vulkan / Pas Vulkan (10 fois au moins), payant puis pas payant, et puis maintenant le moteur va faire du rendu "cinéma" apparemment.

    Mets toi à la place d'un potentiel collaborateur, est-ce que tu aimerais travailler avec quelqu'un qui change tout, et ce chaque jour quasiment ? Avec un projet en plus qui n'est pas

    Et je rappelle encore une fois, que le but de ce topic, ainsi que de ton moteur, c'est de faire un jeu à la base.

    Tu as dis que tu voulais faire un remake de League of Legends tout ça parce que tu trouves que le matchmaking laisse parfois à désirer et qu'il lag sur ton pc ? Ce n'est absolument pas sérieux une seconde ni envisageable.

    Tu te plains souvent de ne pas avoir une équipe de 50 personnes, mais ça fait parti de ton travail à faire sur tous tes projets. Anticiper & répondre aux contraintes. Et si tu es doué, tu fais un projet en rapport avec tes moyens actuels, qu'ils soient pécuniers ou humains. Et si tu es très doué, tu peux transformer ces contraintes en forces. Exemple tout bête : si le personnage de Rayman n'a pas de bras, c'est parce qu'aucun des artistes ne savaient les animer à l'époque. Au final c'est devenu une marque de fabrique.

  8. #308
    Membre actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Novembre 2023
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Novembre 2023
    Messages : 266
    Par défaut Multitple-backend (#include et modules)
    Salut!

    Voilà j'ai fait 2 backends, un avec les #includes et un autre avec les modules, je vais enfin pour refaire l'exécutable de la démo!

  9. #309
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 264
    Billets dans le blog
    177
    Par défaut
    Je pense que ce genre de problématique ont reçu plusieurs solutions (plus ou moins bonne) et que c'est un problème qui certes, peut exister, mais qui connaît une réponse (et ce, avant même les modules). La première chose (et je ne peux pas dire que cela correspond à votre besoin), c'est le PIMPL.
    Aussi, vous semblez fan des std::deque et pourquoi pas. Toutefois, n'en n'ayant que rarement besoin, je suis étonné de vous en voir utiliser autant .

    Et peut être vous n'avez pas besoin que le type soit connu par le compilateur, pour votre en-tête : https://stackoverflow.com/questions/...or-a-stdvector


    Note : ma réponse peut ne pas convenir à votre problème, car je n'ai qu'une vision limitée de votre problème (la description que vous m'en donnez ).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  10. #310
    Membre actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Novembre 2023
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Novembre 2023
    Messages : 266
    Par défaut
    Salut, j'ai trouvé une solution merci! Maintenant mon moteur compile à la fois avec les modules c++20 (Enfin quand clang sera stable) et à la fois avec les #includes. Plus tard je rajouterai également un backend opengl et webgl mais ce n'est pas pour tout de suite.

  11. #311
    Membre actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Novembre 2023
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Novembre 2023
    Messages : 266
    Par défaut Article sur mon devblog. (c++20 modules)
    Voici un article sur mon devblog exposant les limities des includes, et comment les modules résolvent ce problème (jusqu'au crash du compilateur clang) :
    https://nargorengineodfaeg.wordpress...4xNzg1Nzc4MjUx

  12. #312
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 183
    Billets dans le blog
    4
    Par défaut
    Sans surprise, publier sur wordpress est au-delà de tes compétences. Tu n'as pas encore créer ton propre système bien mieux et facile d'utilisation que celui-ci ?

    D'ailleurs, pourquoi t'embêter avec Clang alors que tu devrais juste créer un compiler meilleur pour supporter ton moteur
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  13. #313
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 157
    Par défaut
    Le lien de Laurent7601 conduit à une page "A bright idea coming soon" qui propose de créer un site.
    Ce n'est pas du tout un blog.

    Où est l'article en question ?

  14. #314
    Membre actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Novembre 2023
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Novembre 2023
    Messages : 266
    Par défaut Le backend includes fonctionne!
    Voilà, j'ai enfin réussi à exécuter la démo avec le backend includes, j'ai été obligé car clang avec les modules est devenu HS. En fait, le problème c'était j'incluais les fichiers dans le mauvais fichier (.hpp au lieu de .cpp (code égénéré par l'IA pour double backend includes/modules)) Maintenant il ne me reste plus qu'à régler les soucis d'affichage avec la scène bistro (Maintenant que les soucis de performances sont enfin réglés, je pense que plus de 500 FPS pour bistor exterior sur une RTX 5070 TI, c'est correct, c'est beaucoup mieux que le < 1FPS que j'avais avant en tout cas)

    Nom : bistor.png
Affichages : 76
Taille : 243,1 Ko

    Pourtant je n'ai aucun soucis avec les modèles 3D de sketchfab...

    Nom : voiture_meshshaders.png
Affichages : 77
Taille : 97,9 Ko

    Bizarre, vraiment.

  15. #315
    Membre actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Novembre 2023
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Novembre 2023
    Messages : 266
    Par défaut
    Bon, j'ai résolu un problème, mes matrices de modèles n'étaient pas bonne, mais c'est bizarre que j'ai des meshs qui apparemment ne s'affichent pas, et que de plus, j'ai les lampes sous le sol ?!?

    Nom : bistro_ext.png
Affichages : 71
Taille : 248,2 Ko Si les indices seraient mauvais je crois que mes modèles sketechfab ne s'afficheraient pas correctement alors ça doit être la transformation des sommets lors du chargement des meshes qui n'est pas bonne ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    void ModelLoader::processMesh(math::Matrix4f world, aiMesh *mesh, const aiScene *scene, Mesh* mnode, entity::Model* model, bool loadTextures) {
                //world = world.transpose();
                //std::lock_guard<std::recursive_mutex> lock(getGlobalMutex());
                //std::cout<<"process mesh"<<std::endl;
                /*SubMesh subMesh(device);
     
                for (unsigned int i = 0; i < Material::NBTEXTYPES; i++)
                    subMesh.getMaterial().setTexture(nullptr, static_cast<Material::TexType>(i));*/
     
                //Color diffuseColor;                
                std::vector<Texture*> diffuseMaps, specularMaps, normalMaps, metalnessMaps, roughnessMaps, aoMaps, emissiveMaps;
                if(mesh->mMaterialIndex >= 0) {
                    //std::cout<<"load materials"<<std::endl;
     
     
                    aiMaterial *material = scene->mMaterials[mesh->mMaterialIndex];
                    /* aiColor4D color;
                    if (AI_SUCCESS == material->Get(AI_MATKEY_COLOR_DIFFUSE, color)) {
                        // color.r, color.g, color.b, color.a
                        diffuseColor.r = color.r;
                        diffuseColor.g = color.g;
                        diffuseColor.b = color.b;
                        diffuseColor.a = color.a;
                        //std::cout<<"color : "<<(int) diffuseColor.r<<std::endl;
                    }*/
                    if (loadTextures) {
                        //system("PAUSE");
                        diffuseMaps = loadMaterialTextures(scene, material,
                                                            aiTextureType_DIFFUSE);
                        for (unsigned int i = 0; i < diffuseMaps.size(); i++) {
                            diffuseMaps[i]->setTexType(entity::SubMesh::DIFFUSE);
                            //subMesh.getMaterial().setTexture(diffuseMaps[i], Material::DIFFUSE, i);
                        }
                        specularMaps = loadMaterialTextures(scene, material,
                                                            aiTextureType_SPECULAR);
                        for (unsigned int i = 0; i < specularMaps.size(); i++) {
                            specularMaps[i]->setTexType(entity::SubMesh::SPECULAR);
                            //subMesh.getMaterial().setTexture(specularMaps[i], Material::SPECULAR, i);
                        }
                        normalMaps = loadMaterialTextures(scene, material, aiTextureType_NORMALS);
                        for (unsigned int i = 0; i < normalMaps.size(); i++) {
                            //std::cout<<"normals"<<std::endl;
                            normalMaps[i]->setTexType(entity::SubMesh::NORMAL);
                            //subMesh.getMaterial().setTexture(normalMaps[i], Material::NORMAL,i);
                        }
                        metalnessMaps = loadMaterialTextures(scene, material, aiTextureType_METALNESS);
                        for (unsigned int i = 0; i < metalnessMaps.size(); i++) {
                            //std::cout<<"metalness"<<std::endl;
                            metalnessMaps[i]->setTexType(entity::SubMesh::METALNESS);
                            //subMesh.getMaterial().setTexture(metalnessMaps[i], Material::METALNESS, i);
                        }
                        roughnessMaps = loadMaterialTextures(scene, material, aiTextureType_DIFFUSE_ROUGHNESS);
                        for (unsigned int i = 0; i < roughnessMaps.size(); i++) {
                            //std::cout<<"roughness"<<std::endl;
                            roughnessMaps[i]->setTexType(entity::SubMesh::ROUGHNESS);
                            //subMesh.getMaterial().setTexture(roughnessMaps[i], Material::ROUGHNESS, i);
                        }
                        aoMaps = loadMaterialTextures(scene, material, aiTextureType_AMBIENT_OCCLUSION);
                        for (unsigned int i = 0; i < aoMaps.size(); i++) {
                            //std::cout<<"ao"<<std::endl;
                            aoMaps[i]->setTexType(entity::SubMesh::AO);
                            //subMesh.getMaterial().setTexture(aoMaps[i], Material::AO, i);
                        }
                        emissiveMaps = loadMaterialTextures(scene, material, aiTextureType_EMISSIVE);
                        for (unsigned int i = 0; i < emissiveMaps.size(); i++) {
                            //std::cout<<"emissive"<<std::endl;
                            emissiveMaps[i]->setTexType(entity::SubMesh::EMISSIVE);
                            //subMesh.getMaterial().setTexture(emissiveMaps[i], Material::EMISSIVE, i);
                        }
                    }
     
                }
     
                int upAxis = 1;
                int upSign = 1;
                int frontAxis = 2;    // default Z-forward
                int frontSign = 1;
                int coordAxis = 0;    // default X-right
                int coordSign = 1;
                if (scene->mMetaData) {
                    /*for (unsigned int i = 0; i < scene->mMetaData->mNumProperties; ++i) {
                       std::cout << scene->mMetaData->mKeys[i].C_Str() << std::endl;
                    }*/
                    scene->mMetaData->Get("UpAxis", upAxis);
                    scene->mMetaData->Get("UpAxisSign", upSign);
                    scene->mMetaData->Get("FrontAxis", frontAxis);
                    scene->mMetaData->Get("FrontAxisSign", frontSign);
                    scene->mMetaData->Get("CoordAxis", coordAxis);
                    scene->mMetaData->Get("CoordAxisSign", coordSign);
                }
                enum Axis { X = 0, Y = 1, Z = 2 };
                Axis sceneUpAxis    = (Axis)upAxis;
                Axis sceneFrontAxis = (Axis)frontAxis;
                Axis sceneCoordAxis = (Axis)coordAxis;
                int sceneUpSign     = upSign;
                int sceneFrontSign  = frontSign;
                int sceneCoordSign  = coordSign;
                bool isLeftHandled = false;
                float det = world.getDet();
                bool isLeftHanded = false;
                if (det < 0.0f) {
                    //std::cout<<"left handed!"<<std::endl;
                    isLeftHanded = true;
                }
                math::TransformMatrix axisCorrection, handednessCorrection, scaleCorrection;
                axisCorrection.reset();
                handednessCorrection.reset();
                scaleCorrection.reset();
                math::TransformMatrix  zUpyUp;
                zUpyUp.reset();
                // 1. Correction UP (Z-up → Y-up)
                if (sceneUpAxis == Axis::Z) {
                    //std::cout<<"up axis rotation"<<std::endl;
                    zUpyUp.setRotation(math::Vec3f(1.f,0.f,0.f), -90.f);
                }
                // 2. Correction FRONT (Y-forward → -Z-forward)
                if (sceneFrontAxis == Axis::Y) {
                    //std::cout<<"front axis rotation"<<std::endl;
                    axisCorrection.setRotation(math::Vec3f(0.f,0.f,1.f), 180.f);
                }
     
                axisCorrection.combine(zUpyUp.getMatrix());
     
                // 3. Correction handedness
                if (isLeftHanded) {
                    axisCorrection.setScale(math::Vec3f(1.f,1.f,-1.f));
                }
                //std::cout<<"materials loaded : "<<mat.getTexture()<<std::endl;
                std::vector<entity::Vertex> vertices;
                vertices.resize(mesh->mNumVertices);
                /*unsigned int uvCount = 0;
                for (unsigned int i = 0; i < AI_MAX_NUMBER_OF_TEXTURECOORDS; i++) {
                    if (mesh->mTextureCoords[i] != nullptr)
                        uvCount++;
                }
                std::cout<<"nb uvs : "<<uvCount<<std::endl;*/
                for (unsigned int i = 0; i < mesh->mNumVertices; i++)
                {
                    setVertexBoneDataToDefault(vertices[i]);
                    vertices[i].position[0] = mesh->mVertices[i].x;
                    vertices[i].position[1] = mesh->mVertices[i].y;
                    vertices[i].position[2] = mesh->mVertices[i].z;
                    if (mesh->mTextureCoords[0])
                    {
                        vertices[i].texCoords[0] = mesh->mTextureCoords[0][i].x/* * mat.getTexture()->getSize().x()*/;
                        vertices[i].texCoords[1] = mesh->mTextureCoords[0][i].y/* * mat.getTexture()->getSize().y()*/;
                        /*if (vertices[i].texCoords[0] == 0 && vertices[i].texCoords[1] == 0) {
                            std::cout<<"error!"<<std::endl;
                        }*/
                        /*std::cout<<"tex coords : "<<vertices[i].texCoords[0]<<std::endl;
                        std::cout<<"tex coords : "<<vertices[i].texCoords[1]<<std::endl;*/
                    } else {
                        vertices[i].texCoords = math::Vec2f(0.f, 0.f);
                    }
                    vertices[i].normal[0] = mesh->mNormals[i].x;
                    vertices[i].normal[1] = mesh->mNormals[i].y;
                    vertices[i].normal[2] = mesh->mNormals[i].z;
                    vertices[i].color = entity::Color::White;
                }
                extractBoneWeightForVertices(vertices, mesh, scene, model);
                /*VertexBuffer vb(device, Triangles);
                for (unsigned int i = 0; i < vertices.size(); i++) {
                    //std::cout<<"add vertex"<<std::endl;
                    vb.append(vertices[i]);
                }
                physic::BoundingBox bounds = vb.getBounds();*/
     
                /*if (bounds.getSize().x() > 1000 && bounds.getSize().y() > 1000 && bounds.getSize().z() > 1000) {
                    //std::cout<<"scale correction."<<std::endl;
                    scaleCorrection.setScale(math::Vec3f(0.01f, 0.01f, 0.01f));
                }
                math::Matrix4f finalCorrection = scaleCorrection.getMatrix() *
                                                axisCorrection.getMatrix() *
                                                handednessCorrection.getMatrix();
                math::Matrix4f finalTransform = world * finalCorrection;
                //std::cout<<"final transform : "<<finalTransform<<std::endl;
                if (!isSkinned) {
                    for (unsigned int i = 0; i < vb.getVertexCount(); i++) {
                        vb[i].position = finalTransform * vb[i].position;
                        vb[i].normal = finalCorrection * -vb[i].normal;
                        //std::cout<<"vertex position : "<<vb[i].position<<std::endl;
                    }
                }*/
                std::vector<uint32_t> indexes;
                /*entity::VertexArray va(entity::Triangles) ;          
                unsigned int baseIndex = 0;*/
                for(unsigned int i = 0; i < mesh->mNumFaces; i++)
                {
                    aiFace face = mesh->mFaces[i];
                    //std::cout<<"add face : "<<face.mNumIndices<<std::endl;
     
                    for(unsigned int j = 0; j < face.mNumIndices; j++) {
                        indexes.push_back(face.mIndices[j]);
                        //std::cout<<"index : "<<face.mIndices[j]<<std::endl;
                        /*va.append(vertices[face.mIndices[j]]);                    
                        va.addIndex(va.getVertexCount()-1);*/
                    }
                    //baseIndex += face.mNumIndices;
                }
     
                /*math::Vec3f center = vb.getBounds().getCenter();
                math::Vec3f worldPos = finalTransform * center;
     
                std::cout << "Mesh world pos = " << worldPos << std::endl;*/
                //std::cout<<"vertices loaded"<<std::endl;
                //model->setSize(vb.getBounds().getSize());
     
     
     
                //std::cout<<"bone loaded"<<std::endl;
     
     
     
     
                //std::cout<<"vertices : "<<vb.getVertexCount()<<std::endl;
                //std::cout<<"indexes : "<<vb.getIndexCount()<<std::endl;
                /*if (mat.getTexture() == nullptr) {
                    std::cout<<"material id : "<<mat.getId()<<std::endl;
                } else {
                    //std::cout<<"texture"<<std::endl;
                }*/
     
                //math::Vec3f currentSize = model->getSize();
                //if (!device.areMeshShadersSupported()) {
                    entity::SubMesh subMesh;
                    Material* material = new Material();
                    for (unsigned int i = 0; i < entity::SubMesh::NBTEXTYPES; i++)
                        material->setTexture(nullptr, static_cast<entity::SubMesh::TexType>(i));
                    for (unsigned int i = 0; i < diffuseMaps.size(); i++) {
                        //diffuseMaps[i]->setTexType(Material::DIFFUSE);
                        //std::cout<<"diffuse : "<<diffuseMaps[i]->getId()<<std::endl;
                        material->setTexture(diffuseMaps[i], entity::SubMesh::DIFFUSE, i);
                    }
                    for (unsigned int i = 0; i < specularMaps.size(); i++) {
                        //specularMaps[i]->setTexType(Material::SPECULAR);
                        material->setTexture(specularMaps[i], entity::SubMesh::SPECULAR, i);
                    }
                    for (unsigned int i = 0; i < normalMaps.size(); i++) {
                        //std::cout<<"normals"<<std::endl;
                        //normalMaps[i]->setTexType(Material::NORMAL);
                        //std::cout<<"specular : "<<specularMaps[i]->getId()<<std::endl;
                        material->setTexture(normalMaps[i], entity::SubMesh::NORMAL,i);
                    }                
                    for (unsigned int i = 0; i < metalnessMaps.size(); i++) {
                        //std::cout<<"metalness"<<std::endl;
                        //metalnessMaps[i]->setTexType(Material::METALNESS);
                        material->setTexture(metalnessMaps[i], entity::SubMesh::METALNESS, i);
                    }                
                    for (unsigned int i = 0; i < roughnessMaps.size(); i++) {
                        //std::cout<<"roughness"<<std::endl;
                        //roughnessMaps[i]->setTexType(Material::ROUGHNESS);
                        material->setTexture(roughnessMaps[i], entity::SubMesh::ROUGHNESS, i);
                    }                
                    for (unsigned int i = 0; i < aoMaps.size(); i++) {
                        //std::cout<<"ao"<<std::endl;
                        //aoMaps[i]->setTexType(Material::AO);
                        material->setTexture(aoMaps[i], entity::SubMesh::AO, i);
                    }                
                    for (unsigned int i = 0; i < emissiveMaps.size(); i++) {
                        //std::cout<<"emissive"<<std::endl;
                        //emissiveMaps[i]->setTexType(Material::EMISSIVE);
                        material->setTexture(emissiveMaps[i], entity::SubMesh::EMISSIVE, i);
                    }
                    entity::VertexArray va(entity::PrimitiveType::Triangles);
                    va.resize(vertices.size(), indexes.size());
                    for (unsigned int i = 0; i < vertices.size(); i++) {  
                        va[i] = vertices[i];
                    }
                    for (unsigned int i = 0; i < indexes.size(); i++) {
                        va.setIndex(i, indexes[i]);
                    }
     
                    physic::BoundingBox bounds = va.getBounds();
                    //std::cout<<"bounds : "<<bounds.getSize()<<std::endl;
                    if (bounds.getSize().x() > 1000 && bounds.getSize().y() > 1000 && bounds.getSize().z() > 1000) {
                        //std::cout<<"scale correction."<<std::endl;
                        scaleCorrection.setScale(math::Vec3f(0.01f, 0.01f, 0.01f));
                    }
                    math::Matrix4f finalCorrection = scaleCorrection.getMatrix() *
                                                    axisCorrection.getMatrix() *
                                                    handednessCorrection.getMatrix();
                    math::Matrix4f finalTransform = world * finalCorrection;
                    //std::cout<<"final transform : "<<finalTransform<<std::endl;
     
     
                    if (!isSkinned) {
                        for (unsigned int i = 0; i < va.getVertexCount(); i++) {
                            va[i].position = finalTransform * va[i].position;
                            va[i].normal = finalCorrection * -va[i].normal;
                            //std::cout<<"vertex position : "<<vb[i].position<<std::endl;
                        }
                    }

  16. #316
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 631
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 631
    Par défaut
    franchement faudrait tout refaire sur un papier voire avec UML la conception et l'architecture du projet !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    std::vector<Texture*> diffuseMaps, specularMaps, normalMaps, metalnessMaps, roughnessMaps, aoMaps, emissiveMaps;
    pourquoi 7 conteneurs ? .Est-ce vraiment utile ?
    C'est pas possible de créer une classe ou une structure CTexture avec comme membres diffusemaps etc..? Qu'est-ce que c'est diffusemaps ? Des vecteurs 3d ?
    Faut pas s'étonner si le projet ça rame...parce que rien qu'en utilisant 7 conteneurs std::vector ça fait au moins 7 itérations.
    Donc sur une centaine d'objets 3d ça fait beaucoup de boucles.
    ensuite c'est pas possible de créer une toute bête classe CStaticObject qui encapsule les polygones,les sommets,les triangulations,les normales des facettes ainsi que les textures ?
    Encore une fois faudrait revoir le projet et faire du refactoring

  17. #317
    Membre actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Novembre 2023
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Novembre 2023
    Messages : 266
    Par défaut bug d'affichage avec bistro résolu!
    Salut! J'ai trouvé, pourquoi j'avais des bugs d'affichage (des trous) : bistro est en left-handed, odfaeg est en right-handed, j'ai donc dû faire une conversion ! Voilà ce que ça donne maintenant : (Sans calcul d'éclairage)

    Nom : bistro_ext.png
Affichages : 55
Taille : 197,2 Ko

  18. #318
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 264
    Billets dans le blog
    177
    Par défaut
    On peut avoir une nouvelle capture de la voiture (Asphalt), car depuis le début, la texture est à l'envers .
    Sinon, vous ne pourriez pas déplacer la caméra pour faire des captures de bistrot moins au ras du sol .
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  19. #319
    Membre actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Novembre 2023
    Messages
    266
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Novembre 2023
    Messages : 266
    Par défaut
    Bonjour! Oui j'y avais pensé d'utiliser mon système d'inputs pour déplacer la caméra, parce que là en effet elle est au raz du sol. J'en ai chié avec les matrices et les conventions. (row/column major, ordre de multiplication, système d'axes (left/right handed), etc...) Je n'avançais pas juste à cause de cela et encore, je dois encore déplacer la cam pour voir si le rendu est bon partout. J'ai corrigé unbug d'alignement GPU dans mes shaders, ainsi qu'un bug CPU pour les matériaux : la plaque de la voiture ne s'affichait plus il ne sélectionnait pas le bon matériaux pour mes meshs. Voici ce que ça donne (vue de profil) : Nom : voiture.png
Affichages : 52
Taille : 37,2 Ko

    En tout cas les roues s'affichent maintenant, chose que je n'avais pas avant. Pour la texture à l'envers que tu as mentionné, je vois pas très bien ou...

    Nom : voiture_face.png
Affichages : 50
Taille : 37,7 Ko

    PS : FPS + bas car je suis en debug.

  20. #320
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 264
    Billets dans le blog
    177
    Par défaut
    Le texte sur la plaque d'immatriculation, c'est Asphalt 8 (et un sous texte que j'ai oublié ou que je n'arrive pas à lire). C'est un jeu mobile : https://www.fr.gameloft.com/game/asphalt-8
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

Discussions similaires

  1. MANU, un nouveau moteur de jeux vidéo ne nécessitant pas de code
    Par LittleWhite dans le forum Développement 2D, 3D et Jeux
    Réponses: 10
    Dernier message: 12/04/2020, 14h53
  2. Intrinsic : un nouveau moteur de jeux open source basé sur Vulkan
    Par LittleWhite dans le forum Développement 2D, 3D et Jeux
    Réponses: 18
    Dernier message: 23/11/2016, 11h09
  3. Un nouveau moteur de jeux vidéo voit le jour : Lumberyard, développé par Amazon
    Par LittleWhite dans le forum Développement 2D, 3D et Jeux
    Réponses: 6
    Dernier message: 11/02/2016, 15h02
  4. Paladin : un nouveau projet de moteur de jeux par la communauté Mozilla.
    Par LittleWhite dans le forum Développement 2D, 3D et Jeux
    Réponses: 19
    Dernier message: 09/09/2011, 12h40
  5. Creer un nouveau moteur de jeux
    Par khenissi dans le forum Moteurs de jeux vidéo
    Réponses: 4
    Dernier message: 28/07/2010, 14h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo