On 12/03/2011 20:51, Caligo wrote:
Given everything that D offers, what would be the best way to implement
a Point and a Vector type?  The same (x, y, z) can be used to represent
vectors, but a point represents a position, whereas a vector represents
a direction.  So, would you define two different structs for each? or
define and implement an interface?  a fixed array or POD members?

I've done lots of 3d over the years and used quite a lot of different libraries and I've come to prefer code that makes a distinction between points and vectors. Makes code easier to read and more type safe, though it's a bit more inconvenient when you need to mix things up.

I use:

struct pt {
  float[3] _vals;
}

struct vec {
  float[3] _vals;
}

Using the float[3] allows you to use vector ops:

pt      p0;
vec     v;

p0._vals[] += v._vals[];

You don't want an interface; you don't get anything more value type than points & vectors. In a modern 3d models you could be dealing with a 1/2 million vertices.

--
My enormous talent is exceeded only by my outrageous laziness.
http://www.ssTk.co.uk

Reply via email to