本文整理汇总了C++中vector3d::NormalizedSafe方法的典型用法代码示例。如果您正苦于以下问题:C++ vector3d::NormalizedSafe方法的具体用法?C++ vector3d::NormalizedSafe怎么用?C++ vector3d::NormalizedSafe使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类vector3d
的用法示例。
在下文中一共展示了vector3d::NormalizedSafe方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Render
void HyperspaceCloud::Render(const vector3d &viewCoords, const matrix4x4d &viewTransform)
{
Render::State::UseProgram(Render::simpleShader);
glDisable(GL_LIGHTING);
glEnable(GL_BLEND);
glPushMatrix();
glTranslatef(float(viewCoords.x), float(viewCoords.y), float(viewCoords.z));
// face the camera dammit
vector3d zaxis = viewCoords.NormalizedSafe();
vector3d xaxis = vector3d(0,1,0).Cross(zaxis).Normalized();
vector3d yaxis = zaxis.Cross(xaxis);
matrix4x4d rot = matrix4x4d::MakeRotMatrix(xaxis, yaxis, zaxis).InverseOf();
glMultMatrixd(&rot[0]);
// precise to the rendered frame (better than PHYSICS_HZ granularity)
double preciseTime = Pi::game->GetTime() + Pi::GetGameTickAlpha()*Pi::game->GetTimeStep();
float radius = 1000.0f + 200.0f*float(noise(10.0*preciseTime, 0, 0));
if (m_isArrival) {
make_circle_thing(radius, Color(1.0,1.0,1.0,1.0), Color(0.0,0.0,1.0,0.0));
} else {
make_circle_thing(radius, Color(1.0,1.0,1.0,1.0), Color(1.0,0.0,0.0,0.0));
}
glPopMatrix();
glDisable(GL_BLEND);
glEnable(GL_LIGHTING);
}
示例2: Render
void Star::Render(Graphics::Renderer *renderer, const Camera *camera, const vector3d &viewCoords, const matrix4x4d &viewTransform)
{
renderer->SetDepthTest(false);
glPushMatrix();
double radius = GetClipRadius();
double rad = radius;
vector3d fpos = viewCoords;
double len = fpos.Length();
while (len > 1000.0f) {
rad *= 0.25;
fpos = 0.25*fpos;
len *= 0.25;
}
matrix4x4d trans = matrix4x4d::Identity();
trans.Translate(float(fpos.x), float(fpos.y), float(fpos.z));
// face the camera dammit
vector3d zaxis = viewCoords.NormalizedSafe();
vector3d xaxis = vector3d(0,1,0).Cross(zaxis).Normalized();
vector3d yaxis = zaxis.Cross(xaxis);
matrix4x4d rot = matrix4x4d::MakeRotMatrix(xaxis, yaxis, zaxis).InverseOf();
renderer->SetTransform(trans * rot);
const float *col = StarSystem::starRealColors[GetSystemBody()->type];
Random(rand);
renderer->SetBlendMode(BLEND_ALPHA);
//render star halo
VertexArray va(ATTRIB_POSITION | ATTRIB_DIFFUSE);
const Color bright(col[0], col[1], col[2], 1.f);
const Color dark(0.f, 0.f, 0.f, 0.f);
va.Add(vector3f(0.f), bright);
for (float ang=0; ang<2*M_PI; ang+=0.26183+rand.Double(0,0.4)) {
va.Add(vector3f(rad*sin(ang), rad*cos(ang), 0), dark);
}
va.Add(vector3f(0.f, rad, 0.f), dark);
renderer->DrawTriangles(&va, Graphics::vtxColorMaterial, TRIANGLE_FAN);
renderer->SetBlendMode(BLEND_SOLID);
glPopMatrix();
renderer->SetDepthTest(true);
TerrainBody::Render(renderer, camera, viewCoords, viewTransform);
}
示例3: l_vector_unit
static int l_vector_unit(lua_State *L)
{
LUA_DEBUG_START(L);
if (lua_isnumber(L, 1)) {
double x = luaL_checknumber(L, 1);
double y = luaL_checknumber(L, 2);
double z = luaL_checknumber(L, 3);
const vector3d v = vector3d(x, y, z);
LuaVector::PushToLua(L, v.NormalizedSafe());
} else {
const vector3d *v = LuaVector::CheckFromLua(L, 1);
LuaVector::PushToLua(L, v->NormalizedSafe());
}
LUA_DEBUG_END(L, 1);
return 1;
}
示例4: Render
void Star::Render(Graphics::Renderer *renderer, const Camera *camera, const vector3d &viewCoords, const matrix4x4d &viewTransform)
{
double radius = GetClipRadius();
double rad = radius;
vector3d fpos = viewCoords;
double len = fpos.Length();
while (len > 1000.0f) {
rad *= 0.25;
fpos = 0.25*fpos;
len *= 0.25;
}
matrix4x4d trans = matrix4x4d::Identity();
trans.Translate(float(fpos.x), float(fpos.y), float(fpos.z));
// face the camera dammit
vector3d zaxis = viewCoords.NormalizedSafe();
vector3d xaxis = vector3d(0,1,0).Cross(zaxis).Normalized();
vector3d yaxis = zaxis.Cross(xaxis);
matrix4x4d rot = matrix4x4d::MakeRotMatrix(xaxis, yaxis, zaxis).Inverse();
renderer->SetTransform(trans * rot);
Random rand;
//render star halo
VertexArray va(ATTRIB_POSITION | ATTRIB_DIFFUSE);
const Color bright(StarSystem::starRealColors[GetSystemBody()->GetType()]);
const Color dark(Color::BLANK);
va.Add(vector3f(0.f), bright);
for (float ang=0; ang<2*M_PI; ang+=0.26183+rand.Double(0,0.4)) {
va.Add(vector3f(rad*sin(ang), rad*cos(ang), 0), dark);
}
va.Add(vector3f(0.f, rad, 0.f), dark);
renderer->DrawTriangles(&va, m_haloState, Graphics::vtxColorMaterial, TRIANGLE_FAN);
TerrainBody::Render(renderer, camera, viewCoords, viewTransform);
renderer->GetStats().AddToStatCount(Graphics::Stats::STAT_STARS, 1);
}
示例5: Render
void HyperspaceCloud::Render(Renderer *renderer, const Camera *camera, const vector3d &viewCoords, const matrix4x4d &viewTransform)
{
matrix4x4d trans = matrix4x4d::Identity();
trans.Translate(float(viewCoords.x), float(viewCoords.y), float(viewCoords.z));
// face the camera dammit
vector3d zaxis = viewCoords.NormalizedSafe();
vector3d xaxis = vector3d(0,1,0).Cross(zaxis).Normalized();
vector3d yaxis = zaxis.Cross(xaxis);
matrix4x4d rot = matrix4x4d::MakeRotMatrix(xaxis, yaxis, zaxis).InverseOf();
renderer->SetTransform(trans * rot);
// precise to the rendered frame (better than PHYSICS_HZ granularity)
const double preciseTime = Pi::game->GetTime() + Pi::GetGameTickAlpha()*Pi::game->GetTimeStep();
// Flickering gradient circle, departure clouds are red and arrival clouds blue
// XXX could just alter the scale instead of recreating the model
const float radius = 1000.0f + 200.0f*float(noise(10.0*preciseTime, 0, 0));
m_graphic.vertices->Clear();
Color outerColor = m_isArrival ? Color::BLUE : Color::RED;
outerColor.a = 0;
make_circle_thing(*m_graphic.vertices.get(), radius, Color::WHITE, outerColor);
renderer->DrawTriangles(m_graphic.vertices.get(), m_graphic.renderState, m_graphic.material.get(), TRIANGLE_FAN);
}