У меня есть классы Sphere
и Triangle
, которые являются подклассами Intersectable
. Intersectable
имеет публичный переменный член colour
. Рассмотрим следующий фрагмент кода:C++ Почему значения одной и той же переменной отличаются?
float t_min = 100000.0f;
pair<float, f3Vector> point_hit;
Intersectable * object_hit;
Triangle triangle;
Sphere sphere_trans;
bool hit = false;
//loop through triangles
for(unsigned int i = 0; i < mesh->tvi.size(); i++){
...
triangle = Triangle((fRGB)mesh->color[mesh->tci[i].c0], va.toVector3(), vb.toVector3(), vc.toVector3());
point_hit = triangle.intersect(orig, dir, c_near, c_far);
if(point_hit.first != 0.0f && point_hit.first < t_min){
object_hit = ▵
std::cout << "color1 " << object_hit->color << std::endl;
hit = true;
...
}
}
// loop through spheres
for(unsigned int j = 0; j < spheres.size(); j++){
...
sphere_trans = Sphere(sphere.color, center3, sphere.getRadius());
point_hit = sphere_trans.intersect(orig, dir, c_near, c_far);
if(point_hit.first != 0 && point_hit.first < t_min){
object_hit = &sphere_trans;
std::cout << "color1 " << object_hit->color << std::endl;
hit = true;
...
}
}
if(hit){
std::cout << "color2 " << object_hit->color << std::endl;
}
Я ожидал, что у меня есть, если выход из видов color1 (1 0 0)
и следующий вывод имеет значение с color2 (...)
в outprinted цвета должны быть одинаковыми. Однако этого не происходит. Фактически, я всегда получаю тот же результат для color2 (...)
. Можете ли вы сказать мне, что я делаю неправильно? Благодаря!
Это присваивание 'object_hit' локальному (для цикла for) здесь' object_hit = & sphere_trans; 'поэтому использование' object_hit' после выхода из области действия является неопределенным поведением. –
@ShafikYaghmour Я отредактировал код, чтобы больше не создавать локальную переменную. Но у меня все еще такое же поведение. – kaufmanu