Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;数据结构:从TNT矢量转换为GL vec3_C++_Data Structures_Iterator - Fatal编程技术网

C++ C++;数据结构:从TNT矢量转换为GL vec3

C++ C++;数据结构:从TNT矢量转换为GL vec3,c++,data-structures,iterator,C++,Data Structures,Iterator,我使用的数据结构不是我自己编写的,它返回realVec。这是realVec的声明(在typedef.h中): 我需要将此realVec转换为以下vec3: struct vec3 { GLfloat x; GLfloat y; GLfloat z; // // --- Constructors and Destructors --- // vec3( GLfloat s = GLfloat(0.0) ) : x(s), y(s), z(s) {} vec3( GLfloat _x

我使用的数据结构不是我自己编写的,它返回realVec。这是realVec的声明(在typedef.h中):

我需要将此realVec转换为以下vec3:

struct vec3 {

GLfloat  x;
GLfloat  y;
GLfloat  z;

//
//  --- Constructors and Destructors ---
//

vec3( GLfloat s = GLfloat(0.0) ) :
x(s), y(s), z(s) {}

vec3( GLfloat _x, GLfloat _y, GLfloat _z ) :
x(_x), y(_y), z(_z) {}

vec3( const vec3& v ) { x = v.x;  y = v.y;  z = v.z; }

vec3( const vec2& v, const float f ) { x = v.x;  y = v.y;  z = f; }
...
<>我对C++非常陌生,所以我的困惑可能在于使用TNT:vector的迭代器和它返回的转换值。我在想下面的事情,所以告诉我是否有意义。它似乎在编译(没有“生成”错误):


我之所以需要它,是因为我正在进行gl编程,而且我的着色器可以方便地将vec3作为输入。

您所拥有的可能会起作用,但您可以通过一些安全检查来改进它,并且您根本不必使用迭代器。似乎realVec像大多数其他向量类一样提供了
操作符[]

realVec normal = this->meshPoints.getNormalForVertex(i);
if (normal.size() >= 3)
{
   vec3 x(normal[0], normal[1], normal[2]);
}

我在上面编辑。看起来像一个双精度。如果一个PCReal是一个双精度的,你想如何将它转换成一个有3个浮点数的结构?您想用PCReal调用第一个vec3构造函数吗?@BrianNeal由于该向量是PCReal类型的,通常向量自然包含多个值,因此该向量有望包含3个PCReal。在这种情况下,我希望使用第二个构造函数,插入3个pcreal(请参阅我建议的代码块,我问题中的最后一个代码块)。请参阅我对上述评论的回复。我会先试试我的代码,除非有人能证明它是错的。然后我会考虑你的,谢谢。根据上面的评论改写了我的答案。啊,所以我应该能够使用数组语法访问RealVEC组件而不是使用迭代器。看起来它可以编译了。这就是我现在的答案,如果我遇到运行时错误,我可能会回来。
struct vec3 {

GLfloat  x;
GLfloat  y;
GLfloat  z;

//
//  --- Constructors and Destructors ---
//

vec3( GLfloat s = GLfloat(0.0) ) :
x(s), y(s), z(s) {}

vec3( GLfloat _x, GLfloat _y, GLfloat _z ) :
x(_x), y(_y), z(_z) {}

vec3( const vec3& v ) { x = v.x;  y = v.y;  z = v.z; }

vec3( const vec2& v, const float f ) { x = v.x;  y = v.y;  z = f; }
...
realVec normal = this->meshPoints.getNormalForVertex(i);
PCReal* iter = normal.begin();

vec3(*iter++, *iter++, *iter++);
realVec normal = this->meshPoints.getNormalForVertex(i);
if (normal.size() >= 3)
{
   vec3 x(normal[0], normal[1], normal[2]);
}