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