2015-10-09 4 views
0

Я пытаюсь понять рамки, которые мне были предоставлены, и медленно отлаживать их. В моем случае у меня есть массив 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. Итак, что на самом деле происходит?

+0

@KonradRudolph Доступ к конфиденциальным данным является неопределенным поведением. Вы могли бы вернуть свою «двойную» спину, или слон мог выйти из вашего компьютера. Хуже того, слон мог выйти из компьютера ваших клиентов. Не делай этого. –

ответ

0

Официально это не определено поведение. Все зависит от того, что содержит структура glm::vec3.

Я бы назвал glm reference pages. Они ясно объясняют, что такое glm::vec3 и как его использовать.

+0

Если 'vec3 *' является POD, а 'value_type' является' double', с этим кодом не обязательно возникает проблема. –

+0

@ KonradRudolph Если и если :) Конечно, единственный способ - изучить исходный код. Мой ответ по-прежнему стоит: лучше обратиться к документации библиотеки и избежать таких приведений. В этом случае документация не является плохим. –

 Смежные вопросы

  • Нет связанных вопросов^_^