Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
DARKTy

Dirextx8 E 9

Recommended Posts

Ciao a tutti!

Ho visitato alcuni siti contenente guide in italiano sulla programmazione Directx e direct3D, ma ho bisogno di una guida in italiano più dettagliata possibile e non solo a livello base. Ciò che mi interessa è il lato directX e direct3D per visualbasic con riferimento x7 x8 alle (9) e non per c++. Ho già appreso come inizializzare lo schermo per poterlo renderizzare con il 3D ma mi serve ora una dettagliata guida dei comandi di caricamento oggetti e creazione e impostazione oggetti magari con qualche esempio dimostrativo meglio se in italiano altrimenti mi arrangio lo stesso.

Ringrazio ciao!

________________________________________________________________

"La Perspicacia è l'Arte dell'Intelligenza"

Share this post


Link to post
Share on other sites

c'è davvero poco senza c++... anzi io finora nn ho trovato praticamente niente, o meglio niente d utile. Cmq se usi il DirectX 9.0 Sdk devi usare il c++ da quel che ho capito. Mi sai dire come hai inizializzato lo schermo in visual basic? Grazie infinitamente ciao :D

Share this post


Link to post
Share on other sites

Non credo che le directx 9 si possano usare con VB, sicuramente con c++ e c# (che non è troppo diverso dal visual basic)

Su gamedev c'è qualcosa su directx8 e vb: http://www.gamedev.net/reference/list.asp?categoryid=229

ma se devi fare cose complesse e fatte bene ti consiglio di impararti c++. In più facendo conto che con windows vista dovrebbero uscire le directx 10 lascerei perdere anche le 7 e 8, con cui sicuramente non raggiungi i risultati che ottieni con dx9, soprattutto in termini di grafica.

daddi

Share this post


Link to post
Share on other sites

'CIAO BUON LAVORO!!!

'CONDIZIONI NECESSARIE PER IL SUCCESSO DELL'ESECUZIONE

'------------------------------------------------------

'...1) APRIRE UN NUOVO FORM IN VISUAL BASIC

'...2) IMPOSTARE NEL PROGETTO IL RIFERIMENTO ALLE DIRECTX 8

'......(non 7 e non 9 altrimenti si possono sostituire i numeri del progetto)

'......(Nota: le directDraw dalla versione sucessiva alla 7 esistono ma sono contenute nelle direct3D)

'......IMPORTANTE:

'......Per impostare ciò è estremamente NECESSARIO

'......cliccare su PROGETTO dalla barra del menù di VB

'......cliccare su RIFERIMENTI e

'......CECKKARE IL CheCK BOX con caption = "DIRECTX 8 for visual basic Type library" nella listview.

'...3) Inserire questo sorgente in un form

'...4) Inserire gli oggetti richiesti:

'......1 pulsante di comando (Per avvire il rendering ogni volta che viene rilevato l'evento click

'......2 Picture box (Per destinare la visualizzazione del rendering all'interno di un contenitore immagine)

'QUESTO PROGETTO MI FUNZIONA CON IL MIO VISUAL BASIC 5 !!! e le direct X 8

'Variabili per impostazione del 3D

Dim DARKTyDX As New DirectX8 'Creazione oggetto DirectX8

Dim DARKTyD3D As Direct3D8 'Creazione oggetto D3DDevice 3D8

Dim DARKTyDispositivo As Direct3DDevice8 'dispositivo di rendering 8

'VARIABILI DI STATO ON/OF per spia di risultato di successo

Dim DARKTyOK As Boolean 'Indica il successo di un esame effettuato restituendo true=esito positivo false=esito negativo

Private Sub Command1_Click()

Render

MsgBox ("Il rendering dovrebbe essere questo " & vbCrLf & _

"ora occorre implementare la scena con i vertici" & vbCrLf & _

"PRIMA DEFINENDO I VERTICI E POI RENDERIZZANDOLI " & vbCrLf & _

"NEL BLOCCO DELIMITATO TRA BeginScene e EndScene" & vbCrLf & _

"E RICHIAMANDO LA PROCEDURA DEL RENDERING AUTOMATICAMENTE " & vbCrLf & _

"AD OGNI CAMBIAMENTO DELLA SCENA O A PIACIMENTO PER AGGIORNARE QUANDO SI VUOLE")

End Sub

Private Sub Form_Load()

'CHIAMO LA FUNZIONE DI INIZIALIZZAZIONE DEL CONTENITORE IMMAGINE CHE VERRA'

'...UTILIZZATO PER LA VISUALIZZAZIONE DEL RENDERING

'...(è possibile impostare il rendering anche nel form che è una picture)

DARKTyOK = D3D_Inizializzato(Picture1.hWnd)

'>La proprietà hWnd viene utilizzata con le chiamate API di Windows.

If DARKTyOK = False Then

MsgBox "Nessuna inizializzazione D3D per l'oggetto con hwnd specificato"

End

End If

End Sub

Function D3D_Inizializzato(Cavolo_Funziona As Long) As Boolean

On Local Error Resume Next

'Imposta come directx.direct3D

Set DARKTyD3D = DARKTyDX.Direct3DCreate()

If DARKTyD3D Is Nothing Then Exit Function

Dim DARKTyDisplayTipo As D3DDISPLAYMODE '

DARKTyD3D.GetAdapterDisplayMode D3DADAPTER_DEFAULT, DARKTyDisplayTipo

'DICHIARO I PARAMETRI DELL'ULTIMO CAMPO DEL FORMATO DEL COMANDO IN CREATEDEVICE

Dim DARKTyd3dPRESENT As D3DPRESENT_PARAMETERS

DARKTyd3dPRESENT.Windowed = 1

DARKTyd3dPRESENT.SwapEffect = D3DSWAPEFFECT_COPY_VSYNC

DARKTyd3dPRESENT.BackBufferFormat = DARKTyDisplayTipo.Format

MsgBox ("DARKTYd3dprersent = " & DARKTyd3dPRESENT.Windowed)

MsgBox ("DARKTYd3dprersent = " & DARKTyd3dPRESENT.SwapEffect)

MsgBox ("DARKTYd3dprersent = " & DARKTyd3dPRESENT.BackBufferFormat)

MsgBox ("DISPOSITIVO = " & Str$(DARKTyDispositivo))

'COMANDO CREATEDEVICE per creare il dispositivo

'**********************************************

Set DARKTyDispositivo = DARKTyD3D.CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, Cavolo_Funziona, D3DCREATE_SOFTWARE_VERTEXPROCESSING, DARKTyd3dPRESENT)

If DARKTyDispositivo Is Nothing Then

MsgBox ("DISPOSITIVO = " & Str$(DARKTyDispositivo) & vbCrLf & "...quindi esco dalla funzione (D3D_Inizializzato = NO)")

Exit Function

End If

D3D_Inizializzato = True

End Function

Sub Render()

'SUCCESSO CON ESITO NEGATIVO DI CREAZIONE DEL DISPOSITIVO DI RENDERING

If DARKTyDispositivo Is Nothing Then

MsgBox ("IL VALORE RESTITUITO PER IL DISPOSITIVO è = " & Str$(DARKTyDispositivo) & vbCrLf & "...quindi esco dalla funzione RENDER")

Exit Sub

End If

'SUCCESSO CON ESITO POSITIVO DI CREAZIONE DEL DISPOSITIVO DI RENDERING

DARKTyDispositivo.Clear 0, ByVal 0, D3DCLEAR_TARGET, RGB(0, 255, 0), 1#, 0

'INIZIO DEL RENDERING DELLA SCENA CORRENTE

'*****************************************

DARKTyDispositivo.BeginScene

'******************************************

' Inserire gli oggetti per il rendering qui

'******************************************

'Qui intuisco quello che occorre ma ho bisogno della guida per

'...sapere come utilizzare i comandi del rendering per i vertici.

'Perchè non mi si attiva la guida in visual basic sui comandi delle directX ?????

'Per ora posso basarmi solo sulla "guida" del visualizzatore oggetti di VB e nient'altro. UFFFFFY.;::

'FINE DEL RENDERING DELLA SCENA CORRENTE

'---------------------------------------

DARKTyDispositivo.EndScene

DARKTyDispositivo.Present ByVal 0, ByVal 0, 0, ByVal 0

'Qui bisognerebbe svuotare le DARKTYD3D = nothing in caso di uscita finale per liberare la memoria

End Sub

Share this post


Link to post
Share on other sites

Di niente, appena ho un pò più di tempo cerco di sperimentare il rendering implementato sui vertici di una scena , e se ci riesco invento un VitruviusPoser!!!

________________________________________

"FEAR OF THE DARK"

I'm a man who walk alone, and when I walking in a DARK road....

na naa na nanna nannaa naaaa___ FEAR OF THE DARK ,

FEAR OF THE DARK !

Share this post


Link to post
Share on other sites

Ciao. Allora per disegnare delle geometrie in DirectX per prima cosa bisogna creare un buffer di vertici e poi rimpirlo con i vertici. La creazione del buffer non si fa nel modo usuale ma si deve creare utilizzando le API delle DirectX, ovvero scopiazzando quello che c'è nell'SDK in C/C++, la creazione del buffer si fa così:

// d3dDevice contains the address of an IDirect3DDevice9 interface

// g_pVB is a variable of type LPDIRECT3DVERTEXBUFFER9 


// The custom vertex type

struct CUSTOMVERTEX {

FLOAT x, y, z;

FLOAT rhw;

DWORD color;

FLOAT tu, tv;   // The texture coordinates

};


#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1)


// Create a clipping-capable vertex buffer. Allocate enough memory 

// in the default memory pool to hold three CUSTOMVERTEX 

// structures


if( FAILED( d3dDevice->CreateVertexBuffer( 3*sizeof(CUSTOMVERTEX),

0 /*Usage*/, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &g_pVB, NULL ) ) )

return E_FAIL;
Mentre poi per renderizzare le geometrie si fa in quest'altro modo:
if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )

{

// Setup the world, view, and projection matrices

SetupMatrices();


 // Render the vertex buffer contents

g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX) );

g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );

g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 1 );


// End the scene

g_pd3dDevice->EndScene();

}

La prima cosa che bisogna sapere però prima di renderizzare è che le DirectX supportano solo i TRIANGOLI (cosa odiosa, se vuoi caricare un file OBJ con Triang e Quadr devi spezzare i quadrati in triangoli a runtime e se necessario ricalcolare le normali per lo smooth) e quindi il buffer dei vewrtici della tua geom deve essere organizzato come una serie di trinagoli e nella DrawPrimitive puoi usare solo TRIANGLESTRIP, TRIANGLELIST o TRIANGLEFAN (per i poligoni pieni), c'è la possibilità di creare geometri con vertici indicizzati ma devono essere sempre organizzati in buffer come quelli di sopra... tagliano qui il discorso se sei riuscito a collegare VB alle DirectX e a far creare il Render Device dovresti riuscire ad accedere anche a queste funzioni e ai tipi per la creazione dei buffer dei vertici (quelli che ho chiamato CUSTOMVERTEX).

Ciao e spero di averti chiarito almeno un pochino come devi procedere ...purtroppo come hai visto l'argomento non è proprio banale.

P.S.: Le prestazioni del programma in VB sono leggermente inferiori (in alcuni casi molto inferiori) allo stesso prog scritto in C/C++/C#

Share this post


Link to post
Share on other sites

CIAO TheShark!

Molto getile,Ti ringrazio per il tuo contributo!

Ho trovato già qualcosa per l'impostazione e il rendering dei vertici in VisualBasic , ma devo trovare ancora un po' di tempo libero per poterlo sperimentare e sviluppare cmq ho già intuito il meccanismo logico. Per ora sono occupatissimo su un mio progetto >Speed Visual Dark Basic 3D< e usando il DarkBasic per il momento posso trascurare il lato della progettazione rendering e strutture vertici, dal momento che lo fa già il DarkBasic in se. Queste cose però mi serviranno in futuro quando dovrò migliorare e implementare ulteriormente procedure insite del dark, e rifarle a modo mio completamente anche usando altri linguaggi, per poterle ricreare più efficenti e innovative.

Grazie ancora.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...