資源簡介
opengl讀取.obj三維模型(可自己創建放入.obj文件夾中),arcball實現鼠標點擊實現模型變換,及鍵盤控制放大縮小。
代碼片段和文件信息
//#include?“stdafx.h“
#define?GLUT_DISABLE_ATEXIT_HACK?
#include?????????
#include?????????????????????????????????????
#include?“ArcBall.h“?????????????????????????????????
//軌跡球參數:
//直徑????????????????????2.0f
//半徑????????????????????1.0f
//半徑平方????????????????1.0f
void?ArcBall_t::_mapToSphere(const?Point2fT*?NewPt?Vector3fT*?NewVec)?const
{
Point2fT?TempPt;
GLfloat?length;
//復制到臨時變量
TempPt?=?*NewPt;
//把長寬調整到[-1?...?1]區間
TempPt.s.X?=?(TempPt.s.X?*?this->AdjustWidth)?-?1.0f;
TempPt.s.Y?=?1.0f?-?(TempPt.s.Y?*?this->AdjustHeight);
//計算長度的平方
length?=?(TempPt.s.X?*?TempPt.s.X)?+?(TempPt.s.Y?*?TempPt.s.Y);
//如果點映射到球的外面
if?(length?>?1.0f)
{
GLfloat?norm;
//縮放到球上
norm?=?1.0f?/?FuncSqrt(length);
//設置z坐標為0
NewVec->s.X?=?TempPt.s.X?*?norm;
NewVec->s.Y?=?TempPt.s.Y?*?norm;
NewVec->s.Z?=?0.0f;
}
//如果在球內
else
{
//利用半徑的平方為1求出z坐標
NewVec->s.X?=?TempPt.s.X;
NewVec->s.Y?=?TempPt.s.Y;
NewVec->s.Z?=?FuncSqrt(1.0f?-?length);
}
}
ArcBall_t::ArcBall_t(GLfloat?NewWidth?GLfloat?NewHeight)
{
this->StVec.s.X?=?0.0f;
this->StVec.s.Y?=?0.0f;
this->StVec.s.Z?=?0.0f;
this->EnVec.s.X?=?0.0f;
this->EnVec.s.Y?=?0.0f;
this->EnVec.s.Z?=?0.0f;
Matrix4fSetIdentity(&Transform);
Matrix3fSetIdentity(&LastRot);
Matrix3fSetIdentity(&ThisRot);
this->isDragging?=?false;
this->isClicked?=?false;
this->isRClicked?=?false;
this->isZooming?=?false;
this->zoomRate?=?1;
this->setBounds(NewWidth?NewHeight);
}
void?ArcBall_t::upstate()
{
if?(!this->isZooming?&&?this->isRClicked)?{????????????????????//?開始拖動
this->isZooming?=?true;????????????????????????????????????????//?設置拖動為變量為true????????
this->LastPt?=?this->MousePt;
this->lastZoomRate?=?this->zoomRate;
}
else?if?(this->isZooming)?{//正在拖動
if?(this->isRClicked)?{????????????????//拖動????????
Point2fSub(&this->MousePt?&this->LastPt);
this->zoomRate?=?this->lastZoomRate?+?this->MousePt.s.X?*?this->AdjustWidth?*?2;
}
else?{????????????????????????????????????????????//停止拖動
this->isZooming?=?false;
}
}
else?if?(!this->isDragging?&&?this->isClicked)?{???????????????????????????????????????????????//?如果沒有拖動
this->isDragging?=?true;????????????????????????????????????????//?設置拖動為變量為true
this->LastRot?=?this->ThisRot;
this->click(&this->MousePt);
}
else?if?(this->isDragging)?{
if?(this->isClicked)?{????????????????????????????????????????????//如果按住拖動
Quat4fT?????ThisQuat;
this->drag(&this->MousePt?&ThisQuat);????????????????????????//?更新軌跡球的變量
Matrix3fSetRotationFromQuat4f(&this->ThisRot?&ThisQuat);???????//?計算旋轉量
Matrix3fMulMatrix3f(&this->ThisRot?&this->LastRot);
Matrix4fSetRotationFromMatrix3f(&this->Transform?&this->ThisRot);
}
else????????????????????????????????????????????????????????//?如果放開鼠標,設置拖動為false
this->isDragging?=?false;
}
}
//按下鼠標記錄當前對應的軌跡球的位置
void????ArcBall_t::click(co
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
????..A..H.?????27648??2018-03-29?14:12??MyArcball\.vs\MyArcball\v14\.suo
?????文件?????230912??2018-03-29?14:11??MyArcball\Debug\MyArcball.exe
?????文件?????943380??2018-03-29?14:11??MyArcball\Debug\MyArcball.ilk
?????文件????1560576??2018-03-29?14:11??MyArcball\Debug\MyArcball.pdb
?????文件???????3901??2018-03-28?23:25??MyArcball\MyArcball\Arcball.cpp
?????文件??????11211??2018-03-28?15:41??MyArcball\MyArcball\ArcBall.h
?????文件??????34441??2018-03-29?14:07??MyArcball\MyArcball\Debug\Arcball.obj
?????文件?????823261??2018-03-29?14:07??MyArcball\MyArcball\Debug\loadmodel.obj
?????文件???????1011??2018-03-29?14:12??MyArcball\MyArcball\Debug\MyArcball.log
?????文件?????249722??2018-03-29?14:12??MyArcball\MyArcball\Debug\MyArcball.obj
?????文件???????2070??2018-03-29?14:12??MyArcball\MyArcball\Debug\MyArcball.tlog\CL.command.1.tlog
?????文件??????55458??2018-03-29?14:12??MyArcball\MyArcball\Debug\MyArcball.tlog\CL.read.1.tlog
?????文件???????1596??2018-03-29?14:12??MyArcball\MyArcball\Debug\MyArcball.tlog\CL.write.1.tlog
?????文件???????1920??2018-03-29?14:11??MyArcball\MyArcball\Debug\MyArcball.tlog\li
?????文件???????4572??2018-03-29?14:11??MyArcball\MyArcball\Debug\MyArcball.tlog\li
?????文件????????776??2018-03-29?14:11??MyArcball\MyArcball\Debug\MyArcball.tlog\li
?????文件????????205??2018-03-29?14:11??MyArcball\MyArcball\Debug\MyArcball.tlog\MyArcball.lastbuildstate
?????文件?????863232??2018-03-29?14:12??MyArcball\MyArcball\Debug\vc140.idb
?????文件?????577536??2018-03-29?14:12??MyArcball\MyArcball\Debug\vc140.pdb
?????文件??????10611??2018-03-29?14:05??MyArcball\MyArcball\loadmodel.cpp
?????文件???????1107??2018-03-29?14:05??MyArcball\MyArcball\loadmodel.h
?????文件???????6293??2018-03-29?14:12??MyArcball\MyArcball\MyArcball.cpp
?????文件???????7846??2018-03-29?14:09??MyArcball\MyArcball\MyArcball.vcxproj
?????文件???????1345??2018-03-29?14:09??MyArcball\MyArcball\MyArcball.vcxproj.filters
?????文件??????66707??2017-04-18?19:10??MyArcball\MyArcball\obj\bird.obj
?????文件????6656387??2018-03-27?23:19??MyArcball\MyArcball\obj\color-tomota.obj
?????文件??????65024??2018-03-28?23:55??MyArcball\MyArcball\obj\rock.obj
?????文件?????394444??2017-04-18?19:10??MyArcball\MyArcball\obj\rubby.obj
?????文件??????17844??2017-04-18?19:10??MyArcball\MyArcball\obj\torus.obj
?????文件????6659036??2018-03-27?22:26??MyArcball\MyArcball\obj\tri-tomato.obj
............此處省略15個文件信息
評論
共有 條評論