资源简介
用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个文件信息
相关资源
- objdata.zip
- 基于OpenGL的描点绘制Bezier曲线
- opengl天空盒的效果源代码
- Qt5版NeHe OpenGL教程6-10
- 基于opengl下的选择物体局部放大
- OPENGL粒子系统之喷泉
- 3D opengl魔方
- 《计算机图形学课程设计》源代码
- opengles加载3d模型(纹理+光照)
- opengl画的小花
- OpenGL三维图形系统开发与实用技术.
- opengl 立体球体的实现
- loop 细分,结合openGL
- opengl中加载dem方法和贴纹理
- OpenGL写的一个带背景音乐的场景
- opengl房屋设计2
- 知名的斯坦福兔子的三维点云数据,
- 内蒙古大学计算机图形学作业——画
- OpenGL绘制的鱼轮廓曲线
- 3D OPENGL 飞行游戏源代码
- OpenGL 超酷三维动画DEMO
- OpenGL蓝宝书所需库可直接使用
- OPENGL 画地球 真实感超强-纹理贴图 光
- OPENGL中的GLUT源代码
- 计算机图形学三维变换课程设计
- Qt OpenGL 多图片纹理例程
- opengl中天空盒的绘制
- OpenGL下立方体 正四面体绘制与贴图。
- 资源文件此资源是作者博客教程所用
- openGL完成雪花飞舞源码
评论
共有 条评论