반응형
원문 http://cafe.naver.com/ogre3d/1556
매뉴얼 객체로 좌표축을 만드는 코드이다.
좌측 하단으로 위치를 고정해주는 코드.
Vector3 AppCamera::getScreenPos(SCREEN_POS sp)
{
Vector3 pos = getPosition();
Quaternion ori = getOrientation();
float x=20, y=13, z=40;
if (sp == LT)
return pos + ori * Vector3(-x, y,-z);
else if (sp == LB)
return pos + ori * Vector3(-x,-y,-z);
else if (sp == RT)
return pos + ori * Vector3(x,y,-z);
else //RB
return pos + ori * Vector3(x,-y,-z);
}
메인 코드
MovableObject *axis = createAxis(mSceneMgr, "AxisObj", 2);
axis->setRenderQueueGroup(RENDER_QUEUE_OVERLAY);
SceneNode *mAxisNode = mRootNode->createChildSceneNode();
mAxisNode->attachObject(axis);
in Update() : 카메라 방향과 일치하게, 씬노드를 회전시키고, 화면 하단왼쪽에 위치하게 위치를 변경 시킨다.
mAxisNode->setPosition(mCamera->getScreenPos(AppCamera::LB));
사용하는 리소스
abstract material med/color/base
{
technique
{
pass
{
//lighting off
ambient $color
diffuse $color
emissive $color
depth_check off
}
}
}
material med/color/red : med/color/base
{
set $color "1 0 0"
}
material med/color/green : med/color/base
{
set $color "0 1 0"
}
material med/color/blue : med/color/base
{
set $color "0 0 1"
}
좌표축 객체를 생성하는 코드
//-- 선언
ManualObject *createAxis(SceneManager *smgr, const String &name, float axisLen=2);
//-- 구현
#define MAT_X_AXIS "med/color/red"
#define MAT_Y_AXIS "med/color/green"
#define MAT_Z_AXIS "med/color/blue"
ManualObject *createAxis(SceneManager *smgr, const String &name, float axisLen)
{
assert(smgr && !name.empty() && axisLen > 0);
ManualObject *mobj = smgr->createManualObject(name);
Vector3 p0(0,0,0), px(axisLen,0,0), py(0,axisLen,0), pz(0,0,axisLen);
float tx = 0.15f, ty = 0.25f, tz = 0.2f;
float x = px.x + 0.2f, y = py.y + 0.5f, z= pz.z + 0.2f;
//--
mobj->begin(MAT_X_AXIS, Ogre::RenderOperation::OT_LINE_LIST);
//x-axis
mobj->position(p0); mobj->position(px);
//x-char
mobj->position(x - tx, ty, 0); mobj->position(x + tx, -ty, 0);
mobj->position(x - tx, -ty, 0); mobj->position(x + tx, ty, 0);
mobj->end();
//--
mobj->begin(MAT_Y_AXIS, Ogre::RenderOperation::OT_LINE_LIST);
//y-axis
mobj->position(p0); mobj->position(py);
//y-char
mobj->position(-tx, y + ty, 0); mobj->position(0, y, 0);
mobj->position( tx, y + ty, 0); mobj->position(0, y, 0);
mobj->position( 0, y - ty, 0); mobj->position(0, y, 0);
mobj->end();
//--
mobj->begin(MAT_Z_AXIS, Ogre::RenderOperation::OT_LINE_LIST);
//z-axis
mobj->position(p0); mobj->position(pz);
//z-char
mobj->position(-tx, tz, z); mobj->position(tx, tz, z);
mobj->position(-tx, -tz, z); mobj->position(tx, tz, z);
mobj->position(-tx, -tz, z); mobj->position(tx, -tz, z);
mobj->end();
return mobj;
}
좌측 하단에 화면 회전 각도를 표현하는 좌표계가 표현된다.
반응형
'Programming' 카테고리의 다른 글
[C#] 속도 측정용 간단 코드 (0) | 2021.03.12 |
---|---|
[MFC,OGRE] MFC에서 OGRE 사용하기 (0) | 2021.03.12 |
[VisualStudio] 빌드 후 이벤트 복사 (0) | 2021.03.12 |
[MFC] 한글 바이트 세기 (0) | 2021.03.12 |
[MFC] Active Directory 계정 정보 얻기 (0) | 2021.03.12 |