Cube3D

Généralités sur la programmation 3D
Polo
Messages : 612
Inscription : sam. 03/juil./2004 20:14

Message par Polo »

Ben la je sais pas trop, tu t'y prends comment pour afficher les objets ?
Parce que ça peut peut-être venir de là ;)
Anonyme

Message par Anonyme »

En fait, lorsque je charge mes objets, touts les points (Vertices) vont dans une structure qui possède les infos des XYZ.

Structure Vertice
X.f
Y.f
Z.f
endstructure

lors du chargement, je compte le nombre de vertex charger
ensuite via une boucle j'affiche tout les points sans prendre en compte les l'objet.

Code : Tout sélectionner

 For i = 1 To Vertice_Number
   
  Point2D()\x=(Point3D()\x*256)/(Point3D()\z+#Zoff)+#Xoff  
  Point2D()\y=(Point3D()\y*256)/(Point3D()\z+#Zoff)+#Yoff

 next i
Polo
Messages : 612
Inscription : sam. 03/juil./2004 20:14

Message par Polo »

Oula, ben je sais pas, en fait, avec Direct3D c'est beaucoup plus simple ^_^
Anonyme

Message par Anonyme »

Direct3D plus simple?

je n'arrive même pas à l'initialiser :?
Polo
Messages : 612
Inscription : sam. 03/juil./2004 20:14

Message par Polo »

Oui, c'est peut être un peu déroutant, mais il y a des exemples sur le forum anglais, ça m'a pas mal aidé au début :)
Et après il faut télécharger le sdk de microsoft, qui est pas mal complet :)
Anonyme

Message par Anonyme »

le problème est que rien n'est compatible avec la v4 :?
ou alors je suis bête :P
c'est pas grave, je passe au c++ & opengl :wink:
Polo
Messages : 612
Inscription : sam. 03/juil./2004 20:14

Message par Polo »

ah bon, mais ça doit pas être très dûr de convertir ça pour la v4 je pense :)
Sinon, pourquoi c++ pour l'OpenGL ? Purebasic convient aussi parfaitement :)
J'avais commencé mon moteur 3d en opengl d'ailleurs (puis je l'ai délaissé pour direc3d ;))
Anonyme

Message par Anonyme »

en fait, les exemples fournis sur le forum anglais ont besoin de 2 includes (je sais plus les noms) l'une d'elle possède les interfaces de dx9, lors de la compilation , il me dit qu'elles existent déjà, donc je vire l'include, et après il ne me reconnais plus les commandes directx avec les underscores :?
j'ai pas envie de me prendre la tête la dessus :?
j'ai essayer de faire une dll d'opengl pour pure, mais je ne sais pas à quoi correspond (int argc, char *argv[]) & comment l'interpreter dans purebasic...
donc je passe au c++ qui regorge de tutos sur opengl :wink:
p'tet que j'vais essayé ogre aussi ^^

@++
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

Salut Cpl Bator,

(int argc, char *argv[]) se traduit assez facilement.

un petit example :

Code : Tout sélectionner

Structure ARG
  *v.s[0]
EndStructure

Procedure test(argc.l, *arg.ARG)
  For i = 0 To argc - 1
    Debug *arg\v[i]
  Next
EndProcedure

*x.ARG = AllocateMemory(5 * SizeOf(String))
*x\v[0] = "Cpl Bator"
*x\v[1] = "Pure"
*x\v[2] = "Basic"
*x\v[3] = "Test1"
*x\v[4] = "Test2"

test(5, *x)
Dernière modification par Flype le ven. 16/juin/2006 8:27, modifié 1 fois.
Image
Anonyme

Message par Anonyme »

Merci Flype, mais le problème n'est pas là :lol:

voila en c++ la fonction principale se presente comme ca :

Code : Tout sélectionner

int main(int argc,char **argv)
    {

   glutInit(&argc,argv);

    return 0;
    }
je voudrais la transformer en fonction pour une dll comme ceci :

Code : Tout sélectionner

__declspec(dllexport) void maFonction(int argc,char **argv)
{
glutInit(&argc,argv);
}
mais je ne sais pas quoi lui passer comme paramètres :?
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

la fonction main() en C est appelé automatiquement lors de l'exécution du programme. main() 'comporte' toujours argc et argv.

argc et argv représentent les arguments transmis à l'exécutable.
c'est la meme chose que ProgramParameter(i) en purebasic...

donc il faut se construire un tableau d'arguments et passer le pointeur du tableau.

je suis pas sûr mais çà devrait fonctionner comme çà (non testé) :

Code : Tout sélectionner

Structure ARGV
  *v.s[0]
EndStructure

Procedure.l myGlutInit(argc.l, *arg.ARGV)
  For i = 0 To argc - 1
    Debug *arg\v[i]
  Next
EndProcedure

Procedure.l Main()
  
  Protected argc.l = CountProgramParameters()
  Protected *arg.ARGV = AllocateMemory( argc * SizeOf(String) )
  
  If *arg
    For i = 0 To argc - 1
      *arg\v[i] = ProgramParameter(i)
    Next
  EndIf
  
  myGlutInit(argc, *arg)
  
EndProcedure

Main()
Image
Anonyme

Message par Anonyme »

oui, mais je lui transmet quoi à l'executable?

j'ai essayer l'exemple, il plante, il lui faut des paramètres.
et si je lui en file, il bug sur la fonction glutinit().

j'ai trouver comment recuperer les arguments :

Code : Tout sélectionner

#include <stdlib.h>
#include <stdio.h>

int main(int argc, char *argv[])
{

printf("ARGC = %ld ARGV = %ld\n", argc, argv );
    

  system("PAUSE"); 
    return 0;
}
je vais essayer de bidouiller pour voir si ca marche.
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

tu as une petite archive, pour essayer avec ton environnement ?
Image
Anonyme

Message par Anonyme »

je suis en train de refaire la dll, je poste d'ici 30 a 40 minutes.
Anonyme

Message par Anonyme »

File:1->Dll_PureBasic.rar
Image

la source de la dll est incluse dedans, ainsi que le code PureBasic.
Répondre