Bonsoir,
J'ai trouvé un code de perlin noise qui génère une heightmap, mais écrit en C et qui utilise la SDL.
J'aimerais l'ajouter à mon code C++ et ouvrir la heightmap avec les fonctions d'Irrlicht qui gèrent cela.
Je pense avoir compris comment interfacer, tout est bien linker, mais mon problème se situe au niveau de la fonction "enregistrer_bmp(..)" (perlin.c),
à la compilation Code::Blocks m'annonce 7 erreur de type "dereferencing pointer to incomplete type" sur les lignes contenant "c->taille".
Lorsque je compile le code dans un projet à part uniquement en C, aucun problème ...
Quelqu'un pourrait-il m'expliquer ce qui ne va pas ? Comment puis-je régler ça ?
D'avance, merci !
(Désolé pour la longueur du post ... )
main.cpp
perlin.h
perlin.c
perlin_calque.h
perlin_calque.c
Dernière modification par ovni007 (14-05-2015 20:57:37)
Hors ligne
plop!
test en remplacant simplement "struct calque *c" par "calque *c"
ça dépend comment le compilateur gère le truc sous windows, il est possible qu'il compile en c++ et non en c sur le dit fichier
dans ce cas extern "C" peut posé soucis, soit l'ajouter dans le .c ou le retirér dans le .h
bug connue, je l'avais reporter a l'époque
question:
esque tu a beusoin d'enregistrer l'image ?
pourquoi ne pas le porter sur l'api d'irrlicht en entier ? (je peut t'aider)
library peut-être plus approprier et surtout avec d'avantage de fonctionnaliter, plus rapide, ... etc http://sourceforge.net/projects/noisepp/
j'ai developpez une appli via irrlicht/noisepp pour généré des heightmap+colormap+splatmap*2
si ça te botte, je peut compiller ça pour windows
http://immortalgalaxy.free.fr//media/pr … 0%20PM.png
Hors ligne
Salut !
J'ai tenté de remplaçer "struct calque *c" par "calque *c", et j'ai encore les mêmes erreurs + d'autres dans "perlinNoise()".
Oui, j'aurais aimé garder l'image pour pouvoir l'utiliser en temps que "mini-carte" pour me repérer dans le jeu.
J'ai jeté un oeil au lien (noisepp), mais je ne comprends pas trop comment l'utiliser (je suis encore débutant dans le milieu).
Est-ce que la colormap permet d'appliquer une texture directement au terrain généré ?
Car j'aurais aimé appliquer des textures de neige, d'herbe, et de terre en fonction de la hauteur.
Par contre je ne sais pas du tout ce qu'est une splatmap ? ^^'
Hors ligne
bon très bien, j'ai regarder un peut mieux, il ce peut qu'il manque
dans perlin.c
la colormap non, comme sont nom l'indique elle est utiliser pour colorier ton terrain
exemple tu veut de la neige rouge, vert, bleu ? mais t'est limiter en nombre de texture, tu passe par une colormap
et donc avec une une texture comme le sable, ou la neige peuvent être la même en jouant sur la couleur
la splatmap par contre elle est utiliser pour déterminer qu'elle texture appliquer
par exemple tu vas crée un shader pour appliquer la texture[i] au calque rouge, texture[i+n] au calque alpha a partir de la texture[0] ou d'un algorithme(admettons)
l'intéré premier c'est déjà d'avoir un bien meilleur resolution de t'est texture, puis de pouvoir faire des animations, si tu devait faire une seul texture tu serait limiter par la mémoire
(opengl ne supporte pas les textures > 32768*32768, il faut passer par un splatshader, un(e) texture atlas, ou un(e) sparse texture)
si tu veut aller plus loin le splatshader est simple a mêtre en place, et tu peut le coupler avec un(e) texture2Darray pour dépasser la limit de texture d'irrlicht (8 contre 4000)
en ce qui concerne noisepp il a quelque exmple sur github
https://github.com/slowriot/noisepp/blo … e/main.cpp
https://github.com/slowriot/noisepp/blo … 5/main.cpp
si tu te dirige vers cette biblihotheque, je t'informerais d'avantage
edit:
euh .... bon je regarderais plus sérieusement demain soir j'ai a faire
Dernière modification par Magun (15-05-2015 22:38:56)
Hors ligne
bon, et bien c'était bien ton calque.h (que tu n'avais pas poster) je les remplacer par perlin_calque.h
ensuite perlin.h et perlin_calque.h
#ifdef __cplusplus extern "C" { ... #ifdef __cplusplus } #endif #endif
ne serait-il pas plus judicieux de mettre le premier endif après le << externe "C" { >> ?
cordialement
Hors ligne
Bonjour,
Désolé pour le retard. En effet, j'ai remarqué que j'avais oublié de changer le calque.h en perlin_calque.h ( Quand on copie-colle d'un projet à un autre, voilà ce que ça donne ^^).
J'ai également tenté de changer le #endif comme tu me l'as dis, et là ça compile sans problème !
Seulement ... le programme ne passe plus du tout par les fonctions de perlin noise et aucune image n'est créée.
C'est la première fois que je tente d'interfacer du c avec du c++, donc je fais probablement des erreurs.
Merci de ton attention ! :-)
Dernière modification par ovni007 (19-05-2015 01:29:34)
Hors ligne
désolé coupure internet, depuis hier
que veut tu dire par <<le programme ne passe plus du tout par les fonctions...>> ?
commence par tracer t'est apelle de fonction peut-être ? par un debugeur ou simplement des printf ...
interfacer du c avec du c++
a vrais dire rien de t'oblige a t'embêter à mixer c et c++
les bibliothèque externe ecrite en c font déjà "l'interfaçage" (le cas échéans un <<externe "C">> l'or de l'include)
tu peut tout a fait écrire directement en c++ et le code est retrocompatible
il n'est alors nécéssaire que de renommer t'est ficher *.c en *..cpp
Hors ligne