Я пытаюсь понять рамки, которые мне были предоставлены, и медленно отлаживать их. В моем случае у меня есть массив Vec3, запомненный с указателемЧто происходит, когда я бросаю glm :: vec3 * в double *?
vec3 *cx =....;
Прежде всего, каждый раз, когда я пытаюсь проверить содержание GLM :: Vec3 через отладку я вижу много значений: х, г, s, y, g, t, z, b, p. Я не знаю, почему у меня есть все эти элементы, и в соответствии с документацией, я вижу, что GLM :: vec3 является структурой внутри:
if(GLM_COMPONENT == GLM_COMPONENT_ONLY_XYZW)
value_type x, y, z;
elif(GLM_COMPONENT == GLM_COMPONENT_MS_EXT)
union
{
struct{value_type x, y, z;};
struct{value_type r, g, b;};
struct{value_type s, t, p;};
};
else//(GLM_COMPONENT == GLM_COMPONENT_GLSL_NAMES)
union {value_type x, r, s;};
union {value_type y, g, t;};
union {value_type z, b, p;};
endif//GLM_COMPONENT
Я не знаю, где в огромных базах я изучаю который выбран одним из вышеперечисленных вариантов. И я не знаю смысла всех этих членов. Я знаю только, что через отладку я вижу все эти значения, но, как и любой другой vec3, я использую значения x, y, z для своих вычислений. После этого я хотел бы знать, что на самом деле происходит, если я передам массив vec3 в массив парных чисел. На практике:
double * cast = (double*)cx;
Что мне вернуть?
Для того, чтобы понять, я пытался сделать это:
vec3 boh(1.0);
vec3 boh2(2.0);
vec3 * try = new vec3[2];
try[0] = boh;
try[1] = boh2;
double* try2 = (double*)try;
Я понимаю, что пытаются точки к первой Vec3, который boh1, так что если я иду отладки, я вижу все х, r, s, y, g, t, z, b, p установлено в 1.0. Аналогично try2 должен указывать на «что-то», связанное с boh1, но отладка показывает мне, что try2 имеет значение 0.0078125018480932340. Итак, что на самом деле происходит?
@KonradRudolph Доступ к конфиденциальным данным является неопределенным поведением. Вы могли бы вернуть свою «двойную» спину, или слон мог выйти из вашего компьютера. Хуже того, слон мог выйти из компьютера ваших клиентов. Не делай этого. –