GDI-D: Tore de Moebius en format OFF

Soyez le premier à donner votre avis sur cette source.

Vue 798 fois - Téléchargée 70 fois

Description

[Version avec image de capture qui remplace celle du 02.02.2018]

Bonjour,

"Cousin" de l'article "CodeS-SourceS: GDI-D: Tore de Moebius en format OBJ".

Dans "Pour afficher un modèle 3d", pgl10 dit le format OFF est encore plus simple que OBJ.
Et comme son l'article propose de créer un "OFFviewer", je n'ai pas hésité à adapter mon programme à ce format.

Voici la fonction Write (de l'objet Tore) correspondante:
  void Write(Edit *ed,float R,float r) {
    char s[128];
    sprintf_s(s,"OFFrn# CodeS-SourceS: Tore de Moebiusrn"
      "# par William Voirol, Jan 2018rn# Tore: NR=%u, Nr=%u, Nc=%i"
      "rn# R=%7.3f, r=%7.3f",NR,Nr,Nc,R,r);
    std::string str=s;
    uint nn=Nr*NR,*ir=new uint[Nr+1],*jr=new uint[Nr+1];
    sprintf_s(s,"rn%u %u 0",nn,nn); str.append(s);
    for (uint k=0; k<nn; ++k)
      {sprintf_s(s,"rn%9.3f %9.3f %9.3f",X[k],Y[k],Z[k]); str.append(s);}
    for (uint n=0; n<=Nr; ++n) ir[n]=nn-Nr+(nn+n-Nc-1)%Nr;
    for (uint k=0; k<nn; k+=Nr) {
      jr[0]=k+Nr-1; for (uint n=0; n<Nr; ++n) jr[n+1]=k+n;
      for (uint n=0; n<Nr; ++n) {
        sprintf_s(s,"rn4 %u %u %u %u",ir[n],ir[n+1],jr[n+1],jr[n]);
        str.append(s);
      }
      for (uint n=0; n<=Nr; ++n) ir[n]=jr[n];
    }
    ed->ClearWrite(&str[0]); ed->SelectAll();
    str.clear(); delete ir,jr;
  }
On se contente de créer des faces à 4 cotés, car l'"offviewer" n'a pas l'air d'être embarrassé par ces quadrilatères voilés.

La génération du texte OFF avec NR=128 et Nr=32, c'est-à-dire de 4096 sommets et 4096 quadrilatères, ne prends qu'un "clin d'œil".

Regardez quelques images parmi les fichiers du Zip, ou mieux, observez les fichiers .off avec l'offviewer mentionné.


Bonne lecture ...

Liens

CodeS-SourceS: Pour afficher un modèle 3d
CodeS-SourceS: GDI-D: Tore de Moebius en format OBJ

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Commenter la réponse de William VOIROL

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.