Raytracing / Phong -Modell diffuse KomponenteC++

Programme in C++. Entwicklerforum
Anonymous
 Raytracing / Phong -Modell diffuse Komponente

Post by Anonymous »

Ich habe also Probleme mit dem Phong -Modell speziell mit der diffusen Komponente und verwende den richtigen normalen Vektor und die Richtung zum Lichtvektor. Dies ist für ein Schulprojekt, aber es ist mir egal, ob ich es nicht beende, solange mir jemand sagen kann, was ich falsch mache. Ich habe bereits ein paar Dinge ausprobiert und das Beste, was ich tue, war, die Hälfte der größeren Sphäre in die falsche Richtung zu bekommen. Die hellste Intensität liegt an der Außenkante des Kreises und wird dunkler, wenn sie in die Mitte geht, wenn es umgekehrt sein sollte. Es sieht so aus, als ob es die Kugel in Linien beschattet, wenn ich Modelle gesehen habe, die so aussehen, als würde sie in leeren Kreisen beschattet. < /p>

Die Schattierung der zweiten Kugel kann schwer zu sehen sein.

Code: Select all

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;

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post