This is the first of several articles covering the 3D plugin interface in PD Howler. In this article we will render some particles in a simple 3d projection. In the next one we will tackle rendering some polygons Familiarity with the regular plugin interface is helpful and can be found at --- Example code and executable for this article is provided here --- We will be developing in VB.net since it is readily available in a free version (VB express) There are a few things to keep in mind when working in VB.net to develop for PD Howler. Howlers plugin interface uses VB classic conventions. For the most part, this means that... Longs are 32 bit Integers are 16 bit. In VB.net longs are 64 bit and integers are 32 bit, so we will use integers in place of longs and a short in place of integers for compatibility. PD Howler provides a low level 3D api for plugin development. Our goals was to avoid complex data types. Therefore we implemented the fundamental building blocks for 3D, namely shaded triangles, a translation matrix, some math functions, and a blobby circle that can be used for particles. Things like 3D projection is left to the developer. We will cover a simple and basic method here. If we make a few assumptions, we can do a fairly convincing 3D projection just by multiplying the x and y parameters by the z parameter. To do this, we assume that the camera is at the center of the coordinate system, and always looking into the Z axis. Therefore: x=x/z y=y/z Since z might be zero, we test that z is above zero to avoid zero divide. We solve one other problem with the same step. We also clip out points that go past the camera into negative space. If z>0 then x=x/z y=y/z 'render something end if And that's it, 3D projection at its most simple. In the next article we will use the transformation matrix to rotate, scale, and translate our points efficiently and without a lot of coding. Moving on. Howler provides an active x host for plugins. Any language that can connect to an active x server through COM can work with Howler. VB.net does this easily. First we declare two variables to create the Dogwaffle and Dogwaffle3d objects. 'dogwaffle objects Private Dogwaffle As Object Private Dogwaffle3D As Object Next we initialize the objects. This can be done in the forms startup. Dogwaffle = CreateObject("Dogwaffle.Dogwaffle_Class") Dogwaffle3D = CreateObject("Dogwaffle.Dogwaffle3d_Class") Now that this is done, we can use any of the objects methods, such as clearing the screen or rendering something into an image. In this article we will render some particles and show them moving over time. We will use the Dogwaffle3d objects DrawCircles method. It looks like this: Dogwaffle3D.DrawCircles(circles, count) “circles” is an array that holds the parameters to draw the particles. The particles are antialiased and can also be feathered for a blurrier look. “count” is the number of circles (or particles). The array is declared like this: Dim circles(7, count - 1) As Single The parameters are stored like this: circles(0, n) = x circles(1, n) = y circles(2, n) = size circles(3, n) = feather circles(4, n) = red circles(5, n) = green circles(6, n) = blue circles(7, n) = alpha Once this is filled out, the method can be called like this: Dogwaffle3D.DrawCircles(circles, count) And your particles will be drawn into the image. See the source code to see it in action.