静态网站做淘宝客,妇联网网站建设工作,第十八届杭州动漫展,济南小程序开发制作5image Texture Mapping 图像纹理映射
我们之前虽然在交点信息新增了uv属性#xff0c;但其实并没有使用#xff0c;而是通过p交点笛卡尔坐标确定瓷砖纹理或者大理石噪声纹理的值
现在通过uv坐标读取图片#xff0c;通过std_image库stbi_load#xff08;path#xff09;…5·image Texture Mapping 图像纹理映射
我们之前虽然在交点信息新增了uv属性但其实并没有使用而是通过p交点笛卡尔坐标确定瓷砖纹理或者大理石噪声纹理的值
现在通过uv坐标读取图片通过std_image库stbi_loadpath加载图片返回图片指针我们直接将std_image文件放在src源码中使用就行
我们创建image_texture的图片纹理它的颜色值是通过uv坐标从data*纹理获取的并且我们的球体应用这个新纹理
然后在求交时不要忘记更新交点信息的uv坐标通过函数 3d笛卡尔转极坐标 转到0---1的uv坐标 void get_sphere_uv(const vec3 p, double u, double v) {/* 从p交点-》极坐标-》uv对应值 */auto phi atan2(p.z(), p.x());auto theta asin(p.y());u 1-(phi pi) / (2*pi);v (theta pi/2) / pi;
}
然后在ray_color求得交点的uv后应该调用value获取uv对应的颜色这里由于继承体系我们将从材质获取纹理添加getTexture的虚函数以便动态的调用纹理的value
下图是随意找的一张jpg格式的地球贴图 6·Rectangles and Lights 矩形和光源
我们想要在场景加入矩形的灯光因此首先新建发光材质
接着为了让光源的效果更清晰我们让背景不在是天空改为全黑的所有光都来自于我们的矩形光源
我们创建矩形物体并重写hit求交函数那么如何求交呢
定义一个轴对齐xy方向的平面x0,x1,y0,y1z首先射线方程仅看z值求得t然后再分别将t带入xy的射线方程即可求出xy那么当xy在范围内那么就是相交的 现在开始布置Cornell Box场景 7·Cornell Box
创建新的box实例因为要考虑倾斜角度我们先把轴对齐box创建出来 实例是一种经过旋转过或者平移等操作的几何图元。光线追踪中是通过改变光线来模拟物体操作的
对于平移物体移动offset相当于光线 - offset因为光线实际没有移动被修改的rec仍要改回来
8volumes 体积体