Comments (3)
An alternate implementation is to introduce a type Vecf []float32
. Swizzle operators would return a Vecf
of the correct len (but always with a cap of 4). To use these values as actual vectors, you'd have to call an As method,
func (v Vecf) AsVec2() Vec2f {
v = v[:2] // Slice to right length
return Vec2f{v[0], v[1]}
}
Swizzles on Vecf types would always return the correct array:
func (v Vecf) XYY() Vec3f {
v = v[:4]
return Vec3f{v[0], v[1], v[1]}
}
This is analogous to glm swizzle operators returning reference types that need to be cast to be used.
Personally, I like the array method better, but I can't deny that the slice method has some nice properties. It also makes Set methods able to increase the size of vectors, which is impossible with the above method without introducing some idiosyncratic copying semantics. Above if I wanted
func (vec *Vec2f) SetXYZ(src Vec3f)
I really don't have anywhere to go. Either the information from the "Z" will be lost, or it will return a totally new Vec3 and won't set the method receiver at all, OR it will return the new Vec3 AND set the receiver. None of these are intuitive.
Alternatively, we could introduce the Vecf
type, but only use it when size promotion is required.
from mathgl.
I've decided to not implement swizzle functions for now. They just pollute the namespace too much. If someone really needs to reorder or downslice a Vec3 in a certain way, it's not difficult to write the function themselves. I see no reason to apply code gen for a bunch of inane functions like vec.WYZY()
I will, however, provide aliases for direct element access vec.X()
vec.Y()
as aliases for vec[0]
, vec[1]
, etc. This is already done for the Quat type. My benchmarks show that access in this way is about the same speed as direct array access (Go probably inlines it). I'm only going to provide XYZW style, not RST(U?) or RGBA.
from mathgl.
Sounds good.
from mathgl.
Related Issues (20)
- Error while trying to get library: undefined: sync.Pool HOT 5
- Usage with OpenGL HOT 4
- Matrix multiplication MulNx1 is incorrect HOT 2
- FloatEqualThreshhold broken ? HOT 6
- how to convert glm to mgl32? HOT 7
- default Epsilon and MinNormal same for both mathgl32 and mathgl64 HOT 4
- Possible copy & paste errors in tests HOT 2
- mgl32.Project lacks perspective divide HOT 1
- Request for a "Get Started" Tutorial HOT 2
- Incorrect coordinate mapping in ScreenToGLCoords and GLToScreenCoords. HOT 2
- possible error in BezierCurve2D()? HOT 2
- Go modules-compatible version tags HOT 10
- Vulkan compatibility HOT 4
- Package broken with Go 1.13 HOT 3
- Performance of basic vector math operations could be up to a 100 times faster. HOT 9
- `mgl64.Round(0, 2)` returns `-0` HOT 1
- No glm::translate and glm::scale? HOT 1
- mgl64.Vec2 does not support indexing
- Add common method for number of colums and rows HOT 1
- Add Scale() method HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from mathgl.