Dreamotion3D

Généralités sur la programmation 3D
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

En fait j'ai modifié l'archive 'modulePB', ou cette fois il n'y a plus que la
DLL, la Lib et le fichier include, soit moins de 250Ko zippé...

les liens sont ici
http://purebasic.forum-gratuit.com/view ... 49&start=0
Force et sagesse...
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

@bebou007
au fait, dans ton petit code que a posté, si tu veux que cela marche
il faut absolument créer au moins une camera:

Code : Tout sélectionner

OpenScreen 800,600,32 ,2

DM_InitGraphics(hWnd, 32,1 ,1)

camera = DM_CreateCamera()

Repeat
  
   DM_BeginScene()
   DM_RenderWorld()
   DM_EndScene()
Until SpaceKey()
DM_ClearGraphics()
End
:wink:
Force et sagesse...
bebou007
Messages : 79
Inscription : dim. 06/mars/2005 20:18

Message par bebou007 »

ok merci beaucoup c'est se que je pensse aussi mais la j'ai pas eu le temp de m'y pencher j'ai du formater voila se soir je m'y remetrai peut etre
cha0s
Messages : 681
Inscription : sam. 05/mars/2005 16:09

Message par cha0s »

j'ai un petit problem avec la comande DM_PickedTerrain() si la camera est trop haute la commande ne marche pas.
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

Oui, il y a une limite de distance au picking, mais si cette limite te gène dans ton
appli, je ferais quelque chose...
Force et sagesse...
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

@bebou007
le code suivant ouvre bien une fenetre DM3D, mais les actions sur camera et loadentity
n'on aucun effet. Comment fais-tu pour définir des pointeur sous Play ?

Code : Tout sélectionner

Include "Dreamotion3D"


OpenScreen 800,600,32 ,1
hWnd = GetScreenHandle()
DM_InitGraphics(hWnd, 32, 0 ,1)

DM_LoadEntity("harvester.b3d", 0,0)

camera = DM_CreateCamera(0)
DM_CameraClsColor(camera, 128, 128, 128)
DM_TranslateEntity(camera, 0,0,-50)
Repeat   
   DM_BeginScene()
   DM_RenderWorld()
   DM_EndScene()
Until SpaceKey() 
Force et sagesse...
bebou007
Messages : 79
Inscription : dim. 06/mars/2005 20:18

Message par bebou007 »

et bien je trouve pas

je peut recupere l'adresse d'un tableau mais je sais pas apres comment definir un pointeur

par contre je sais pas si tu te sert de mon fichier .dba car j'ai oublier des parametre au fonction DM_LoadEntity et DM_CreateCamera

mais bon aparament sa marche pas quand meme car j'ai une fenetre noir et rien de plus je vais voir car il me semble qun pointeur c'est une adresse donc on peut stoker une adresse dans un integer non?
bebou007
Messages : 79
Inscription : dim. 06/mars/2005 20:18

Message par bebou007 »

Code : Tout sélectionner


Pointer
Pointer
 
Parameters: NONE
Returns: NONE
 

Pointer in is not a command. It's a keyword used to explicitly declare an item as being that of Pointer data type. 



FACTS:

* Note: PlayBasic V1.28 supports the following pointer types, Generic, Byte,Word,Integer,Float and UserDefinedTypes

* To Read & Write to pointer, use the '*' symbol as prefix. This denoted you want to information the pointer is pointing at, and not the pointers address. 

* Important: Attempting to read/write from a pointer that has yet to initialized (told what it should point at) will most certainly crash your application ! So care is definitively needed when dealing with pointers!

* Arithmetic between Pointers (ie Address=Address+1) will automatically scale the value to the Pointers data width. 

* When mixing pointer types, PB expects the user to explicitly cast the terms.

* When writing to a generic pointer, the data type is derived from the expression result. 

* When Reading from a generic pointer, the user has to explicitly cast the read datatype 

Ie. 

  Dim Address as pointer
  Print *IntPtr(Address)  ; recast the generic as Integer pointer and read then long from memory




* Typed Pointers (User defined type pointers) allow you to use append the user defined types fields to Read/Write pointer accesses.




General Pointer Examples:

This example shows how to declare the various Pointer types. See the Byte,Word,Integer,Float for usage examples


Pointer Declaration Example


; *=----------------------------------------=*
; Explicitly Delcare POinter types using DIM
; *=----------------------------------------=*
  
; Declare a GENERIC Pointer (a pointer to read/write
; byte/word/integer/float values)
  Dim MyGenericPointer As Pointer
  
  
; Declare a Byte Pointer (a pointer to read/write byte values)
  Dim MyBytePointer As Integer Pointer
  
  
; Declare a Word Pointer (a pointer to read/write
; Word values)
  Dim MyWordPointer As Word Pointer
  
  
; Declare a Integer Pointer (a pointer to read/write;
; Integer values)
  Dim MyIntegerPointer As Integer Pointer
  
  
; Declare a Float Pointer (a pointer to read/write
; Float values)
  Dim MyFloatPointer As Float Pointer






Pointer User Defined Types:

This example shows how you can declare a user define type pointer adn how to use it feilds.


Example

` Declare a Userd defined type called tVertex
  Type tVertex
     x#,y#,z#
  EndType
  
; Each Type is 12 bytes (3 floats 3*4=12)
  SizeOf_tVertex=12
  
; declare a User Defined type pointer
  Dim MyVertexPointer as tVertex Pointer
  
; Create a bank
  CreateBank 1,1000
  
; Use this pointer to write some Integer values to a bank
  For lp=0 To 10
   ; Set pointer address of this item
     MyVertexPointer=GetBankPtr(1)+(lp*SizeOf_tVertex)
     *MyVertexPointer.x#     = 100.0+lp
     *MyVertexPointer.Y#     = 200.0+lp
     *MyVertexPointer.Z#     = 300.0+lp
  Next
  
; Use this pointer to read the values back
  For lp=0 To 10
     MyVertexPointer=GetBankPtr(1)+(lp*SizeOf_tVertex)
     Print *MyVertexPointer.x#
     Print *MyVertexPointer.y#
     Print *MyVertexPointer.Z#
  Next
  
; Display the Screen and wait for the user to press a key
  Sync
  WaitKey






This example would output. 


  100.0
  200.0
  300.0
  101.0
  201.0
  301.0
  102.0
  202.0
  302.0
  103.0
  203.0
  303.0
  104.0
  204.0
  304.0
  105.0
  205.0
  305.0
  106.0
  206.0
  306.0
  107.0
  207.0
  307.0
  108.0
  208.0
  308.0
  109.0
  209.0
  309.0
  110.0
  210.0
  310.0
cha0s
Messages : 681
Inscription : sam. 05/mars/2005 16:09

Message par cha0s »

Une commande pour editer la distance maximal pour le picking pourrait etre utile.
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

OK, c'est dans la dernière mise a jour
fonction 'DM_PickTerrainDistance(dist.l=1024)

' :wink:
Force et sagesse...
Dräc
Messages : 526
Inscription : dim. 29/août/2004 0:45

Message par Dräc »

Salut tmyke,
Bravo pour ce moteur 3D.
Comme beaucoup ici, j’ai commencé à utiliser les fonctions du moteur 3D de PB et bien que le jeu d’instructions soit incomplet, il y a certaines fonctionnalités qui me sont indispensables et qui ne me semble non disponibles dans la version actuelle de Dreamotion 3D.
Ainsi, j’aurai aimé savoir si cela été prévu ou non ?

Voici les fonctionnalités en question :
- Sélectionner le mode de projection de la caméra : Projection orthographique/perspective
- Incruster la scène dans tout ou partie d’une fenêtre Windows (à l’image d’un OpenWindowedScreen() ), afin de pouvoir intégrer la scène dans un éditeur qui utilise les gadgets PB.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Dräc a écrit :Salut tmyke,
Bravo pour ce moteur 3D.
Comme beaucoup ici, j’ai commencé à utiliser les fonctions du moteur 3D de PB et bien que le jeu d’instructions soit incomplet, il y a certaines fonctionnalités qui me sont indispensables et qui ne me semble non disponibles dans la version actuelle de Dreamotion 3D.
Ainsi, j’aurai aimé savoir si cela été prévu ou non ?

Voici les fonctionnalités en question :
- Sélectionner le mode de projection de la caméra : Projection orthographique/perspective
- Incruster la scène dans tout ou partie d’une fenêtre Windows (à l’image d’un OpenWindowedScreen() ), afin de pouvoir intégrer la scène dans un éditeur qui utilise les gadgets PB.
Pour ta première question, il y a DM_CameraProjRatio, dont le dernier paramètre permet de changer la perspective.
cha0s
Messages : 681
Inscription : sam. 05/mars/2005 16:09

Message par cha0s »

Merci pour la commande
Dräc a écrit :- Incruster la scène dans tout ou partie d’une fenêtre Windows (à l’image d’un OpenWindowedScreen() ), afin de pouvoir intégrer la scène dans un éditeur qui utilise les gadgets PB.

j'ai posté un code pour integrer les gadgets avec un screen en mode fenetre :

http://purebasic.forum-gratuit.com/view ... &start=195
Dräc
Messages : 526
Inscription : dim. 29/août/2004 0:45

Message par Dräc »

djes a écrit : Pour ta première question, il y a DM_CameraProjRatio, dont le dernier paramètre permet de changer la perspective.
Ce dernier parametre permet de régler le fond du champ de la caméra, c'est à dire la plan jusqu'où la scène doit etre rendue...
cha0s a écrit : j'ai posté un code pour integrer les gadgets avec un screen en mode fenetre.
Merci, je vais regarder cela...
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message par tmyke »

@Däc: pour la seconde il y a
DM_CameraViewPort(camera, originex,originey,larg, haut)
MAis pour la projection Orthographique, il n'y en a pas. Je vais voir cela...

@ChaOs: je regarde cela et je te tiens au courant
Force et sagesse...
Répondre