亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? billiardsplayview.cpp

?? 桌面臺(tái)球3D 開發(fā)環(huán)境VC 庫(kù)DIRECTX8.1以上
?? CPP
?? 第 1 頁(yè) / 共 5 頁(yè)
字號(hào):
    centerX = w / 2.0f;
	centerY = h / 2.0f;
	radius  = (w > h) ? centerY : centerX ;

	if (init)
	{
		Trackball( 0, radius, centerX, centerY, (float)x, (float)(h-y), 
		           m_spinAxes[0], m_spinAxes[1], m_spinAxes[2], m_spinAngle);
	}
	else if ( nFlags & MK_LBUTTON )
	{
	    Trackball(1, radius, centerX, centerY, (float)x, (float)(h-y), 
			      m_spinAxes[0], m_spinAxes[1], m_spinAxes[2], m_spinAngle);
		SpinGlobal(m_spinAxes, m_spinAngle);
	}
}

void CBilliardsPlayView::SpinGlobal(float axes[], float angle)
{
	EyeRotate(m_vProjectCenter, axes, angle, m_sEye );
	DrawScene(); 
}

void CBilliardsPlayView::MouseZoom(UINT nFlags, int x, int y)
{
	float w, h;
	float scale;
	static float oldY, dy ;

	RECT rect;
	GetClientRect( &rect);
	w =(float)rect.right;
	h =(float)rect.bottom;
	h = (h == 0.0f) ? 1.0f : h;

	if( m_bLButtonDown && (nFlags & MK_LBUTTON))
	{
		dy=oldY-y;
		scale=1.0f+dy/h;
		Zoom(scale);
		oldY=(float)y;
	}
	else
	{
		oldY=(float)y;
	}
}

void CBilliardsPlayView::Zoom(float scale)
{
	double a[1][2];
	a[0][0] = 1.0;
	a[0][1] = 2.0;
	double *p;
	p = (double *)a;
	if(scale<0.001) return;
	m_fViewHeight/=scale;
	Project();
	DrawScene();
}

void CBilliardsPlayView::MouseTranslate(UINT nFlags, int x, int y)
{
	float w, h;
	static float oldX, oldY, dx, dy, d[3] ;

	RECT rect;
	GetClientRect( &rect);
	w =(float)rect.right;
	h =(float)rect.bottom;
	h = (h == 0.0f) ? 1.0f : h;

	if( m_bLButtonDown && (nFlags & MK_LBUTTON))
	{
		dx=x-oldX;
		dy=oldY-y;
		d[0]=m_fViewWidth*dx/w*0.8f;
		d[1]=m_fViewHeight*dy/h*0.8f;           
		d[2]=0.0f;
		Translate(d);   
		oldX=(float)x;
		oldY=(float)y;
	}
	else
	{
		oldX=(float)x;
		oldY=(float)y;
	}
}

void CBilliardsPlayView::Translate(float d[])
{
	EyeTranslate(d, m_sEye);
	DrawScene();
}

void CBilliardsPlayView::OnMouseMove(UINT nFlags, CPoint point) 
{
    CBilliardsFormView *pView=(CBilliardsFormView *)(((CMainFrame *)AfxGetMainWnd())->m_wndSplitter.GetPane(0,1));

    if ( nFlags & MK_LBUTTON )
	{
		if (m_nMouseAct == MOUSE_SPIN)
		{
			MouseSpinGlobal(nFlags, point.x, point.y, 0);
		}
		else if (m_nMouseAct == MOUSE_ZOOM)
		{
			MouseZoom(nFlags, point.x, point.y);
		}
		else if (m_nMouseAct == MOUSE_TRANSLATE)
		{
			MouseTranslate(nFlags, point.x, point.y);
		}
	
		
		else if (m_nMouseAct == MOUSE_SELECT)
		{
			if (m_nSelectObject == 1)
			{
				int x,y;
                int j;

                //float slope;
                //float a,b,c;//斜率
                //float tempx,tempx1,tempx2,tempz,tempz1,tempz2,templength;

                
                float length=INFINITY;  //當(dāng)無窮大用;

				GLdouble modelMatrix[16];
				GLdouble projMatrix[16];
				GLint viewport[4];
				RECT rect;
				GLdouble dx,dy,dz;
				GLdouble sx,sy,sz;
				GLdouble ox,oy,oz;
				float tmpf;

				x = point.x;
				y = point.y;

               

                glMatrixMode(GL_MODELVIEW);
				glPushMatrix();

				glTranslatef(0.0f, TABLE_HEIGHT/2.0+2.0*BALL_RADIUS, 0.0f);
				glTranslatef(m_fPosition[0][0],m_fPosition[0][1],m_fPosition[0][2]);

				GetClientRect(&rect);
				y = rect.bottom-y;

				glGetDoublev(GL_MODELVIEW_MATRIX,modelMatrix);
				glGetDoublev(GL_PROJECTION_MATRIX,projMatrix);
				glGetIntegerv(GL_VIEWPORT,viewport);
				gluProject(m_fDirection[0],0.0f,m_fDirection[2],
							modelMatrix,projMatrix,viewport,
							&sx,&sy,&sz);
				gluProject(0.0f,0.0f,0.0f,
							modelMatrix,projMatrix,viewport,
							&ox,&oy,&oz);
				tmpf =  sqrt(((float)x-ox)*((float)x-ox)+((float)y-oy)*((float)y-oy))/
						sqrt((sx-ox)*(sx-ox)+(sy-oy)*(sy-oy));
				gluProject(tmpf*m_fDirection[0],0.0f,tmpf*m_fDirection[2],
							modelMatrix,projMatrix,viewport,
							&sx,&sy,&sz);
				gluUnProject((float)x,(float)y,sz,
							modelMatrix,projMatrix,viewport,
							&dx,&dy,&dz);

				m_fDirection[0] = dx;
				m_fDirection[2] = dz;

				m_fStrength = tmpf = sqrt(dx*dx+dz*dz);

                /*
				 if(dx!=0){
                    slope=dz/dx;
                    for (j=0; j<NUM_BALL; j++)
                        if (m_bVisible[j]){
                            b=-(2.0*m_fPosition[j][0]+2.0*m_fPosition[0][0]*slope-(2.0*m_fPosition[j][2]*slope));
                            a=slope;
                            c=m_fPosition[j][0]*m_fPosition[j][0]*slope*slope-2.0*m_fPosition[0][2]*m_fPosition[j][2]*slope+m_fPosition[j][2]*m_fPosition[j][2]-4.0*BALL_RADIUS*BALL_RADIUS;
                            if(b*b-4*a*c>0){
                                tempx2=(-b-sqrt(b*b-4*a*c))/(2*a);
                                tempx1=(-b+sqrt(b*b-4*a*c))/(2*a);
                                tempx=fabs(tempx1-m_fPosition[0][0])-fabs(tempx2-m_fPosition[0][0])<0?tempx1:tempx2;
                                tempz=slope*(tempx-m_fPosition[0][0])+m_fPosition[0][2];
                                templength=sqrt((tempx-m_fPosition[0][0])*(tempx-m_fPosition[0][0])+(tempz-m_fPosition[0][2])*(tempz-m_fPosition[0][2]));
                                if(length>templength){
                                    length=templength;
                                    hitx=tempx;
                                    hitz=tempz;
                                }
                            }
                        }
                }
                else{
                    for (j=0; j<NUM_BALL; j++)
                        if (m_bVisible[j]){
                            if(fabs(m_fPosition[j][2]-m_fPosition[0][2])<2*BALL_RADIUS){
                                tempz1=m_fPosition[j][2]-sqrt(4*BALL_RADIUS*BALL_RADIUS-(m_fPosition[0][0]-m_fPosition[j][0])*(m_fPosition[0][0]-m_fPosition[j][0]));
                                tempz2=m_fPosition[j][2]+sqrt(4*BALL_RADIUS*BALL_RADIUS-(m_fPosition[0][0]-m_fPosition[j][0])*(m_fPosition[0][0]-m_fPosition[j][0]));
                                tempz=fabs(tempz1-m_fPosition[0][2])-fabs(tempz2-m_fPosition[0][2])<0?tempz1:tempz2;
                                templength=fabs(m_fPosition[j][2]-m_fPosition[0][2]);
                                if(length>templength){
                                    length=templength;
                                    hitx=m_fPosition[0][0];
                                    hitz=tempz;
                                }
                            }
                        }
                }
                */

                VEC3_V_OP_S(m_fDirection,m_fDirection,/,tmpf);
				if (tmpf<16.0)
					tmpf = 16.0;
				else if (tmpf>30.0)
					tmpf = 30.0;
				tmpf = (tmpf-15.0)*2.0/3.0;
				VEC3_V_OP_S(m_fVelocity[0],m_fDirection,*,tmpf);
                pView->m_ctlProgressPower.SetPos(DOTPROD3(m_fVelocity[0],m_fVelocity[0]));
				glMatrixMode(GL_MODELVIEW);
				glPopMatrix();
				DrawScene();
			}
		}
	}
	CView::OnMouseMove(nFlags, point);
}

void CBilliardsPlayView::OnLButtonDown(UINT nFlags, CPoint point) 
{
    m_spinAngle = 0.0f;
	if (m_nMouseAct == MOUSE_SPIN)
	{
		MouseSpinGlobal(nFlags, point.x, point.y, 1);
	}
	else if (m_nMouseAct == MOUSE_ZOOM)
	{
		MouseZoom(nFlags, point.x, point.y);
	}
	else if (m_nMouseAct == MOUSE_TRANSLATE)
	{
		MouseTranslate(nFlags, point.x, point.y);
	}
	else if (m_nMouseAct == MOUSE_SELECT)
	{
		if (m_bCanHit)
		{
			int hit = MouseSelect(point.x, point.y);
			if (hit>0)
			{
				GLuint name[3];
				m_nSelectObject = GetSelectObjFront(hit, name);
			}
		}
	}

    
	CView::OnLButtonDown(nFlags, point);
/*
    MSG msg;
	while(::PeekMessage( &msg, m_hWnd,
		WM_MOUSEMOVE, WM_MOUSEMOVE,
		PM_REMOVE))
		;
*/
	m_bLButtonDown = TRUE;
}



void CBilliardsPlayView::OnLButtonUp(UINT nFlags, CPoint point) 
{
    m_bLButtonDown = FALSE;
	m_nSelectObject = -1;
/*
	MSG msg;
	while(::PeekMessage( &msg, m_hWnd,
		WM_MOUSEMOVE, WM_MOUSEMOVE,
		PM_REMOVE))
		;	
*/
	CView::OnLButtonUp(nFlags, point);
}

int CBilliardsPlayView::MouseSelect(int x, int y)
{
	RECT rect;
	float winH;
	GLint viewport[4];

	glSelectBuffer(100, m_SelectBuffer);
	glRenderMode(GL_SELECT);
	glInitNames();

	glMatrixMode(GL_PROJECTION);
	glPushMatrix();
	glLoadIdentity();
	GetClientRect( &rect);
	winH =(float)rect.bottom;
	winH =(winH == 0.0f) ? 1.0f : winH;
	glGetIntegerv(GL_VIEWPORT,viewport);
	gluPickMatrix(x, winH - y, 5, 5, viewport);
	glFrustum(-m_fViewWidth,  m_fViewWidth,
		      -m_fViewHeight, m_fViewHeight,
		      m_fViewNear,    m_fViewFar );
	gluLookAt(m_sEye.origin.x,m_sEye.origin.y,m_sEye.origin.z,
			  m_sEye.center.x,m_sEye.center.y,m_sEye.center.z,
			  m_sEye.up.x,m_sEye.up.y,m_sEye.up.z);

	
	glMatrixMode(GL_MODELVIEW);
	glPushMatrix();

	DrawScene();

	glMatrixMode(GL_MODELVIEW);
	glPopMatrix();
  
	glMatrixMode(GL_PROJECTION);
	glPopMatrix();
	glMatrixMode(GL_MODELVIEW);

	int selecthit = glRenderMode(GL_RENDER);

	return selecthit;
}

int CBilliardsPlayView::GetSelectObjFront(int selecthits, unsigned int *name)
{
	int i,j,result;
	GLuint mindepth;

	if (selecthits<=0)
		return -1;

	result=0;
	j=0;
	mindepth=0;
	mindepth=~mindepth;
	for (i=0;i<selecthits;i++)
	{
		if (m_SelectBuffer[j]<=0)
		{
			j=j+3+m_SelectBuffer[j];
			continue;
		}
		if (m_SelectBuffer[j+1]<mindepth)
		{
			mindepth=m_SelectBuffer[j+1];
			result=j;
		}
		j=j+3+m_SelectBuffer[j];
	}
	if (m_SelectBuffer[result]<=0)
		return -1;

	for (i=0;i<m_SelectBuffer[result];i++)
		name[i]=m_SelectBuffer[result+i+3];
	return m_SelectBuffer[result];
}

void CBilliardsPlayView::HitBall()
{
	if (!m_bAnimate)
	{
		m_nEnter = 100;
		CMainFrame *pFrame = (CMainFrame *)AfxGetMainWnd();
		CBilliardsPlayView *pView = (CBilliardsPlayView *)(pFrame->m_wndSplitter).GetPane(0,1);
		CBilliardsDoc *pDoc = (CBilliardsDoc *)pView->GetDocument();
		if (pDoc->m_bPlayer!=IDLE)
		{
			m_nEnter = -1;
			if (m_bCanHit)
                pDoc->SendVelocity(m_fVelocity[0]);
        }
		m_bAnimate = TRUE;
		SetTimer(ANIMATE_TIMER,5,NULL);
	}
}

void CBilliardsPlayView::OnTimer(UINT nIDEvent) 
{
    CMainFrame *pFrame = (CMainFrame *)AfxGetMainWnd();
	CBilliardsPlayView *pView = (CBilliardsPlayView *)(pFrame->m_wndSplitter).GetPane(0,1);
    if (nIDEvent == ANIMATE_TIMER){
  		DrawScene();
		//Invalidate();
        pView->GetDlgItem(IDC_BUTTON_SHOOT)->EnableWindow(m_bCanHit&&!m_bAnimate);
    }

	CView::OnTimer(nIDEvent);
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区二区三区三| 99久久精品免费看| 国内精品第一页| 黄色资源网久久资源365| 国产在线播放一区三区四| 国产精品主播直播| 成人黄色免费短视频| 99这里只有精品| 成人午夜伦理影院| 91精品办公室少妇高潮对白| 欧美午夜精品一区二区三区| 日韩视频中午一区| 久久久久国产精品厨房| 国产精品欧美一区二区三区| 一区二区三区毛片| 欧美mv和日韩mv国产网站| 美女一区二区久久| 国产电影精品久久禁18| av不卡免费电影| 欧美日本视频在线| 久久精品一级爱片| 亚洲综合一区二区三区| 久久精品国产亚洲aⅴ| 成人小视频在线观看| 欧美专区亚洲专区| 日韩欧美国产综合一区| 日韩码欧中文字| 视频一区视频二区中文字幕| 国产乱人伦偷精品视频免下载 | 91麻豆成人久久精品二区三区| 色综合一区二区三区| 欧美一级夜夜爽| 亚洲欧洲另类国产综合| 麻豆91精品视频| 99精品在线免费| 欧美大片在线观看一区二区| 国产精品久久久久国产精品日日| 亚洲日韩欧美一区二区在线| 美女免费视频一区| 国产高清不卡二三区| 欧美日韩你懂的| www精品美女久久久tv| 一区二区三区电影在线播| 韩国一区二区在线观看| 欧美在线观看一二区| 精品福利二区三区| 亚洲一区二区三区在线| 国产乱色国产精品免费视频| 欧美日韩一区二区三区在线| 久久精品夜色噜噜亚洲aⅴ| 综合精品久久久| 香蕉影视欧美成人| 97精品电影院| 久久婷婷色综合| 日韩电影免费在线观看网站| 99国产精品久久久久| 精品国产乱码久久久久久影片| 亚洲国产成人91porn| fc2成人免费人成在线观看播放 | 国产精品久久久99| 美女网站在线免费欧美精品| 日本高清免费不卡视频| 国产亚洲一二三区| 美女高潮久久久| 在线成人av影院| 一区二区三区四区视频精品免费| 国产福利一区二区三区视频| 日韩欧美国产一区二区三区 | 国产盗摄一区二区三区| 日韩三级精品电影久久久 | 国产精品女上位| 国产在线国偷精品免费看| 欧美裸体一区二区三区| 一区二区三区免费观看| 99免费精品视频| 国产农村妇女毛片精品久久麻豆 | 国产综合一区二区| 欧美精品第一页| 亚洲第一成年网| 91国模大尺度私拍在线视频| 日韩久久一区二区| 波多野结衣欧美| 国产精品女主播在线观看| 国产精品18久久久| 欧美成人伊人久久综合网| 午夜a成v人精品| 欧美高清视频www夜色资源网| 亚洲一区在线观看视频| 91黄色免费网站| 一区二区三区在线免费| 成人久久18免费网站麻豆 | 欧美人狂配大交3d怪物一区| 亚洲综合图片区| 在线精品视频小说1| 亚洲精品免费电影| 色婷婷综合久久久久中文一区二区 | 国产专区欧美精品| 欧美精品一区二区蜜臀亚洲| 狠狠色2019综合网| 久久尤物电影视频在线观看| 国产在线精品视频| 欧美激情一区不卡| 91丝袜美女网| 亚洲免费av高清| 91官网在线观看| 亚洲狠狠丁香婷婷综合久久久| 色屁屁一区二区| 午夜影院在线观看欧美| 欧美妇女性影城| 激情成人综合网| 久久亚洲免费视频| 国产91精品在线观看| 国产欧美视频一区二区三区| 99精品视频一区| 亚洲国产美国国产综合一区二区| 欧美肥妇bbw| 亚洲国产成人porn| 欧美成人女星排行榜| 国产成a人亚洲| 亚洲精品国产视频| 欧美老女人在线| 国产精品18久久久久久vr| 国产精品系列在线| 欧美三级日韩三级国产三级| 美女性感视频久久| 国产精品美女久久久久久久 | 一区二区欧美在线观看| 久久综合五月天婷婷伊人| 99久久国产综合精品女不卡| 日本视频中文字幕一区二区三区| 国产精品美女久久久久aⅴ| 制服丝袜在线91| 色综合久久久网| 激情综合一区二区三区| 亚洲成在线观看| 中文字幕在线免费不卡| 日韩精品中午字幕| 色屁屁一区二区| 国产sm精品调教视频网站| 午夜在线成人av| 亚洲色图在线视频| 久久香蕉国产线看观看99| 欧美日韩精品免费| 91麻豆视频网站| 国产91对白在线观看九色| 日韩激情在线观看| 亚洲精品成a人| 国产日本欧洲亚洲| 精品电影一区二区三区| 精品视频一区二区三区免费| 不卡的av在线播放| 韩国毛片一区二区三区| 青草av.久久免费一区| 亚洲国产综合色| **性色生活片久久毛片| 久久精品综合网| 亚洲精品一区二区三区在线观看| 欧美三级日韩在线| 在线一区二区三区四区五区| av亚洲精华国产精华| 国产91精品精华液一区二区三区| 国内精品在线播放| 麻豆成人av在线| 日本女人一区二区三区| 午夜欧美视频在线观看| 一区二区日韩av| 一区二区在线看| 亚洲色图欧洲色图婷婷| 亚洲天堂av一区| 18成人在线观看| 亚洲欧洲一区二区在线播放| 国产精品久久久久影视| 久久影院视频免费| 久久夜色精品国产噜噜av| 欧美v日韩v国产v| 亚洲精品一区二区三区精华液 | 久久91精品久久久久久秒播| 欧美a一区二区| 免费观看成人av| 麻豆国产一区二区| 精品在线观看免费| 国产一区二区免费在线| 国产麻豆日韩欧美久久| 国产91在线观看丝袜| 成人黄色777网| 99精品在线免费| 91国在线观看| 欧美乱熟臀69xxxxxx| 欧美一二三四在线| 日韩欧美激情四射| 久久你懂得1024| 中文字幕国产一区| 国产精品成人免费| 亚洲欧美乱综合| 午夜精品一区在线观看| 日韩av在线播放中文字幕| 免费黄网站欧美| 国产成人精品亚洲777人妖 | 中文字幕一区在线观看| 一区二区三区国产|