本文整理汇总了C++中vector3::normal方法的典型用法代码示例。如果您正苦于以下问题:C++ vector3::normal方法的具体用法?C++ vector3::normal怎么用?C++ vector3::normal使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类vector3
的用法示例。
在下文中一共展示了vector3::normal方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: display
void moon::display(const vector3 &moon_pos, const vector3 &sun_pos, double max_view_dist) const
{
vector3 moon_dir = moon_pos.normal();
double moon_size = max_view_dist/20;
float moon_azimuth = atan2(-moon_dir.y, moon_dir.x);
float moon_elevation = asin(moon_dir.z);
glsl_moon->use();
glsl_moon->set_gl_texture(*map_diffuse, loc_diffcol, 0);
glsl_moon->set_gl_texture(*map_normal, loc_nrml, 1);
// transform light into object space
matrix4 roth = matrix4::rot_z(-RAD_TO_DEG(moon_azimuth));
matrix4 rotv = matrix4::rot_y(-RAD_TO_DEG(moon_elevation));
matrix4 model_mat = roth*rotv;
vector3 l = model_mat.inverse() * sun_pos;
vector3 nl = vector3(-l.y, l.z, -l.x).normal(); // OpenGL coordinates
glsl_moon->set_uniform(loc_lightdir, nl);
// render moon
glPushMatrix();
model_mat.multiply_gl();
glTranslated(0.95*max_view_dist, 0, 0);
primitives::textured_quad(vector3f( 0, moon_size, moon_size),
vector3f( 0, -moon_size, moon_size),
vector3f( 0, -moon_size, -moon_size),
vector3f( 0, moon_size, -moon_size),
*map_diffuse).render_plain();
glPopMatrix();
}