使用图像对球体进行纹理处理,使其面向相机
Texturing a sphere with an image so that it faces the camera
我创建了一个基本球体,并且我有一张图像,其宽高比大致为 2:1,我将其用作纹理。实际图像是客户的徽标,因此 PNG of the UK flag 是一个替身。使用基本的球体演示代码并将(缩放的)图像应用为纹理:
#include "colors.inc"
camera {
sky <0,0,1>
direction <-1,0,0>
right <-4/3,0,0>
location <30,10,1.5>
look_at <0,0,0>
angle 15
}
global_settings { ambient_light White }
light_source {
<10,-20,10>
color White*2
}
background { color White }
plane { <0,0,1>, 0 pigment {White} }
sphere {
<0, 0, 1>,
1 texture {
pigment {
image_map { png "flag.png" map_type 1 }
scale <0.1, 0.1, 0.1>
}
}
}
生成一个图像扭曲的球体,在我看来,它偏离了中心:
我无法准确描述我的预期,但我想我希望圣乔治十字的中心位于球体正面的死点,直接面向相机。
首先,将球体移回原点,使其安全旋转。其次,使用 math.inc
中的 VAngleD()
函数计算相机位置与应用图案的方向之间的角度。最后,将球体旋转该角度并将其平移回原始位置.现在,无论后者在 XY 平面内的位置如何,图案的中心点将始终面向相机。您也可以添加类似的计算来减轻相机沿 Z 轴的平移。
#include "colors.inc"
#include "math.inc"
#declare SPHERE_LOCATION = <0, 0, 1>;
#declare CAMERA_POSITION = <30, 10, 1.5>;
#declare PATTERN_DIRECTION = x;
camera {
sky <0,0,1>
direction <-1,0,0>
right <-4/3,0,0>
location CAMERA_POSITION
look_at SPHERE_LOCATION
angle 15
}
global_settings { ambient_light White }
light_source {
<10,-20,10>
color White*2
}
background { color White }
plane { <0,0,1>, 0 pigment {White} }
sphere {
0,
1 texture {
pigment {
image_map { png "flag.png" map_type 1}
}
}
rotate z * (180 + VAngleD(CAMERA_POSITION, PATTERN_DIRECTION))
translate SPHERE_LOCATION
}
我创建了一个基本球体,并且我有一张图像,其宽高比大致为 2:1,我将其用作纹理。实际图像是客户的徽标,因此 PNG of the UK flag 是一个替身。使用基本的球体演示代码并将(缩放的)图像应用为纹理:
#include "colors.inc"
camera {
sky <0,0,1>
direction <-1,0,0>
right <-4/3,0,0>
location <30,10,1.5>
look_at <0,0,0>
angle 15
}
global_settings { ambient_light White }
light_source {
<10,-20,10>
color White*2
}
background { color White }
plane { <0,0,1>, 0 pigment {White} }
sphere {
<0, 0, 1>,
1 texture {
pigment {
image_map { png "flag.png" map_type 1 }
scale <0.1, 0.1, 0.1>
}
}
}
生成一个图像扭曲的球体,在我看来,它偏离了中心:
我无法准确描述我的预期,但我想我希望圣乔治十字的中心位于球体正面的死点,直接面向相机。
首先,将球体移回原点,使其安全旋转。其次,使用 math.inc
中的 VAngleD()
函数计算相机位置与应用图案的方向之间的角度。最后,将球体旋转该角度并将其平移回原始位置.现在,无论后者在 XY 平面内的位置如何,图案的中心点将始终面向相机。您也可以添加类似的计算来减轻相机沿 Z 轴的平移。
#include "colors.inc"
#include "math.inc"
#declare SPHERE_LOCATION = <0, 0, 1>;
#declare CAMERA_POSITION = <30, 10, 1.5>;
#declare PATTERN_DIRECTION = x;
camera {
sky <0,0,1>
direction <-1,0,0>
right <-4/3,0,0>
location CAMERA_POSITION
look_at SPHERE_LOCATION
angle 15
}
global_settings { ambient_light White }
light_source {
<10,-20,10>
color White*2
}
background { color White }
plane { <0,0,1>, 0 pigment {White} }
sphere {
0,
1 texture {
pigment {
image_map { png "flag.png" map_type 1}
}
}
rotate z * (180 + VAngleD(CAMERA_POSITION, PATTERN_DIRECTION))
translate SPHERE_LOCATION
}