Direct3D with Vertices

From IronPython Cookbook

Adapted from this blog entry.

Direct3D with Vertices

import clr
clr.AddReference("System.Drawing")
clr.AddReference("System.Windows.Forms")
clr.AddReference("Microsoft.DirectX.Direct3D")

from System import Array
from System.Drawing import *
from System.Windows.Forms import *
from Microsoft.DirectX.Direct3D import *


class Vertices(Form):

    def __init__(self):
        self.MinimumSize = Size(100, 100)
        self.Text = "D3D Tutorial 02: Vertices" 
        self.vertexBuffer = None
        self.device = None
        
        self.Paint += lambda *_: self.render()
        self.initializeGraphics()


    def initializeGraphics(self):
        presentParams = PresentParameters()
        presentParams.Windowed = True
        presentParams.SwapEffect = SwapEffect.Discard

        self.device = Device(0, DeviceType.Hardware, self, CreateFlags.SoftwareVertexProcessing, presentParams)

        self.onCreateDevice(self.device, None)


    def onCreateDevice(self, device, event):
        self.vertexBuffer = VertexBuffer(
            CustomVertex.TransformedColored, 3,
            self.device, Usage.None,
            CustomVertex.TransformedColored.Format,
            Pool.Default)

        self.vertexBuffer.Created += self.onCreateVertexBuffer

        self.onCreateVertexBuffer(self.vertexBuffer, None)


    def onCreateVertexBuffer(self, vb, event):
        stm = vb.Lock(0, 0, LockFlags.None)
        verts = Array.CreateInstance(CustomVertex.TransformedColored, 3)
        
        verts[0] = CustomVertex.TransformedColored(150,  50, 0.5, 1, Color.Aqua.ToArgb())
        verts[1] = CustomVertex.TransformedColored(250, 250, 0.5, 1, Color.Brown.ToArgb())
        verts[2] = CustomVertex.TransformedColored( 50, 250, 0.5, 1, Color.LightPink.ToArgb())

        stm.Write(verts)
        vb.Unlock()


    def render(self):
        if not self.device:
            print "error"
            return

        self.device.Clear(ClearFlags.Target, Color.Blue, 1.0, 0)

        self.device.BeginScene()

        self.device.SetStreamSource(0, self.vertexBuffer, 0)

        self.device.VertexFormat = CustomVertex.TransformedColored.Format

        self.device.DrawPrimitives(PrimitiveType.TriangleList, 0, 1)

        self.device.EndScene()
        self.device.Present()


Application.Run(Vertices())


Back to Contents.

TOOLBOX
LANGUAGES