CodeForge QQ客服 CodeForge 400电话 客服电话 4006316121
首页 » 源代码 » Obj模型加载并显示 » OpenObjModel/OpenObjModel/ArcBall.cpp

OpenObjModel/OpenObjModel/ArcBall.cpp ( 文件浏览 )

文件源自:Obj模型加载并显示
  • 979395mmm 发布于2018-04-14
  • 浏览次数:0
  • 下载次数:0
  • 下载需 1 积分
  • 侵权举报
			////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////ArcBall.cpp////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//#include <windows.h>                               
#include <glew.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     =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);              
...
...
(完整源码请下载查看)
			
...
展开> <收缩

下载源码到电脑,阅读使用更方便

1 积分

快速下载
还剩0行未阅读,继续阅读
云测速

源码文件列表

温馨提示: 点击源码文件名可预览文件内容哦 ^_^
...
名称 大小 修改日期
applicationhost.config82.95 kB2018-04-08 14:18
.suo41.50 kB2018-04-14 13:12
OpenObjModel.exe143.00 kB2018-04-14 13:08
OpenObjModel.ilk765.73 kB2018-04-14 13:08
OpenObjModel.pdb2.64 MB2018-04-14 13:08
ArcBall.h11.61 kB2018-04-14 13:11
char.h448.00 B2018-03-21 18:47
glew.h1.15 MB2018-04-10 17:20
glu.h15.99 kB2018-04-11 17:25
glut.h20.94 kB1998-08-18 16:24
objloader.h1.20 kB2018-04-13 11:43
stdafx.h1.03 kB2018-04-10 16:26
ArcBall.cpp4.59 kB2018-04-14 13:11
ArcBall.obj33.37 kB2018-04-14 13:08
GLRect.obj25.24 kB2018-04-13 10:55
main.obj398.39 kB2018-04-14 13:08
MousePoint.obj51.32 kB2018-04-13 10:56
MouseTri.obj148.68 kB2018-04-13 10:56
OpenObjModel.log204.00 B2018-04-14 13:08
CL.command.1.tlog7.30 kB2018-04-14 13:08
CL.read.1.tlog77.36 kB2018-04-14 13:08
CL.write.1.tlog3.79 kB2018-04-14 13:08
link.command.1.tlog3.23 kB2018-04-14 13:08
link.read.1.tlog3.13 kB2018-04-14 13:08
link.write.1.tlog458.00 B2018-04-14 13:08
OpenObjModel.lastbuildstate185.00 B2018-04-14 13:08
Render3Dbox.obj55.89 kB2018-04-13 11:14
vc140.idb923.00 kB2018-04-14 13:08
vc140.pdb524.00 kB2018-04-14 13:08
flamingo.obj263.26 kB2018-04-13 11:07
GLRect.cpp1.46 kB2018-04-13 10:45
main.cpp4.14 kB2018-04-14 13:11
MousePoint.cpp1.56 kB2018-04-13 10:49
MouseTri.cpp1.82 kB2018-04-13 10:49
OpenObjModel.vcxproj7.37 kB2018-04-14 13:06
OpenObjModel.vcxproj.filters1.01 kB2018-04-14 13:06
Render3Dbox.cpp2.59 kB2018-04-13 11:15
renderBall.cpp1.50 kB2018-04-13 10:49
shading.cpp1.68 kB2018-04-13 10:49
Simple.cpp387.00 B2018-04-13 10:49
vertexTest.cpp667.00 B2018-04-13 10:49
OpenObjModel.sln1.29 kB2018-04-14 13:12
OpenObjModel.VC.db54.55 MB2018-04-14 13:12
v140.00 B2018-04-13 10:36
OpenObjModel.tlog0.00 B2018-04-14 13:08
config0.00 B2018-04-13 11:06
OpenObjModel0.00 B2018-04-13 10:36
Debug0.00 B2018-04-14 13:08
.vs0.00 B2018-04-13 11:06
Debug0.00 B2018-04-14 13:06
include0.00 B2018-04-14 13:11
OpenObjModel0.00 B2018-04-14 13:11
OpenObjModel0.00 B2018-04-14 13:12
云测速

OpenObjModel/OpenObjModel/ArcBall.cpp (12.55 MB)

需要 1 积分
您持有 积分

CodeForge积分(原CF币)全新升级,功能更强大,使用更便捷,不仅可以用来下载海量源代码马上还可兑换精美小礼品了 了解更多

您的积分不足

支付宝优惠套餐快速获取 30 积分

订单支付完成后,积分将自动加入到您的账号。以下是优惠期的人民币价格,优惠期过后将恢复美元价格。

更多付款方式:网银PayPal

上传代码,免费获取

您本次下载所消耗的积分将转交上传作者。

同一源码,30天内重复下载,只扣除一次积分。

登录 CodeForge

还没有CodeForge账号? 立即注册
关注微博
联系客服

Switch to the English version?

Yes
CodeForge 英文版
No
CodeForge 中文版

完善个人资料,获价值¥30元积分奖励!

^_^"呃 ...

Sorry!这位大神很神秘,未开通博客呢,请浏览一下其他的吧
好的