





Welti hat geschrieben:Was ist ein QTree?


renderPixel raytracer::trace(double x,double y)
{
Coord Pos;
Pos.x = x;
Pos.y = y;
covering.clear();
for(int i = 0; i < _Daten->getSize(); i++)
{
getCovering(Pos,i);
}
zCovering.clear();
zSort();
renderPixel value;
value.r=0.0;
value.g=0.0;
value.b=0.0;
for(int i = 0; i < zCovering.size(); i++)
{
edge currEdge = _Daten->getEdge(zCovering[i].ObjIndex);
value.r += (value.r * i + (abs(zCovering[i].dalpha)/(2.0*pi))*currEdge.r*currEdge.e)/(i+1);
value.g += (value.g * i + (abs(zCovering[i].dalpha)/(2.0*pi))*currEdge.g*currEdge.e)/(i+1);
value.b += (value.b * i + (abs(zCovering[i].dalpha)/(2.0*pi))*currEdge.b*currEdge.e)/(i+1);
}
return value;
}
int raytracer::zSort()
{
for(int i = 0; i < covering.size(); i++)
{
int overlap = 1;
for(int j = 0; j < covering.size() ; j++)
{
if(j != i)
{
if (coverOverlap(covering[i],covering[j]) == 0)
{
overlap = 0;
}
}
}
if (overlap == 0) //If "Cover" does not Overlap with any other Cover push it into the zCover
{
zCovering.push_back(covering[i]);
}
}
}
int raytracer::coverOverlap(Cover C1,Cover C2) //If C2.alpha is inside C1 return 1. If C2.alpha + C2.dalpha is inside C1 return 2. Else return 0
{
if(inside(C1.alpha1,C2.alpha1,C2.alpha2)||inside(C1.alpha2,C2.alpha1,C2.alpha2))
{
return 1;
}
if(inside(C2.alpha1,C1.alpha1,C1.alpha2)||inside(C2.alpha2,C1.alpha1,C1.alpha2))
{
return 1;
}
return 0;
}
int raytracer::getCovering(Coord Pos,int i)
{
edge currEdge = _Daten->getEdge(i);
Cover currCover;
currCover.alpha1 = atan2((Pos.y-currEdge.y1),(Pos.x-currEdge.x1));
currCover.alpha2 = atan2((Pos.y-currEdge.y2),(Pos.x-currEdge.x2));
currCover.dalpha = currCover.alpha1 - currCover.alpha2;
if(currCover.dalpha > pi)
{
currCover.alpha1 = normalize(currCover.alpha1);
currCover.alpha2 = normalize(currCover.alpha2);
currCover.dalpha = currCover.alpha1 - currCover.alpha2;
}
if(currCover.dalpha < -pi)
{
currCover.alpha1 = normalize(currCover.alpha1);
currCover.alpha2 = normalize(currCover.alpha2);
currCover.dalpha = currCover.alpha1 - currCover.alpha2;
}
currCover.ObjIndex = i;
currCover.z1 = sqrt((Pos.x - currEdge.x1)*(Pos.x - currEdge.x1)+(Pos.y - currEdge.y1)*(Pos.y - currEdge.y1));
currCover.z2 = sqrt((Pos.x - currEdge.x2)*(Pos.x - currEdge.x2)+(Pos.y - currEdge.y2)*(Pos.y - currEdge.y1));
covering.push_back(currCover);
return 0;
return 1;
}



Schwenk hat geschrieben:Was mich an dem folgenden Bild stört ist der waagrechte Streifen. Jemand ne ahnung wie der Zustande kommen kann ?
Schwenk hat geschrieben:Erst als Float image (eigener Struct) dann rechne ichs als QImage um.


Schwenk hat geschrieben:Erst als Float image (eigener Struct) dann rechne ichs als QImage um.


Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste