資源簡介
Qt Creator+opengl實(shí)現(xiàn)鼠標(biāo)交互,控制模型任意旋轉(zhuǎn),實(shí)現(xiàn)軌跡球,
里面的void Widget::drawarrow(GLdouble x0, GLdouble y0, GLdouble z0, GLdouble x1, GLdouble y1, GLdouble z1)這個(gè)函數(shù)實(shí)現(xiàn),空間任意兩點(diǎn)繪制箭頭的。
代碼片段和文件信息
#include?
#include?“ArcBall.h“
//軌跡球參數(shù):
//直徑????????????????????2.0f
//半徑????????????????????1.0f
//半徑平方????????????????1.0f
void?ArcBall_t::_mapToSphere(const?Point2fT*?NewPt?Vector3fT*?NewVec)?const
{
????Point2fT?TempPt;
????GLfloat?length;
????//復(fù)制到臨時(shí)變量
????TempPt?=?*NewPt;
????//把長寬調(diào)整到[-1?...?1]區(qū)間
????TempPt.s.X??=?(TempPt.s.X?*?this->AdjustWidth)??-?1.0f;
????TempPt.s.Y??=?1.0f?-?(TempPt.s.Y?*?this->AdjustHeight);
????//計(jì)算長度的平方
????length?=?(TempPt.s.X?*?TempPt.s.X)?+?(TempPt.s.Y?*?TempPt.s.Y);
????//如果點(diǎn)映射到球的外面
????if?(length?>?1.0f)
????{
????????GLfloat?norm;
????????//縮放到球上
????????norm?=?1.0f?/?FuncSqrt(length);
????????//設(shè)置z坐標(biāo)為0
????????NewVec->s.X?=?TempPt.s.X?*?norm;
????????NewVec->s.Y?=?TempPt.s.Y?*?norm;
????????NewVec->s.Z?=
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件???????4299??2014-03-13?11:14??guijiqiu\ArcBall.cpp
?????文件??????12735??2014-03-13?11:08??guijiqiu\ArcBall.h
?????文件????????387??2014-03-12?22:24??guijiqiu\guijiqiu.pro
?????文件??????17903??2014-03-14?10:46??guijiqiu\guijiqiu.pro.user
?????文件????????175??2014-03-12?22:22??guijiqiu\main.cpp
?????文件???????6100??2014-03-14?10:46??guijiqiu\widget.cpp
?????文件???????6062??2014-03-14?15:05??guijiqiu\widget.cpp.autosave
?????文件????????546??2014-03-13?09:49??guijiqiu\widget.h
?????目錄??????????0??2014-03-14?15:05??guijiqiu
-----------?---------??----------?-----??----
????????????????48207????????????????????9
評(píng)論
共有 條評(píng)論