> Tous les forums > Forum Autres langages
 Affichage fichier .vrml sous BorlandSujet résolu
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
Ptite Développeuse
  Posté le 29/03/2006 @ 11:45 
Aller en bas de la page 
Nouvelle astucienne
Bonjour à tous, Je recherche un moyen d'afficher une image .vrml dans une application Borland c++Builder6. Merci d'avance
Publicité
breizhbugs
 Posté le 29/03/2006 à 12:13 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien
Salut, J'ai trouvé ca, et notamment la partie "programmation d'un moteur 3d..." http://rvirtual.free.fr/programmation/program.htm
Ptite Développeuse
 Posté le 29/03/2006 à 13:55 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Nouvelle astucienne
C'est gentil mais en fait je recherche un moyen gratuit et qu'il est possible de commercialiser par la suite
koala01
 Posté le 01/04/2006 à 16:57 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien
Salut, Un fichier vrml n'est à vrai dire qu'un fichier texte (si, si, je te jure, essaie de l'ouvrir avec notepad pour t'en convaincre) Il faut en plus savoir que le vrml est intégré dans les recommandations du W3C (meme si, actuellement aucun navigateur ne le supporte de manière native), et qu'il suit donc des regle précises pour sa synthaxe… En gros, on peut indiquer que: -la première ligne doit etre #VRML(numero de version)(type de codage) -les lignes commencant par # sont des commentaires -les lignes commencant par DEF définissent le nom de ce qui est définit juste apres - il fournit d'abord un "materiel" (différentes valeurs pour les effets de couleurs utilisées) qui se compose de
  • la couleur diffuse (la couleur de la surface) en codage RGB avec des valeurs réelles allant de 0 à 1
  • la couleur "spéculaire" (la couleur qui est renvoyée par la source lumineuse, qui fait un "point" sur l'objet) en codage RGB utilisant des valeurs réelles allant de 0 à 1
  • la brillance (la capacité d'envoyer lui meme de la lumière sur les autres objet) en valeur réelle allant de 0 à 1
  • la transparence (la possibilité donnée de voir ce qu'il y a derrière l'objet) en valeur réelle allant de 0 à 1
-il définit les objets, en leur donnant un nom (une ligne DEF), suivi de certains termes (separator{, coordonate3 {) et fournis une liste de point en coordonnées spatiales (coordonnée X, Y et Z en valeur réelles signées) -Apres la liste des points qui composent l'objet, il définit les faces visibles en fonction des points sous la forme de
  • USE (nom d'un matériel définit)
  • IndexedFaceSet {
  • coordIndex [
  • liste des vertex (points dont on vient de parler) à relier pour créer la face,en terminant par -1
-Apres avoir définit les matériaux et les points, il peut définirs certains objets "invisibles" (caméra, représentant l'oeil au début du visionnement, les sources de lumières etc) Sachant cela, il devient "relativement" facile de créer un "parser" (un lecteur du fichier) qui engrangerait toutes les informations [clindoeil] Il pourrait, par exemple, etre composé des classes
  • lecteur: un point d'acces en lecture du fichier wrl
  • couleur: une classe de base récupérant les couleurs RGB
  • matériel: une définition du matériel comportant
    • un élément "couleur" diffuse
    • une élément "couleur" spéculaire
    • un réel brillance
    • un réel transparence
  • point: une classe de base reprenant les coordonnées spatiale des points (x, y et z)
  • face: récupérant la liste des points pour faire une face
  • objet: permettant de garder toutes les informations concertant un objet et contenant
    • un vecteur ou une liste de type point
    • un vecteur ou une liste de type face
    • un rappel du materiel utilisé de type materiel
  • complet: qui garde l'ensemble des informations du fichier (les matériaux et les objets) et constitué de
    • un vecteur ou une liste de type materiel (permettant de garder tous les matériaux utilisés dans le fichier)
    • un vecteur ou une liste de type objet (permettant degarder l'ensemble des objets définis dans le fichier)
La librairie STL devrait te permettre de créer tout cela assez rapidement [clindoeil] Evidemment, c'est là l'idée que je m'en fait (et sur laquelle je suis parti pour un usage à ma facon), et il faut prévoir encore les méthodes qui t'intéresseront… et il est possible que tu préfères organiser les choses différemment [clindoeil] J'ai, moi meme, cherché une librairie qui permettrait de se passer de cette création perso, mais n'en ai pas trouvé… alors, si tu venais à en trouver une, je te serais reconnaissant de le ma présenter [clindoeil]

Modifié par koala01 le 01/04/2006 16:59
koala01
 Posté le 05/04/2006 à 14:16 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien
Voilà… Je suis loin de prétendre que ce que je vais te fournir est complet, tout à fait débugé, ni quoi que ce soit dans le genre, mais j'ai mis en ligne, spécialement à ton intention, une version de la librairie que je suis occupé à mettre au point… Attention, cette librairie en est encore au stade expérimental, et se contente de récupérer les informations fournies dans le fichier wrl que tu fournis… Elle n'en gere pas l'affichage, et ne gère pas encore la lecture d'objet prédéfinis tels que les spheres, cubes et autres… Elle est donc, dans l'état actuel des choses, extrèmement limitée (lis attentivement le fichier README.txt), mais elle devrait te permettre de partir sur des bases relativement saines… Tu la trouvera sur http://koala01.free.fr/wrlparser .

Modifié par koala01 le 05/04/2006 14:17
Ptite Développeuse
 Posté le 05/04/2006 à 14:26 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Nouvelle astucienne
Merci beaucoup je vais essayer de décrypter tout ça ! [bigsmile]
breizhbugs
 Posté le 05/04/2006 à 17:36 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien
Salut koala, ptite developpeuse... J'ai vaguement regarder ton code source koala et j'ai remarqué que tu ne fais aucune verification sur le format de ce que tu es en train de lire, cad tu ne verifie pas si tu lis un double qu'il est bien formé, idem pour un identifiant, si le nombre d'argument d'un materiau est correcte...
koala01
 Posté le 05/04/2006 à 22:21 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien
Je n'en ai pas vraiment besoin… (au passage, je lis ici principalement des entiers et des réels [clindoeil]) L'operateur >> est de toutes manière fortement typé: si tu fournis une valeur qui ne correspond pas au type que tu es sensé lire, il ne prendra rien… Par exemple, i tu utilise un entier et ce que tu lui demande de lire est une chaine de caractères, la lecture n'aura purement et simplement pas lieu… Dans un fichier wrl, tu trouveras principalement:
  • Des chaines de caractères
  • des entiers
  • des réels
J'ai effectivement surchargé l'opérateur >> pour la grosse partie des types de bases, mais je n'utilise du coup que la string STL le réel et l'entier, et, dans l'état actuel des choses, il n'y a pas de problème à craindre si le fichier vrml est correct… D'un autre coté, je te dirais qu'il est relativement difficle de faire des tests plus précis sur la lecture du fichier, principalement parce qu'une grosse partie des lectures s'effectue dans les constructeurs… Je sais bien que tu me diras que try{}, catch() et throw sont faits pour… mais, d'une certaine manière, comme la classe CReader n'est qu'une abstraction des ifstream de la STL, et que la STL est déjà correctement sécurisée à ce niveau, je ne prend pas énormément de risques à ne pas pousser les tests trop loin [clindoeil] Comme je l'ai indiqué, en outre, cette librairie n'est encore qu'au stade expériemental, et, à ce jour, principalement basée sur les fichiers vrml que l'on obtient avec la fonction d'exportation de Blender… Par contre, en y regardant à deux fois, je me suis effectivement rendu compte d'une légère inconsistance… Elle se trouve dans la classe CObjet (cobjet.h et cobjet.cpp). Le prototype
bool CObjet::LisFace(std::vector<CPoint *>&point, CReader &lecteur)
pourrait avantageusement etre remplacé par
bool CObjet::LisFace(CReader &lecteur)
du fait qu'il y a bel et bien un membre de type std::vector<CPoint *> dans la classe CObjet (et que c'est ce membre qui doit etre utilisé)[clindoeil] Maintenant, si tu estimes intéressant (préférable) de sécuriser le typage des données, on peut en discuter[clindoeil]

Modifié par koala01 le 06/04/2006 03:56
koala01
 Posté le 06/04/2006 à 03:43 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien
Je suis désolé Ptite Développeuse, mais j'ai apporté quelques modifications (dont certaines étaient indispensables) à la librairie… Il y avait, entre autre des tests qui étaient erronés, mais aussi d'autres erreurs importantes… Ceci dit, avec la librairie telle qu'elle est actuellement, je suis parfaitement arrivé à faire afficher le contenu d'un fichier wrl complet sous openGL [clindoeil] La prochaine étape sera donc de voir s'il y a moyen de lui faire reconnaitre tous les objets (y compris les objets cachés) et les objets prédéfinis (cubes, spheres, etc), pour autant que cela reste compatible VRML1 (ou alors, on passera à un wrlparser97[clindoeil]) Je te conseille donc de prendre la mise à jour que je viens de mettre en ligne

Modifié par koala01 le 06/04/2006 03:48
Publicité
Ptite Développeuse
 Posté le 06/04/2006 à 09:27 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Nouvelle astucienne
c'est cool, je pense me pencher dessus la semaine prochaine si tout va bien, et si j'ai des questions, je sais où te trouver ([clindoeil]). Merci
breizhbugs
 Posté le 06/04/2006 à 18:26 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien
koala01 a écrit : Maintenant, si tu estimes intéressant (préférable) de sécuriser le typage des données, on peut en discuter[clindoeil]
Salut, En fait du peu de cours que j'ai retenu sur les grammaires et les parsers, c'est d'abord de faire un "accepteur", cad de faire un programme capable de dire si oui ou nom un fichier suit la grammaire. Or tu n'as aucun controle d'erreur donc si il manque une donnée dans le fichier, comment se comporte le programme final? (En fait 1- j'aurais plutot fais cela en C car endant les cours on organisait l'analyse de facon a obtenir des fonctions et non des objets et 2- je maitrise assez mal les flux.)
koala01
 Posté le 06/04/2006 à 20:16 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien
La STL est théoriquement déjà suffisemment sécurisée, et la lecture de flux l'utilise essentiellement, ainsi que je le disais plus haut, mais, à la réflexion, je me suis effectivement ralié à l'idée… et suis, du coup, occupé à réorganiser les choses dans cette optique (et pour une plus grande "portabilité" du code)… Pour répondre à ta remarque, que tu l'aurais plutot fait en C qu'en C++, j'aurais personnellement tendance à dire que, bien qu'en période d'apprentissage il est plus facile d'apprendre un langage "non orienté objet", principalement pour ne pas rajouter la nécessité de comprendre des concepts supplémentaires propre à l'orienté objet), le fait de travailler avec un langage orienté objet présente, entre autres, l'avantage d'être plus "pérène"… On se rend en effet compte que, si le traitement peut évoluer énormément dans le temps, les structures des différentes données évoluent beaucoup moins, et sont d'ailleurs généralement beaucoup plus portables d'un programme à un autre… Finalement, que ce soit pour toi, pour moi ou pour un illustre inconnu, si je dois créer quelque chose qui permet de gérer les contacts, les clients, les fournisseurs ou quoi que ce soit de similaire, je me retrouverai systématiquement avec une structure de type nom, prénom, adresse, telephone, qui sera systématiquement gérée de manière similaire, et à laquelle viendront se greffer (le cas échéant) d'autres informations (N° TVA, "en cours", "du", condition de payement etc) qui auront leur gestion propre, mais qui ne m'empechent absolument pas de récupérer la structure de base… Cette "réutilisabilité" et cette pérénité de l'orienté objet incite énormément, pour autant que tu en comprennes "l'essence" à l'utiliser de préférence au langage "séquentiel"… Enfin, concernant les opérateurs de flux (<< et >>, en C++), il faut savoir que, en C (pur, car cin et cout n'existent pas en c), on utilise des fonctions qui font appel à une information de formattage (les fameux %d,%c etc) et à un pointeur, mais qu'aucun controle n'est effectué entre la taille prise en mémoire et celle de la donnée réellement obtenue (un entier prenant, la place de 2 à 4 caractères, selon le compilateur) Par contre, les opérateurs de flux vérifient d'eux meme si l'information obtenue correspond au type de donnée attendu… Si tu prévois de prendre un caractère, les 255 caractères de la table ASCII sont acceptés, mais, si tu prévois de prendre un entier ou un réel, les seuls caractères admis seront des caractères numériques (0 à 9), et, éventuellement, le point (la virgule francophone) et le tirait (-) Si le début de la "chaine" obtenue correspond au type attendu, les informations sont admises, mais, dés qu'un caractère ne correspond plus, le reste est rejeté (toute la chaine peut donc etre rejetée s'il se fait que meme le premier caractère ne correspond pas) Si donc, dans ma classe CReader, je fais un Fichier>>entier la saisie s'arretera d'office dés qu'un caractère ne correspondra plus à ce que l'on attend d'un entier (le point, la virgule, l'espace, les lettres de l'alphabet). Dans la version actuelle, je prend effectivement un léger risque dans le sens où, quand j'appelle le constructeur d'un point, je m'attend à trouver un réel, et que, si le premier caractère pris est une lettre, mon constructeur initialisera la valeur à … ce qui reste dans la mémoire (autrement dit à une donnée incohérente), mais il n'y a aucun risque de déborder de la mémoire [clindoeil]

Modifié par koala01 le 06/04/2006 20:20
breizhbugs
 Posté le 06/04/2006 à 22:46 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien
Koala->MP
Ptite Développeuse
 Posté le 18/04/2006 à 10:12 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Nouvelle astucienne
Bon en fait j'ai trouvé donc pour ceux et celles qui sont intéressés : tout d'abord, il faut télécharger un plugin vrml pour pouvoir lire les fichiers .wrl dans le navigateur web. Ensuite il faut poser un composant TCppWebBrowser et à l'ouverture de la fiche écrire : [code]CppWebBrowser1->Navigate((WideString)"C:\\chemin\\nomFichier.html");[/code] et dans ce fichier html : [code]<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML> <HEAD> <TITLE> Untitled1.html </TITLE> </HEAD> <BODY> <OBJECT data="nomImage.wrl" width="200" height="200"> </BODY> </HTML>[/code] et voilà ! Merci quand même à tous ceux qui ont voulu m'aider [hello]
koala01
 Posté le 18/04/2006 à 14:03 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien
Une simple petite question… Avec le plugin installé chez toi, cela fonctionne correctement, je n'en doute pas… Mais qu'en est il de ton application si tu la présente à quelqu'un qui n'a pas le plugin vrml installé [question] Ou bien il te faudra prévoire l'installation automatique du plugin, ou bien il faudra signaler à l'utilisateur qu'il doit aller le récupérer et l'installer, non [question] D'ailleurs (je n'ai pas vérifié, c'est pour cela que je pose la question) la license du plugin permet-t-elle de le distribuer avec une application [question] (le langage est un standard libre, cela ne veut malheureusement pas dire que le plugin soit libre de distribution [langue]) De plus, ne trouves-tu pas domage de devoir passer par une page HTML pour l'afficher, alors que, dans un navigateur qui dispose du plugin, il est possible de l'afficher sans cela [question] (à moins que cela fonctinne, effectivement, sans devoir passer par une page HTML) Enfin, cela n'engage bien sur que moi, mais le composant "cppbrowser" de borland fait, sauf erreur de ma part, appel au sytstème de Internet Explorer… Et j'ai horreur de ce navigateur (et de ses émolutions) [clindoeil] Soyons bien clair: il n'est nullement question, ici de "casser" ton travail, qui a surement été impressionnant pour y arriver… Il s'agit principalement de t'ouvrir des voies de réflexion auxquelles tu n'a peut etre pas réfléchi, dans le seul but que tu puisse te faire une idée précise de la qualité générale de ton application… Je n'attends meme pas, finalement que tu réponde à ces quelques questions, je souhaiterais juste que tu y réfléchisse un tout petit peu, et que tu en détermines de toi meme la pretinence par rapport au résultat auquel tu es arrivée [clindoeil]
Ptite Développeuse
 Posté le 18/04/2006 à 16:56 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Nouvelle astucienne
J'ai pensé à ce problème de plugin c'est pourquoi j'en ai trouvé un gratuit pour une utilisation personnelle et payant pour qu'on puisse l'inclure dans le logiciel commercialisable, donc pour le moment je peux faire mes tests et le jour où mon entreprise voudra le commercialiser, elle paiera. Je ne trouve pas forcément dommage de passer par une page HTML, pourvu que ça fonctionne. Le plugin que j'ai trouvé fonctionne avec Internet Explorer et Mozilla Firefox, et peut être d'autres navigateurs, j'ai pas essayé. Le fait que cppBrowser fasse appel à Internet Explorer m'arrange car mon application fonctionnera sous windows, et donc je suis sûre que cela va fonctionner. Moi non plus je ne m'en sert pas en temps normal mais il faut voir le coté pratique. C'est très gentil à toi, mais pour le moment c'est la seule solution que j'aie trouvé, sans recréer complètement une biblothèque ou un composant Borland, chose dont je ne suis pas capable. Merci pour ton aide.[clindoeil]
Page : [1] 
Page 1 sur 1

Vous devez être connecté pour poster des messages. Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !


Les bons plans du moment PC Astuces

Tous les Bons Plans
GratuitJeu PC Hob gratuit
Valable jusqu'au 09 Avril

Epic Game Store offre actuellement le jeu PC Hob. Hob est un jeu d'action-aventure palpitant, au sein d'un monde à la fois beau et cruel qui se trouve dans un état chaotique. Les joueurs percent les mystères qui les entourent, et découvrent un monde en péril. Peut-il encore être sauvé, ou sombrera-t-il plus loin dans le chaos ?


> Voir l'offre
GratuitJeu PC Drawful 2 gratuit
Valable jusqu'au 09 Avril

Epic Game Store offre actuellement le jeu PC Drawful 2. Les créateurs des jeux d'ambiance à succès Fibbage, Quiplash et YOU DON'T KNOW JACK présentent Drawful 2, le jeu qui mêle des dessins horribles et des réponses à hurler de rire !


> Voir l'offre
34,99 €Enceinte connectée Amazon Echo Dot avec assistant Alexa + prise connectée Tapo P100 à 34,99 €
Valable jusqu'au 06 Avril

Amazon fait une promotion sur un pack comprenant l'enceinte Amazon Echo Dot (3ème génération) et la prise connectée Tapo P100 qui passe à 34,99  (au lieu de 74 €). L'appareil piloté par la voix fonctionne avec Alexa, l’intelligence artificielle développée par Amazon. Vous pourrez avec elle écouter de la musique, interagir avec vos appareils domotiques, écouter les infos, la radio, connaître la météo et d’accéder à des milliers d’autres possibilités grâce aux Skills : recettes de cuisine, petits jeux, etc. Par rapport à la génération précédente, le son est amélioré et l'enceinte arbore un nouveau design. Vous pourrez piloter à la voix la prise connectée pour allumer ou éteindre un appareil branché dessus, comme une lampe par exemple. La prise est totalement programmable et contrôlable à distance avec votre smartphone. Une excellente affaire !


> Voir l'offre

Sujets relatifs
Commande DIR sous DOS +cacher l'extension fichier?
ouvrir un fichier sous vb
la structure de fichier DLL sous vbasic
Création de fichier .map sous Dev Cpp
Lecture fichier UNIX sous matlab PC
Création fichier sous VB
Onglet Résumé d'un Fichier sous Windows
Exécuter un fichier .cpp sous DOS
Création d'un fichier End Of File
Extraire une image d'un fichier SWF
Plus de sujets relatifs à Affichage fichier .vrml sous Borland
 > Tous les forums > Forum Autres langages