Oppure

Loading
08/10/09 23:11
Thejuster
E orribile quel sorgente!
ovunque tu abbia preso questa guida ti consiglio di abbandonarla all'istante,
e incredibilmente piena di errori dall'inizio alla fine

Gia partendo da qui


Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
        Dim vertices As CustomVertex.TransformedColored() = New CustomVertex.TransformedColored(0 To 2) {} 'create an array of vertices
        vertices(0).Position = New Vector4(150, 100, 0, 1)
        vertices(0).Color = Color.Red.ToArgb 'encode color In Argb
        vertices(1).Position = New Vector4(Me.Width / 2 + 100, 100, 0, 1)
        vertices(1).Color = Color.Green.ToArgb
        vertices(2).Position = New Vector4(250, 300, 0, 1)
        vertices(2).Color = Color.Yellow.ToArgb

        device.Clear(ClearFlags.Target, Color.Black, 1.0, 0)

        device.BeginScene() 'all drawings after this line
        device.VertexFormat = CustomVertex.TransformedColored.Format
        device.DrawUserPrimitives(PrimitiveType.TriangleList, 1, vertices)
        device.EndScene() 'all drawings before this line

        device.Present()
        Me.Invalidate() 'redraw
    End Sub




E completamente tutto Sbagliato.
Tenti di eseguire un loop al Form_Paint cosa assolutamente da evitare
in più, Ha mancato il loop del rendering,
in pratica aggiornerebbe solo una volta.


Il medoto giusto sarebbe questo


  Dim vertices As CustomVertex.TransformedColored() = New CustomVertex.TransformedColored(0 To 2) {} 'create an array of vertices
        vertices(0).Position = New Vector4(150, 100, 0, 1)
        vertices(0).Color = Color.Red.ToArgb 'encode color In Argb
        vertices(1).Position = New Vector4(Me.Width / 2 + 100, 100, 0, 1)
        vertices(1).Color = Color.Green.ToArgb
        vertices(2).Position = New Vector4(250, 300, 0, 1)
        vertices(2).Color = Color.Yellow.ToArgb

do
        ' Preparo il Rendering
        device.Clear(ClearFlags.Target, Color.Black, 1.0, 0)
        device.BeginScene() 'all drawings after this line


        'Rendering degli oggetti di scena
        device.VertexFormat = CustomVertex.TransformedColored.Format
        device.DrawUserPrimitives(PrimitiveType.TriangleList, 1, vertices)


        'Mostra allo schermo il risultato
        device.EndScene() 'all drawings before this line
        device.Present()

loop



cmq torno a ripeterti, ti conviene andare qui
notjustcode.it Sezione DirectX 9.

Impara da li...
mire.forumfree.it/ - Mire Engine
C# UI Designer
08/10/09 23:27
pierotofy
Postato originariamente da Thejuster:
Tenti di eseguire un loop al Form_Paint cosa assolutamente da evitare
in più, Ha mancato il loop del rendering,
in pratica aggiornerebbe solo una volta.


Non oso mettere in dubbio le parole di chi ha usato XNA e DirectX molto ma molto più a lungo di me... faccio notare però che la tecnica utilizzata dal nostro utente (invalidare la schermata dall'evento paint) è la stessa che Tom Miller usa nel suo libro Managed DirectX 9 Kick Start: Graphics and Game Programming.

About Tom Miller's Blog
I've been with Microsoft for about ten years and have been working on getting managed code and gaming to come together for the better part of that. I originally wrote and did all the work for Managed DirectX back in the day, and for the last few years have been largely responsible for implementing the framework (graphics, audio, input, storage, etc) included in the XNA Game Studio line of projects.


blogs.msdn.com/tmiller/…

Mi sembra che sia pure lui un'autorità in materia. Non credo quindi sia così atroce utilizzare quella tecnica.
Ultima modifica effettuata da pierotofy 08/10/09 23:29
Il mio blog: piero.dev
09/10/09 6:59
Thejuster
conosco piero,

Indubbiamente e un grande.

Ma a mio parere, credo che abbia usato quel metodo in qualche guida, non sarebbe saggio utilizzare un rendering molto complesso in form_paint.

e sempre consigliato avere un void dedicato, o magari un rendering anche in multithreading

però non saprei,
dipende da marco cosa vuole fare,

se guardi il sorgente non è nemmeno impostato il backbuffer
al sub initialize.

anche se si vuol fare un programmino a finestra, credo che impostare il backbuffer
sia sacrosanto, e dopo passare al device i parametri non il contrario :rotfl:

per questo dicevo che questo sorgente e strutturato molto male,

se sta iniziando da poco, e meglio che impara perfettamente le basi che sono le più importanti.
mire.forumfree.it/ - Mire Engine
C# UI Designer