本文整理汇总了C++中Fplane::intersectRayPoint方法的典型用法代码示例。如果您正苦于以下问题:C++ Fplane::intersectRayPoint方法的具体用法?C++ Fplane::intersectRayPoint怎么用?C++ Fplane::intersectRayPoint使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Fplane
的用法示例。
在下文中一共展示了Fplane::intersectRayPoint方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: UI
void CLevelGraph::draw_nodes ()
{
CGameObject* O = smart_cast<CGameObject*> (Level().CurrentEntity());
Fvector POSITION = O->Position();
POSITION.y += 0.5f;
// display
Fvector P = POSITION;
// CPosition Local;
// vertex_position (Local,P);
u32 ID = O->ai_location().level_vertex_id();
CGameFont* F = UI().Font().pFontDI;
F->SetHeightI (.02f);
F->OutI (0.f,0.5f,"%f,%f,%f",VPUSH(P));
// float x,z;
// unpack_xz (Local,x,z);
// F->Out (0.f,0.55f,"%3d,%4d,%3d -> %d", iFloor(x),iFloor(Local.y()),iFloor(z),u32(ID));
svector<u32,128> linked;
{
const_iterator i,e;
begin (ID,i,e);
for(; i != e; ++i)
linked.push_back(value(ID,i));
}
// render
float sc = header().cell_size()/16;
float st = 0.98f*header().cell_size()/2;
float tt = 0.01f;
Fvector DUP; DUP.set(0,1,0);
//RCache.set_Shader (sh_debug);
DRender->SetShader(sh_debug);
F->SetColor (color_rgba(255,255,255,255));
//////////////////////////////////////////////////////////////////////////
Fvector min_position,max_position;
max_position = min_position = Device.vCameraPosition;
min_position.sub(30.f);
max_position.add(30.f);
CLevelGraph::const_vertex_iterator I, E;
if (valid_vertex_position(min_position))
I = std::lower_bound(begin(),end(),vertex_position(min_position).xz(),&vertex::predicate2);
else
I = begin();
if (valid_vertex_position(max_position)) {
E = std::upper_bound(begin(),end(),vertex_position(max_position).xz(),&vertex::predicate);
if (E != end()) ++E;
}
else
E = end();
//////////////////////////////////////////////////////////////////////////
for ( ; I != E; ++I)
{
const CLevelGraph::CVertex& N = *I;
Fvector PC;
PC = vertex_position(N);
u32 Nid = vertex_id(I);
if (Device.vCameraPosition.distance_to(PC)>30) continue;
float sr = header().cell_size();
if (::Render->ViewBase.testSphere_dirty(PC,sr)) {
u32 LL = 255;
u32 CC = D3DCOLOR_XRGB(0,0,255);
u32 CT = D3DCOLOR_XRGB(LL,LL,LL);
u32 CH = D3DCOLOR_XRGB(0,128,0);
BOOL bHL = FALSE;
if (Nid==u32(ID)) { bHL = TRUE; CT = D3DCOLOR_XRGB(0,255,0); }
else {
for (u32 t=0; t<linked.size(); ++t) {
if (linked[t]==Nid) { bHL = TRUE; CT = CH; break; }
}
}
// unpack plane
Fplane PL; Fvector vNorm;
pvDecompress(vNorm,N.plane());
PL.build (PC,vNorm);
// create vertices
Fvector v,v1,v2,v3,v4;
v.set(PC.x-st,PC.y,PC.z-st); PL.intersectRayPoint(v,DUP,v1); v1.mad(v1,PL.n,tt); // minX,minZ
v.set(PC.x+st,PC.y,PC.z-st); PL.intersectRayPoint(v,DUP,v2); v2.mad(v2,PL.n,tt); // maxX,minZ
v.set(PC.x+st,PC.y,PC.z+st); PL.intersectRayPoint(v,DUP,v3); v3.mad(v3,PL.n,tt); // maxX,maxZ
v.set(PC.x-st,PC.y,PC.z+st); PL.intersectRayPoint(v,DUP,v4); v4.mad(v4,PL.n,tt); // minX,maxZ
//.........这里部分代码省略.........