在C ++中着色器语法vector = vec3(a,b,c)?

时间:2013-02-12 17:17:04

标签: c++ opengl struct

一个简单的问题:我喜欢在OpenGL Shader语言中简单创建向量:

vector = vec3(a,b,c);

你如何编写C ++ - 允许在C ++中使用这个精确代码的结构或类?

2 个答案:

答案 0 :(得分:3)

所有这些工作都已完成,无需自己重写。您可以使用GLMmath

答案 1 :(得分:1)

这可以通过编写一个接受三个浮点数的vec3构造函数来实现。

class vec3
{
public:
    vec3( float x_, float y_, float z_ )
    : x(x_)
    , y(y_)
    , z(z_)
    {}

    vec3( const vec3 &src )
    {
        *this = src;
    }

    vec3& operator =( const vec3 &src )
    {
        x = src.x;
        y = src.y;
        z = src.z;
        return *this;
    }

    float x;
    float y;
    float z;
};

更有趣的是如何实现排列行为,比如

vec3 a( 1, 2, 3 );
vec3 b = a.yzx; // 2, 3, 1
vec3 c = a.yyx; // 2, 2, 1