资源简介
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个文件信息
相关资源
- OpenGL超级宝典 第5版 中文版 完整书签
- Computer Graphics with OpenGL 4th edition 高清
- OpenGL 4.0 Shading Language Cookbook及完整源
- Computer_Graphics_with_OpenGL_4th_ed.pdf
- opengl读入obj文件并实现平移旋转贴图
- OGL模型加载
- OPENGL 经典案例 整套
- opengl包含16个鼠标控制点的Bezier曲面
- qt下opengl的三维视角转换算法
- OpenGL鱼眼镜头特效的视频播放器 基于
- opengl实现bezier曲面的纹理贴图、鼠标
- assimp.dll
- OpenGL SDK
- OpenGL读取点云文件并绘制
- 计算机图形学大作业
- OpenCV与OpenGL实现增强现实
- 3d opengl 飞行射击游戏源码和论文
- 20个可读的obj模型文件
- opengl实现模型读取以及光照,移动等
- Opengl实现旗帜飘扬效果
- OpenGL星星公转自转
- OpenGL显示三维点云图像
- opengl绘制太阳、地球、月球
- Qt通过控件控制立方体旋转
- OpenGL编程指南 第九版英文版 OpenGL P
- 三维游戏设计师宝典(经典!)——学
- OpenGL课程设计
- OpenGL飘动的雏菊画布
- OpenGL-篮球场.rar
- opengl显示兔子程序
评论
共有 条评论