资源简介
用opgl绘制的兔子,支持放大缩小,旋转等功能,开发环境是vs2005

代码片段和文件信息
#include
#include “glew.h“
#include “glaux.h“
#include “math.h“
#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 =
this->StVec.s.Y =
this->StVec.s.Z =
this->EnVec.s.X =
this->EnVec.s.Y =
this->EnVec.s.Z = 0.0f;
this->setBounds(NewWidth NewHeight);
}
//按下鼠标记录当前对应的轨迹球的位置
void ArcBall_t::click(const Point2fT* NewPt)
{
this->_mapToSphere(NewPt &this->StVec);
}
//鼠标拖动计算旋转四元数
void ArcBall_t::drag(const Point2fT* NewPt Quat4fT* NewRot)
{
//新的位置
this->_mapToSphere(NewPt &this->EnVec);
//计算旋转
if (NewRot)
{
Vector3fT Perp;
//计算旋转轴
Vector3fCross(&Perp &this->StVec &this->EnVec);
//如果不为0
if (Vector3fLength(&Perp) > Epsilon)
{
//记录旋转轴
NewRot->s.X = Perp.s.X;
NewRot->s.Y = Perp.s.Y;
NewRot->s.Z = Perp.s.Z;
//在四元数中w=cos(a/2),a为旋转的角度
NewRot->s.W= Vector3fDot(&this->StVec &this->EnVec);
}
//是0,说明没有旋转
else
{
NewRot->s.X =
NewRot->s.Y =
NewRot->s.Z =
NewRot->s.W = 0.0f;
}
}
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 7719936 2009-04-26 12:44 bunny\48_ArcBall.ncb
文件 4537 2009-05-15 09:54 bunny\48_ArcBall.vcproj
文件 1423 2009-05-15 15:18 bunny\48_ArcBall.vcproj.20090401-1254.Administrator.user
文件 2516 2006-08-21 07:18 bunny\ArcBall.cpp
文件 13088 2006-08-13 12:53 bunny\ArcBall.h
文件 32904 2009-05-15 09:54 bunny\bunny.aps
文件 9361 2009-05-15 10:38 bunny\bunny.cpp
文件 2417019 2000-10-11 01:34 bunny\bunny.dat
文件 9415680 2009-05-15 15:18 bunny\bunny.ncb
文件 1418 2009-05-15 09:54 bunny\bunny.rc
文件 879 2009-04-26 10:04 bunny\bunny.sln
..A..H. 25600 2009-05-15 15:18 bunny\bunny.suo
文件 593920 2009-05-15 10:38 bunny\Debug\48_ArcBall.exe
文件 146 2009-04-26 10:05 bunny\Debug\48_ArcBall.exe.em
文件 212 2009-04-26 10:05 bunny\Debug\48_ArcBall.exe.em
文件 145 2009-05-15 10:38 bunny\Debug\48_ArcBall.exe.intermediate.manifest
文件 1296180 2009-05-15 10:38 bunny\Debug\48_ArcBall.ilk
文件 48332 2009-04-26 11:15 bunny\Debug\48_ArcBall.obj
文件 2345984 2009-05-15 10:38 bunny\Debug\48_ArcBall.pdb
文件 28647 2009-04-26 10:05 bunny\Debug\ArcBall.obj
文件 10062 2009-05-15 10:38 bunny\Debug\BuildLog.htm
文件 2417019 2000-10-11 01:34 bunny\Debug\bunny.dat
文件 55068 2009-05-15 10:38 bunny\Debug\bunny.obj
文件 192512 2006-03-04 03:19 bunny\Debug\glew32.dll
文件 121856 2004-08-04 08:52 bunny\Debug\glu32.dll
文件 169984 1998-08-18 23:25 bunny\Debug\glut32.dll
文件 67 2009-05-15 10:38 bunny\Debug\mt.dep
文件 39995 2009-05-15 09:41 bunny\Debug\NeHeGL.obj
文件 713728 2004-08-04 08:52 bunny\Debug\opengl32.dll
文件 396288 2009-05-15 10:38 bunny\Debug\vc80.idb
............此处省略26个文件信息
相关资源
- 计算机图形学 边填充算法实现代码
- OpenGL参考手册
- 计算机图形学课设 画板
- Qt Creator opengl实现四元数鼠标控制轨迹
- OpenGL文档,api大全,可直接查询函数
- opengl轮廓字体源代码
- MFC读三维模型obj文件
- 利用OpenGL写毛笔字算法
- 兔子养殖场管理系统
- MFC中OpenGL面和体的绘制以及动画效果
- 基于OPENGL的光线跟踪源代码368758
- VC 实现三维旋转(源码)
- 简易绘图程序(计算机图形学课程设
- 自编用openGL实现3D分形树,分形山
- OpenGL球形贴图自旋程序
- OpenGL导入贴图的Texture类
- 计算机图形学(openGL)代码
- 图形学集成程序dda、中点算法、多边
- 计算机图形实验(哈尔滨工程大学)
- 用OpenGL开发的机械臂运动仿真程序(
- OpenGL-3D坦克模拟
- OPENGL实现世界上最小的3D游戏
- VS2012OpenGL配置所需要的全部libdllh文件
- 基于OpenGL的仿蝗虫机器人三维动态仿
- 计算机图形学-全.rar
- 图形学 - OpenGL实现3种三维茶壶显示源
- opengl程序-会跳舞的骷髅
- opengl实现三维网格光顺Laplacian算法
- opengl——爆炸
- OpenGL三维地形建模
评论
共有 条评论