Simple renderer in .net with SharpGL (openGL)


Re: Simple renderer in .net with direct3d
#6
Please note that all lines with ' are comments
and sorry for my german comments:

This is to set the renderscene:
Code:
Public Sub InitSettings()
        ' Das hier sollte Sie erst einmal auch nicht kümmern.
        ' Hier wird mit Hilfe einer Matrix festgelegt, wie
        ' die einzelnen Objekte zu rendern sind.

        Dim Lookat As New Vector3
        Dim CameraPosition As New Vector3
        Dim UpDown As New Vector3
        Dim Factor As Integer = 3

        With Lookat
            .X = gLookAt.X
            .Y = gLookAt.Y
            .Z = gLookAt.Z
        End With

        With CameraPosition
            .X = 123.182831 / Factor '-70
            .Y = -100.578362 / Factor '-50
            .Z = -125.182831 / Factor '-100
        End With

        With UpDown
            .X = 0 '-0.35
            .Y = -1 '-0.866
            .Z = 0 '0.35
        End With

        'declare the World as identity matrix
        matWorld = Matrix.Identity

        'D3DDevice.SetTransform(TransformType.World1, matWorld)
        D3DDevice.SetTransform(TransformType.View, matWorld)
        'd3ddevice.SetTransform(

        ' Diese Matrix kann man als Kamera betrachten, mit
        ' der sich das Sichtfeld modifizieren lässt.
        ' Der erste MakeVector ist der Standort der Camera 100, -100, 100
        ' Der zweite MakeVector ist der Lookat Punkt 0, 0, 0
        ' Der dritte MakeVector bestimmt oben und unten 0, -1 , 0
        matView = Matrix.LookAtLH(CameraPosition, Lookat, UpDown)


        D3DDevice.SetTransform(TransformType.View, matView)


        ' Mit der Projektion-Matrix legen wir Sichtweite und
        ' Sichtwinkel fest.
        'Die beiden letzten Werte legen fest was man sieht, bei 1 ,1000 ist alles ok
        'bei 0.001 , 1000 sieht man hindurch
        'matProj = Matrix.PerspectiveFovLH((Pi / 4), 4 / 3, 10, 1000)
        matProj = Matrix.PerspectiveFovLH((Pi / 4), frmLDParts.Panel1.Width / frmLDParts.Panel1.Height, 10, 1000)
        D3DDevice.SetTransform(TransformType.Projection, matProj)

        ' Jetzt teilen wir dem Device noch mit, welches
        ' Art Vertex wir haben
        D3DDevice.VertexFormat = CType(D3DFVF_COLORVERTEX, VertexFormats)


        'With vbLightAmbient
        '  .a = 255
        '  .b = 125
        '  .g = 125
        '  .r = 125
        'End With
        'vbLight.Ambient = vbLightAmbient

        Dim vbTestBench As New VertexBuffer(D3DDevice, 400, Usage.Points, CType(D3DFVF_COLORVERTEX, VertexFormats), Pool.Default)
        'MsgBox("Vertexbuffer.SizeInBytes: " & test.SizeInBytes)
        Dim descr As VertexBufferDescription = vbTestBench.Description
        'MsgBox("VertexbufferDecsription.VertexFormat: " & descr.VertexFormat)
        'Dim descr As VertexBufferDescription
        'descr.Format = Format.VertexData
        'descr.VertexFormat = D3DFVF_COLORVERTEX
        'descr.Usage = Usage.Points
        'descr.Type = ResourceType.VertexBuffer



        ' Und noch ein paar Einstellungen

        'D3DDevice.SetRenderState(RenderStates.ZEnable, True)
        D3DDevice.RenderState.ZBufferWriteEnable = True
        'D3DDevice.SetRenderState(RenderStates.Lighting, False)
        D3DDevice.RenderState.Lighting = False
        'D3DDevice.SetRenderState(RenderStates.FillMode, FillMode.Solid)
        D3DDevice.RenderState.FillMode = FillMode.Solid
        'D3DDevice.SetRenderState(RenderStates.CullMode, Cull.CounterClockwise)
        D3DDevice.RenderState.CullMode = Cull.None
        D3DDevice.RenderState.AntiAliasedLineEnable = True
        D3DDevice.RenderState.LocalViewer = True

        'D3DDevice.SetRenderState D3DRS_CULLMODE, D3DCULL_CCW
    End Sub


The main loop:
Code:
Public Sub Mainloop()
        ' Der MainLoop läuft solange wie wir die
        ' bRunning-Variable auf 'true' lassen

        Do While bRunning

            ' Das vorher Gezeichnete löschen, indem wir es mit
            ' grauer Farbe übermalen
            D3DDevice.Clear((Direct3D.ClearFlags.Target Or Direct3D.ClearFlags.ZBuffer), Color.WhiteSmoke, 1.0F, 0)
            'D3DDevice.Clear 0, ByVal 0, D3DCLEAR_TARGET Or D3DCLEAR_ZBUFFER, &HC0C0C0, 1.0#, 0
            '&HFF& = Blau
            '&HAA& =

            ' Dem Device sagen, dass das "rendern gleich
            ' beginnt"
            D3DDevice.BeginScene()

            ' Und nun lassen wir das Ganze noch rotieren
            Rotation = Rotation + 0.01

            matWorld = Matrix.Identity
            matRotation = Matrix.RotationY(CSng(Rotation * 1 * Pi / 180))
            matWorld = Matrix.Multiply(matWorld, matRotation)

            'D3DDevice.SetTransform(TransformType.World, matWorld)

            ' Hier "rendern" wir unsere Szene
            'Debug.Print("Start Rendern")
            If UBound(gLines) > 0 Then
                D3DDevice.DrawUserPrimitives(PrimitiveType.LineList, CInt(CLng(UBound(gLines) / 2)), gLines)
            End If

            'Dim a As New Line(D3DDevice)
            'a.Begin()
            'a.DrawTransform(gLines, matWorld, gLines(1).Color)
            'a.End()

            If UBound(gTriangles) > 0 Then
                D3DDevice.DrawUserPrimitives(PrimitiveType.TriangleList, CInt(CLng(UBound(gTriangles) / 3)), gTriangles)
            End If
            'MsgBox(UBound(Quads))
            If UBound(gQuads) > 0 Then
                D3DDevice.DrawUserPrimitives(PrimitiveType.TriangleList, CInt(CLng(UBound(gQuads) / 3)), gQuads)
            End If
            'D3DDevice.SetTexture(0, Textur)
            'D3DDevice.VertexFormat = CustomVertex.PositionTextured.Format

            'Debug.Print("End Rendern")

            ' Rendern beendet
            D3DDevice.EndScene()

            ' Und das Ganze "präsentieren"
            D3DDevice.Present()


            ' Jeder, der schon mal einen Loop ohne Beendigungs-
            ' Bedingung gebastelt hat, weiß, dass man ein
            ' Doevents braucht, um noch Eingaben in seinen
            ' PC machen zu können
            My.Application.DoEvents()
            'bRunning = False
        Loop
    End Sub

Maybe you can see in the code above why my picture with this renderer is mirrored.
Reply
« Next Oldest | Next Newest »



Messages In This Thread
Re: Simple renderer in .net with direct3d - by Michael Heidemann - 2013-11-23, 18:48

Forum Jump:


Users browsing this thread: 6 Guest(s)