Так что у меня возникли проблемы с моделью Фонга, в частности, диффузной компонентом и использованием правильного нормального вектора и направления к свету. Это для школьного проекта, но мне все равно, если я не закончу его, пока кто -то сможет сказать мне, что я делаю не так. Я уже пробовал несколько вещей, и лучшее, что я делаю, - это половина более широкой сферы в тени, но в неправильном направлении. Самая яркая интенсивность находится на внешнем краю круговой половины и становится темнее, когда она идет в центр, когда он должен быть наоборот. Похоже, что он затеняет сферу в линиях, когда я видел модели, которые выглядят так, как будто они затенены пустыми кругами. < /p>
затенение второй сферы может быть трудно увидеть.
< /p>
Соответствующие структуры: < /p>
.struct Ray
{
vec3 origin; // origin of the ray
vec3 dir; // direction of the ray
};
struct Sphere
{
vec3 center;
float radius;
vec3 ka, kd, ks;
vec3 reflectivity;
float alpha;
Sphere(const vec3& ic=vec3(0.0f), const float& ir=0.0f, const vec3& ika=vec3(0.0f), const vec3& ikd=vec3(0.0f), const vec3& iks=vec3(0.0f), const float& ireflectivity=0.1f, const float& ialpha=1.0f):
center(ic), radius(ir), ka(ika), kd(ikd), ks(iks), reflectivity(ireflectivity), alpha(ialpha)
{}
bool intersect(const Ray& ray, float& t0, float& t1);
};
struct PointLight
{
vec3 location;
vec3 id, is;
PointLight(const vec3& iloc=vec3(0.0f), const vec3& iid=vec3(0.0f), const vec3& iis=vec3(0.0f)):
location(iloc), id(iid), is(iis)
{}
};
vec3 color;
vec3 amb = my_sphere.ka* my_ambient_light.ia; // I = ka * ia ambient component
int temp = my_point_lights.size() - 1;
color += amb;
vec3 diff;
for (int i = my_point_lights.size() - 1; i >= 0; i--) {
vec3 n = (ray.origin + ray.dir - my_sphere.center);
normalize(n);
vec3 L = (my_point_lights[temp].location - ray.origin);
normalize(L);
diff += my_sphere.kd * my_point_lights[temp].id * std::max(dot(n, L), 0.0f);
}
color += diff;
Подробнее здесь: https://stackoverflow.com/questions/536 ... -component
Диффузное компонент модели Raytracing / Phong ⇐ C++
Программы на C++. Форум разработчиков
-
Anonymous
1748944457
Anonymous
Так что у меня возникли проблемы с моделью Фонга, в частности, диффузной компонентом и использованием правильного нормального вектора и направления к свету. Это для школьного проекта, но мне все равно, если я не закончу его, пока кто -то сможет сказать мне, что я делаю не так. Я уже пробовал несколько вещей, и лучшее, что я делаю, - это половина более широкой сферы в тени, но в неправильном направлении. Самая яркая интенсивность находится на внешнем краю круговой половины и становится темнее, когда она идет в центр, когда он должен быть наоборот. Похоже, что он затеняет сферу в линиях, когда я видел модели, которые выглядят так, как будто они затенены пустыми кругами. < /p>
затенение второй сферы может быть трудно увидеть.
< /p>
Соответствующие структуры: < /p>
.struct Ray
{
vec3 origin; // origin of the ray
vec3 dir; // direction of the ray
};
struct Sphere
{
vec3 center;
float radius;
vec3 ka, kd, ks;
vec3 reflectivity;
float alpha;
Sphere(const vec3& ic=vec3(0.0f), const float& ir=0.0f, const vec3& ika=vec3(0.0f), const vec3& ikd=vec3(0.0f), const vec3& iks=vec3(0.0f), const float& ireflectivity=0.1f, const float& ialpha=1.0f):
center(ic), radius(ir), ka(ika), kd(ikd), ks(iks), reflectivity(ireflectivity), alpha(ialpha)
{}
bool intersect(const Ray& ray, float& t0, float& t1);
};
struct PointLight
{
vec3 location;
vec3 id, is;
PointLight(const vec3& iloc=vec3(0.0f), const vec3& iid=vec3(0.0f), const vec3& iis=vec3(0.0f)):
location(iloc), id(iid), is(iis)
{}
};
vec3 color;
vec3 amb = my_sphere.ka* my_ambient_light.ia; // I = ka * ia ambient component
int temp = my_point_lights.size() - 1;
color += amb;
vec3 diff;
for (int i = my_point_lights.size() - 1; i >= 0; i--) {
vec3 n = (ray.origin + ray.dir - my_sphere.center);
normalize(n);
vec3 L = (my_point_lights[temp].location - ray.origin);
normalize(L);
diff += my_sphere.kd * my_point_lights[temp].id * std::max(dot(n, L), 0.0f);
}
color += diff;
Подробнее здесь: [url]https://stackoverflow.com/questions/53678200/raytracing-phong-model-diffuse-component[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия