- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
namespace raytracing
{
struct Scene::Implementation
{
std::vector<std::unique_ptr<RenderObject>> renderObjects;
std::vector<Light> lights;
Camera camera;
};
}
Scene::Scene() :
implementation{std::make_unique<Implementation>()}
{
}
void Scene::insertObject(RenderObject* renderObject) noexcept
{
implementation->renderObjects.push_back(std::unique_ptr<RenderObject>{renderObject});
}
const RenderObject* Scene::getIntersectedObject(Ray ray, vec3f* intersectionPoint) const noexcept
{
const auto& renderObjects = implementation->renderObjects;
if (renderObjects.empty())
return nullptr;
struct IntersectionData
{
const RenderObject* renderObject;
float t;
bool isIntersect;
vec3f intersectionPoint;
} temp{};
for (decltype(implementation->renderObjects)::const_iterator iter = renderObjects.cbegin();
iter != renderObjects.cend(); ++iter)
{
IntersectionData intersectionData;
intersectionData.renderObject = (*iter).get();
intersectionData.isIntersect = (*iter)->isIntersect(ray, intersectionData.t,
&intersectionData.intersectionPoint);
if (intersectionData.isIntersect)
{
if (temp.isIntersect)
{
if (temp.t > intersectionData.t)
temp = intersectionData;
}
else
temp = intersectionData;
}
}
if (intersectionPoint)
*intersectionPoint = temp.intersectionPoint;
return temp.renderObject;
}
namespace raytracing
{
struct Renderer::Implementation
{
vec3f trace(const Scene& scene, Ray ray) const noexcept
{
vec3f intersectionPoint;
const RenderObject* const renderObject = scene.getIntersectedObject(ray, &intersectionPoint);
vec3f color{};
if (!renderObject)
return color;
for (Light l : scene.getLights())
{
const Ray lightRay{intersectionPoint, (l.position - intersectionPoint).normalize()};
float brightness = renderObject->getNormal(intersectionPoint).dot(lightRay.direction);
if (brightness < 0.0F)
brightness = 0.0F;
color += renderObject->getColor(intersectionPoint) * 255.0F * brightness;
}
return color;
}
}
}
Но зато осталось прожить на 1 день меньше. Надо во всём видеть положительные стороны.
что в твоей жизни такого уж хорошего?
З.Ы. Скоро у роскомнадзора будет ещё один повод забанить ГК.
вот он и депрессует
а то ведь если круг общения ограничен ГК, то шанс найти кого-нить не много
Разве что с немцем местным подружиться
Зачем?
Хожу, играю в настолочки, песни пою под гитару
Просто рассказ, который я пишу, не клеится, поэтом у и день проебан
> негр
Хуже - анимешник.
и уши лисьи у тебя есть?
Чтобы испить традиционного английского чайку, надо почитать томик Шекспира.
Чтобы прочувствовать атмосферу ГК, надо посмотреть фильм про слоника.
ааа! эх, что же за дебил, бля, в тарелку с головы пахома под зад.) иди мойся, нахуй тогда спать. я… я ложусь тоже, сейчас лягу… я тебя сейчас я вмпомню, сейчас могу пизды дать, тебе, братишка! бляяя, заебаал, блядь!.. они спят, сука, блядь… ну чё ты… оторвалася!.. я не срао сегодня вообще!
уйди нахуй, мне не надо, ну не надо поспать, полежать немножка, братишка. ну что ты сердишься, покушать-то!.. мух убить что ли? чисти! блядь, висти. козлов этих, ёбаных, блядь!
Поешь сладково хлебушка
Кстати а зачем ты на пидара отзываешься?
1. Имя у него такое.
2. состояние души
3. состояние жопы.
Дамы и господа, два поезда. Кто больше?
Два поезда раз, два поезда два, два поезда три.
Продано пидару с синим ником.
Необходимо из этих двух поездов смоделировать поезд с таким же размером, но с дополнительным свойством -\
вход заполненного поезда вызывает затирание последнего пасажира.
где N=3.
Время пошло. Язык программирования любой
последний пассажир просто понимает, что поезд едет в жопу и выпрыгивает в окно
на какой сам сядешь, на какой мать посадишь?
Ну написал же: Можно вставлять в голову, тогда выйдет с хвоста (аля очередь). А можно вставлять в хвост и доставать оттуда же (аля стек).
https://ru.wikipedia.org/wiki/Двухсторонняя_очередь
Не упомянул про то, что из головы тоже можно доставать? Ну ок, подловил.
Хотя у дека на односвязном списке и правда из головы нельзя доставать (или в хвост нельзя вставлять, в зависимости от реализации).
>Хотя у дека на односвязном списке и правда из головы нельзя доставать (или в хвост нельзя вставлять, в зависимости от реализации).
Так это не совсем дек будет? Таки обязан или нет?
Кстати слышал что реальные связные списки практически не применяются ибо массивы или гибриды эффективнее даже на типикал юзкейсах для связных списков.
Да хуй его знает. Честно. На английской вики эти варианты, кстати описаны.
> реальные связные списки практически не применяются
В прикладнухе - скорее да, чем нет. А вот в системщине довольно часто вшивают next/prev от кольцевого списка прямо в структуру с данными. Довольно удобно, когда доступ по индексу не нужен.
пидар ниграмотный
Не сотвори себе кумира.
Борманд покраснел, прокричал "Бака, бака!", и убежал в закат.
Присоединяйся, у нас есть печеньки.
> push_back
Зато ты знаешь модерн сипласплас.
> &intersectionData.intersectionPoint);
вот тут intersectionData.t не инициализирован.
Говорите за себя, сударь
Говорите за себя, сударь
вот потому-то ты и не нужен
Никто мол больше не нужОн
Ни борманд, ни паскаль, ни я
Не пожалел он и себя
И вот бессильный слышен стон
"Гость тоже не нужОн..."
>>себя
очень хуевая рифма, кстати
теперь я точно убедился что ты не нужен