本文整理汇总了C++中Sphere::intersection方法的典型用法代码示例。如果您正苦于以下问题:C++ Sphere::intersection方法的具体用法?C++ Sphere::intersection怎么用?C++ Sphere::intersection使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Sphere
的用法示例。
在下文中一共展示了Sphere::intersection方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: shadow_ray_intersection
bool RayTracer::shadow_ray_intersection(SbVec3f *point_of_intersection, SbVec3f *ray_direction, int light_source){
float t_value;
for(int j=0; j< objects.size(); j++){
//Cube tempCube;
bool intersects = false;
int shapetype = 0;
shapetype = objects.at(j).shapeType ;
if(shapetype == 1){
Sphere tempSphere = objects.at(j);
if(tempSphere.transparency > 0 && refraction_on) continue;
intersects = tempSphere.intersection(point_of_intersection, ray_direction, &t_value);
//intersects = tempSphere.intersection(&poi, &ray_direction, &t_value);
}
else{
//std::cout<<"cube";
Cube tempCube = objects.at(j);
intersects = tempCube.intersection(point_of_intersection, ray_direction, &t_value);
//intersects = tempCube.intersection(&poi, &ray_direction, &t_value);
//temp = (Cube)tempCube;
}
if(intersects)
return true;
}
return false;
}
示例2: shade
bool RayTracer::shade(SbVec3f *ray_origin, SbVec3f *ray_direction, SbVec3f *retColor, int recursionDepth, int flag){
float t_value, t_min = 999;
float epsilon = 0.01;
SbVec3f normal_at_intersection;
SbVec3f normal_at_intersection1, actual_ray_direction ;
bool should_color = false;
SbVec3f color;
color[0] = 0.0;
color[1] = 0.0;
color[2] = 0.0;
//Cone *tempCone = new Cone();
for(int k =0; k<objects.size(); k++){
//Object temp1 ;
//temp1 = spheres.at(k);
Sphere tempSphere;
Cube tempCube;
Cone tempCone;
Object temp;
bool intersects = false;
int shapetype = 0;
shapetype = objects.at(k).shapeType ;
if(shapetype == 1){
tempSphere = objects.at(k);
intersects = tempSphere.intersection(ray_origin, ray_direction, &t_value);
}
else if (shapetype ==2){
//std::cout<<"cube";
tempCube = objects.at(k);
intersects = tempCube.intersection(ray_origin, ray_direction, &t_value);
//temp = (Cube)tempCube;
}else{
tempCone = objects.at(k);
intersects = tempCone.intersection(ray_origin, ray_direction, &t_value);
}
if(intersects)
{
if(t_value < t_min && t_value > 0 && t_value !=999) {
t_min = t_value;
SbVec3f V = -(*ray_direction); //view vector
V.normalize();
SbVec3f point_of_intersection ;
if(shapetype == 1){
normal_at_intersection = tempSphere.calculate_normal(ray_origin, ray_direction, t_value);
normal_at_intersection.normalize(); // N vector at the point of intersection
point_of_intersection = tempSphere.point_of_intersection( ray_origin, ray_direction, t_value);
temp = tempSphere;
}else if(shapetype == 2){
normal_at_intersection = tempCube.calculate_normal(ray_origin, ray_direction, t_value);
normal_at_intersection.normalize(); // N vector at the point of intersection
point_of_intersection = tempCube.point_of_intersection( ray_origin, ray_direction, t_value);
temp = tempCube;
}
else{
normal_at_intersection = tempCone.calculate_normal(ray_origin, ray_direction, t_value);
normal_at_intersection.normalize(); // N vector at the point of intersection
point_of_intersection = tempCone.point_of_intersection( ray_origin, ray_direction, t_value);
temp = tempCone;
}
for(int i = 0; i <3; i++) {// set the ambient color component
color[i] = (0.2 * temp.material->ambientColor[0][i] * (1 - temp.transparency ));
}
//*retColor = color; return true;//ntc
// iterate through all the lights and add the diffuse and specular component
for(int j = 0; j < lights.size(); j++){
SbVec3f poi;
actual_ray_direction = lights.at(j).position - point_of_intersection ;
actual_ray_direction.normalize();
poi = point_of_intersection + (epsilon * actual_ray_direction);
bool shadowFlag = false;
if(shadow_on == 0 || shadow_on == 1)
{
if(shadow_on == 1)
shadowFlag = shadow_ray_intersection(&poi, &actual_ray_direction , j );
//shadowFlag = true;
if(!shadowFlag)
{
SbVec3f L = lights.at(j).position - point_of_intersection;
L.normalize();
SbVec3f R;
R = (2 * normal_at_intersection.dot(L) * normal_at_intersection) - L;
R.normalize();
float NdotL = normal_at_intersection.dot(L);
float cos_theta = V.dot(R);
for(int i = 0; i <3; i++){
if(NdotL > 0)
color[i] += (( NdotL * temp.material->diffuseColor[0][i] * lights.at(j).intensity * lights.at(j).color[i] * (1 - temp.transparency )));
if(cos_theta > 0)
color[i] += (( pow(cos_theta, 50) * temp.material->specularColor[0][i]* lights.at(j).intensity * lights.at(j).color[i]) );
}
}
}
//.........这里部分代码省略.........