⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nonamedlg.cpp

📁 蒙特卡罗方法可以有效地解决复杂的工程问题
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	PIXELFORMATDESCRIPTOR pixelDesc;

pixelDesc.nSize = sizeof(PIXELFORMATDESCRIPTOR);
pixelDesc.nVersion = 1;

pixelDesc.dwFlags = PFD_DRAW_TO_WINDOW | 
					PFD_SUPPORT_OPENGL |
					PFD_DOUBLEBUFFER |
					PFD_STEREO_DONTCARE;

pixelDesc.iPixelType = PFD_TYPE_RGBA;
pixelDesc.cColorBits = 32;
pixelDesc.cRedBits = 8;
pixelDesc.cRedShift = 16;
pixelDesc.cGreenBits = 8;
pixelDesc.cGreenShift = 8;
pixelDesc.cBlueBits = 8;
pixelDesc.cBlueShift = 0;
pixelDesc.cAlphaBits = 0;
pixelDesc.cAlphaShift = 0;
pixelDesc.cAccumBits = 64;
pixelDesc.cAccumRedBits = 16;
pixelDesc.cAccumGreenBits = 16;
pixelDesc.cAccumBlueBits = 16;
pixelDesc.cAccumAlphaBits = 0;
pixelDesc.cDepthBits = 32;
pixelDesc.cStencilBits = 8;
pixelDesc.cAuxBuffers = 0;
pixelDesc.iLayerType = PFD_MAIN_PLANE;
pixelDesc.bReserved = 0;
pixelDesc.dwLayerMask = 0;
pixelDesc.dwVisibleMask = 0;
pixelDesc.dwDamageMask = 0;

m_GLPixelIndex = ChoosePixelFormat(hDC,&pixelDesc);
if(m_GLPixelIndex==0) // Choose default
{
	m_GLPixelIndex = 1;
	if(DescribePixelFormat(hDC,m_GLPixelIndex,
		sizeof(PIXELFORMATDESCRIPTOR),&pixelDesc)==0)
	{
		return FALSE;
	}
}

if(SetPixelFormat(hDC,m_GLPixelIndex,&pixelDesc)==FALSE)
{
	return FALSE;
}

return TRUE;
}

BOOL CNoNameDlg::CreateViewGLContext(HDC hDC)
{
	m_hGLContext = wglCreateContext(hDC);

	if(m_hGLContext==NULL)
		return FALSE;

	if(wglMakeCurrent(hDC,m_hGLContext)==FALSE)
		return FALSE;



	return TRUE;
}

void CNoNameDlg::OnDestroy() 
{
	CDialog::OnDestroy();
	

	if(wglGetCurrentContext() != NULL)
		wglMakeCurrent(NULL,NULL);

	if(m_hGLContext != NULL)
	{
		wglDeleteContext(m_hGLContext);
		m_hGLContext = NULL;
	}	
}

void CNoNameDlg::OnTimer(UINT nIDEvent) 
{
//	m_yRotate -= 3;
//	m_xRotate -= 2;
	switch(TranslateChoice)
	{
		case 1:
			if(Dirction==1)
			{
				Eye_x+=0.1;
			}
			else
			{
				Eye_x-=0.1;
			}
		break;
		case 2:
			if(Dirction==1)
			{
				Eye_y+=0.1;
			}
			else
			{
				Eye_y-=0.1;
			}
		break;
		case 3:
			
			if(Dirction==1)
			{
				Eye_z-=0.2;
				View_z-=0.1;
			}
			else
			{
				if(View_z>0)
				{
					break;
				}
				Eye_z+=0.2;
				View_z+=0.1;
			}
		break;
		
	}
	InvalidateRect(NULL,FALSE);
	CDialog::OnTimer(nIDEvent);
}

void CNoNameDlg::RenderScene()
{
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	CPrimitive* temp=NULL;
	glPolygonMode(GL_FRONT,GL_FILL);
	glPolygonMode(GL_BACK,GL_FILL);
	for(int i=0;i<tracer->GetScene()->GetNrPrimitives();i++)
	{
		glLoadIdentity();		
		glPushMatrix();
		glTranslated(0.0,0.0,-15.0);
		//glRotated(45.0, 1.0, 1.0, 1.0);
		
		glScalef(0.4,0.4,0.4);
		temp=tracer->GetScene()->GetPrimitive(i);
		if(temp->GetType()==CPrimitive::SPHERE)//表示球
		{
			Color Spherecolor=temp->GetColor();
			double red=Spherecolor.r;
			double green=Spherecolor.g;
			double blue=Spherecolor.b;
			glColor3d(red,green,blue);
			CVector3 Centre=((CSphere*)temp)->GetCentre();
			glTranslated(Centre.x,Centre.y,-Centre.z);
			float r=((CSphere*)temp)->GetRadius();
			glutSolidSphere(r, 20 ,20); 	
		}
		


		glEnd();
	}
//draw plane
	glLoadIdentity();		
	glPushMatrix();
	glTranslated(0.0,0.0,-15.0);
	glScalef(0.4,0.4,0.4);
	::glCallList(2);
	glEnd();

//draw eye

	glLoadIdentity();		
	glPushMatrix();
	
	glTranslated(0.0,0.0,-10.0);
	glTranslated(Eye_x,Eye_y,Eye_z);
	glRotated(45.0, 0.0, 1.0, 0.0);
	glScalef(0.4,0.4,0.4);
	::glCallList(3);
	glEnd();


}





void CNoNameDlg::BuildList_Flat()
{
	::glNewList(2,GL_COMPILE_AND_EXECUTE);

	glShadeModel(GL_SMOOTH);
	float xt = 5.0f;
// ground plane  0, 1, 0

	glBegin(GL_POLYGON);
		glNormal3d(0.0,0.0,1.0);
		glColor3ub(255,0,0);
		glVertex3d( -20.0,  -4.4, 20.0);
		glVertex3d( 20.0,  -4.4, 20.0);
		glVertex3d(20.0,  -4.4, -20.0);
		glVertex3d(-20.0,  -4.4, -20.0);
	glEnd();

// back plane 0.0f, 0, -1 
		glBegin(GL_POLYGON);
		glNormal3d(0.0,0.0,1.0);
		glColor3ub(125,100,125);
		glVertex3d( -20.0,  7.4,-20);
		glVertex3d( 20.0, 7.4,-20);
		glVertex3d(20.0,  -4.4,-20);
		glVertex3d(-20.0,  -4.4,-20);
		glEnd();
// ceiling plane 0, -1, 0 
		glBegin(GL_POLYGON);
		glNormal3d(0.0,0.0,1.0);
		glColor3ub(0,0,255);
		glVertex3d( -20.0,  7.4, 20.0);

		glColor3ub(125,125,125);
		glVertex3d( 20.0,  7.4, 20.0);

		glColor3ub(125,125,125);
		glVertex3d(20.0,  7.4, -20.0);

		glColor3ub(125,125,125);
		glVertex3d(-20.0,  7.4, -20.0);
		glEnd();

	::glEndList();
}



void CNoNameDlg::OnContextMenu(CWnd* pWnd, CPoint point) 
{

		if (point.x == -1 && point.y == -1){
			//keystroke invocation
			CRect rect;
			GetClientRect(rect);
			ClientToScreen(rect);

			point = rect.TopLeft();
			point.Offset(5, 5);
		}

		CMenu menu;
		VERIFY(menu.LoadMenu(IDR_MENU_Operation));
		
		CMenu* pPopup = menu.GetSubMenu(0);
		ASSERT(pPopup != NULL);
		CWnd* pWndPopupOwner = this;

		while (pWndPopupOwner->GetStyle() & WS_CHILD)
			pWndPopupOwner = pWndPopupOwner->GetParent();

		pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y,
			pWndPopupOwner);	
}



void CNoNameDlg::BuildList_Eye()
{
	::glNewList(3,GL_COMPILE_AND_EXECUTE);
	glShadeModel(GL_SMOOTH);
	
	glColor3ub(0,0,255);
	glutSolidSphere(0.2, 20 ,20);	
	glPolygonMode(GL_FRONT,GL_LINE );
	glPolygonMode(GL_BACK,GL_LINE );
	glBegin(GL_POLYGON);
		glColor3ub(255,0,0);
		glVertex3d( 0.0, 0.0, 0.0);
		glVertex3d( 1.0, 0.0, 0.0);
		glColor3ub(0,255,0);
		glVertex3d( 0.0, 0.0, 0.0);
		glVertex3d( 0.0, 1.0, 0.0);
		glColor3ub(0,0,255);
		glVertex3d( 0.0, 0.0, 0.0);
		glVertex3d( 0.0, 0.0, -1.0);
	glEnd();
	::glEndList();

}



void CNoNameDlg::OnTracedPicture() 
{
	
	surface = new CSurface( SCRWIDTH, SCRHEIGHT );
	buffer = surface->GetBuffer();
	surface->Clear();
	
	tracer->SetTarget( surface->GetBuffer(), SCRWIDTH, SCRHEIGHT );
	tracer->InitRender();
	tracer->GetViewPoint(CVector3(Eye_x,Eye_y,View_z));
	tracer->Render();

	ShowPic.LoadOriPixel(buffer);
	ShowPic.DoModal();
}

void CNoNameDlg::OnAddSphere() 
{
	(tracer->GetScene())->AddScene(1);
	RenderScene();

	Invalidate(NULL);
}

void CNoNameDlg::OnDeleteObject() 
{
	// TODO: Add your command handler code here
	(tracer->GetScene())->DeleteLastObject();
}

void CNoNameDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	// TODO: Add your message handler code here and/or call default
//	MessageBox("hah");
	switch(nChar)
	{
		case 83 :
		//	MessageBox("down");
			TranslateChoice=2;
			Dirction=-1;
		break;
		case 87 :
		//	MessageBox("up");
			TranslateChoice=2;
			Dirction=1;
		break;
		case 65:
		//	MessageBox("left");
			TranslateChoice=1;
			Dirction=-1;
		break;
		case 68 :
		//	MessageBox("right");
			TranslateChoice=1;
			Dirction=1;
		break;
		case 74 ://'j'
		//	MessageBox("j");
			TranslateChoice=3;
			Dirction=1;
		break;
		case 75://'k'
		//	MessageBox("k");
			TranslateChoice=3;
			Dirction=-1;
		break;
	}
	SetTimer(0,20,NULL);
	CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}



void CNoNameDlg::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	KillTimer(0);	
	CDialog::OnKeyUp(nChar, nRepCnt, nFlags);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -