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

📄 billiardsplayview.cpp

📁 桌面台球3D 开发环境VC 库DIRECTX8.1以上
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	glTexCoord2f(1.0,1.0);
	glVertex3f(-1.5*BALL_RADIUS-6.0f,TABLE_HEIGHT+BALL_RADIUS-1.0f,TABLE_WIDTH-2.0f);
	glTexCoord2f(1.0,0.0);
	glVertex3f(-1.5*BALL_RADIUS,TABLE_HEIGHT,TABLE_WIDTH+2.0f);
	glEnd();

	glBegin(GL_QUADS);
	glTexCoord2f(0.0,0.0);
	glVertex3f(-1.5*BALL_RADIUS,TABLE_HEIGHT,TABLE_WIDTH+2.0f);
	glTexCoord2f(0.0,1.0);
	glVertex3f(-1.5*BALL_RADIUS-6.0f,TABLE_HEIGHT+BALL_RADIUS-1.0f,TABLE_WIDTH-2.0f);
	glTexCoord2f(1.0,1.0);	
	glVertex3f(-1.5*BALL_RADIUS-6.0f,TABLE_HEIGHT+BALL_RADIUS+1.0f,TABLE_WIDTH-2.0f);
	glTexCoord2f(1.0,0.0);
	glVertex3f(-1.5*BALL_RADIUS,TABLE_HEIGHT+BALL_RADIUS+2.0f,TABLE_WIDTH+2.0f);
	glEnd();

	glBegin(GL_QUADS);
	glTexCoord2f(0.0,0.0);
	glVertex3f(-1.5*BALL_RADIUS,TABLE_HEIGHT+BALL_RADIUS+2.0f,TABLE_WIDTH+2.0f);
	glTexCoord2f(0.0,1.0);
	glVertex3f(-1.5*BALL_RADIUS-6.0f,TABLE_HEIGHT+BALL_RADIUS+1.0f,TABLE_WIDTH-2.0f);
	glTexCoord2f(1.0,1.0);
	glVertex3f(-TABLE_LENGTH+1.5*BALL_RADIUS+6.0f,TABLE_HEIGHT+BALL_RADIUS+1.0f,TABLE_WIDTH-2.0f);
	glTexCoord2f(1.0,0.0);
	glVertex3f(-TABLE_LENGTH+1.5*BALL_RADIUS,TABLE_HEIGHT+BALL_RADIUS+2.0f,TABLE_WIDTH+2.0f);
	glEnd();		

	glBegin(GL_QUADS);
	glTexCoord2f(0.0,0.0);
	glVertex3f(-TABLE_LENGTH+1.5*BALL_RADIUS+6.0f,TABLE_HEIGHT+BALL_RADIUS+1.0f,TABLE_WIDTH-2.0f);
	glTexCoord2f(0.0,1.0);
	glVertex3f(-TABLE_LENGTH+1.5*BALL_RADIUS+6.0f,TABLE_HEIGHT+BALL_RADIUS-1.0f,TABLE_WIDTH-2.0f);	
	glTexCoord2f(1.0,1.0);
	glVertex3f(-1.5*BALL_RADIUS-6.0f,TABLE_HEIGHT+BALL_RADIUS-1.0f,TABLE_WIDTH-2.0f);
	glTexCoord2f(1.0,0.0);
	glVertex3f(-1.5*BALL_RADIUS-6.0f,TABLE_HEIGHT+BALL_RADIUS+1.0f,TABLE_WIDTH-2.0f);	
	glEnd();
	
//right down
	glBegin(GL_QUADS);
	glTexCoord2f(0.0,0.0);
	glVertex3f(TABLE_LENGTH-1.5*BALL_RADIUS,TABLE_HEIGHT+BALL_RADIUS+2.0f,TABLE_WIDTH+2.0f);
	glTexCoord2f(0.0,1.0);
	glVertex3f(TABLE_LENGTH-1.5*BALL_RADIUS-6.0f,TABLE_HEIGHT+BALL_RADIUS+1.0f,TABLE_WIDTH-2.0f);
	glTexCoord2f(1.0,1.0);
	glVertex3f(TABLE_LENGTH-1.5*BALL_RADIUS-6.0f,TABLE_HEIGHT+BALL_RADIUS-1.0f,TABLE_WIDTH-2.0f);
	glTexCoord2f(1.0,0.0);
	glVertex3f(TABLE_LENGTH-1.5*BALL_RADIUS,TABLE_HEIGHT,TABLE_WIDTH+2.0f);
	glEnd();
	
	glBegin(GL_QUADS);
	glTexCoord2f(0.0,0.0);
	glVertex3f(TABLE_LENGTH-1.5*BALL_RADIUS,TABLE_HEIGHT,TABLE_WIDTH+2.0f);
	glTexCoord2f(0.0,1.0);
	glVertex3f(TABLE_LENGTH-1.5*BALL_RADIUS-6.0f,TABLE_HEIGHT+BALL_RADIUS-1.0f,TABLE_WIDTH-2.0f);
	glTexCoord2f(1.0,1.0);
	glVertex3f(1.5*BALL_RADIUS+6.0f,TABLE_HEIGHT+BALL_RADIUS-1.0f,TABLE_WIDTH-2.0f);
	glTexCoord2f(1.0,0.0);
	glVertex3f(1.5*BALL_RADIUS,TABLE_HEIGHT,TABLE_WIDTH+2.0f);
	glEnd();

	glBegin(GL_QUADS);
	glTexCoord2f(0.0,0.0);
	glVertex3f(1.5*BALL_RADIUS,TABLE_HEIGHT,TABLE_WIDTH+2.0f);
	glTexCoord2f(0.0,1.0);
	glVertex3f(1.5*BALL_RADIUS+6.0f,TABLE_HEIGHT+BALL_RADIUS-1.0f,TABLE_WIDTH-2.0f);
	glTexCoord2f(1.0,1.0);	
	glVertex3f(1.5*BALL_RADIUS+6.0f,TABLE_HEIGHT+BALL_RADIUS+1.0f,TABLE_WIDTH-2.0f);
	glTexCoord2f(1.0,0.0);
	glVertex3f(1.5*BALL_RADIUS,TABLE_HEIGHT+BALL_RADIUS+2.0f,TABLE_WIDTH+2.0f);
	glEnd();

	glBegin(GL_QUADS);
	glTexCoord2f(0.0,0.0);
	glVertex3f(1.5*BALL_RADIUS,TABLE_HEIGHT+BALL_RADIUS+2.0f,TABLE_WIDTH+2.0f);
	glTexCoord2f(0.0,1.0);
	glVertex3f(1.5*BALL_RADIUS+6.0f,TABLE_HEIGHT+BALL_RADIUS+1.0f,TABLE_WIDTH-2.0f);
	glTexCoord2f(1.0,1.0);
	glVertex3f(TABLE_LENGTH-1.5*BALL_RADIUS-6.0f,TABLE_HEIGHT+BALL_RADIUS+1.0f,TABLE_WIDTH-2.0f);
	glTexCoord2f(1.0,0.0);
	glVertex3f(TABLE_LENGTH-1.5*BALL_RADIUS,TABLE_HEIGHT+BALL_RADIUS+2.0f,TABLE_WIDTH+2.0f);
	glEnd();		

	glBegin(GL_QUADS);
	glTexCoord2f(0.0,0.0);
	glVertex3f(TABLE_LENGTH-1.5*BALL_RADIUS-6.0f,TABLE_HEIGHT+BALL_RADIUS+1.0f,TABLE_WIDTH-2.0f);
	glTexCoord2f(0.0,1.0);
	glVertex3f(TABLE_LENGTH-1.5*BALL_RADIUS-6.0f,TABLE_HEIGHT+BALL_RADIUS-1.0f,TABLE_WIDTH-2.0f);	
	glTexCoord2f(1.0,1.0);
	glVertex3f(1.5*BALL_RADIUS+6.0f,TABLE_HEIGHT+BALL_RADIUS-1.0f,TABLE_WIDTH-2.0f);
	glTexCoord2f(1.0,0.0);
	glVertex3f(1.5*BALL_RADIUS+6.0f,TABLE_HEIGHT+BALL_RADIUS+1.0f,TABLE_WIDTH-2.0f);	
	glEnd();

	glPopMatrix();

	
    glPopMatrix();
    glFlush();
	glFinish();
	SwapBuffers(wglGetCurrentDC());

	glDisable(GL_TEXTURE_2D);
}

void CBilliardsPlayView::DrawBall()
{
	/*glMatrixMode(GL_MODELVIEW);
	glPushMatrix();
	glTranslatef(0.0f, TABLE_HEIGHT/2.0+BALL_RADIUS, 0.0f);

	if (m_bVisible[0])
	{
		glPushMatrix();
		glTranslatef(m_fPosition[0][0],m_fPosition[0][1],m_fPosition[0][2]);
		float ambient0[4] = {0.2f,0.2f,0.2f,1.0f};
		float diffuse0[4] = {0.9f, 0.9f, 0.9f,1.0f};
		float specular0[4] = {0.25f,0.25f,0.25f,1.0f};
		float shininess0  = 0.8f;
		glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, ambient0);
		glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diffuse0);
		glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular0);
		glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, shininess0);
		glutSolidSphere(BALL_RADIUS,20,16);
		glPopMatrix();
	}

	float ambient1[4] = {0.2f,0.08f,0.0f,1.0f};
	float diffuse1[4] = {0.8f,0.0f,0.0f,1.0f};
	float specular1[4] = {0.1f,0.3f,0.1f,1.0f};
    float shininess1  = 0.8f;
	glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, ambient1);
	glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diffuse1);
	glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular1);
	glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, shininess1);
	for (int i = 1; i<8; i++)
		if (m_bVisible[i])
		{
			glPushMatrix();
			glTranslatef(m_fPosition[i][0],m_fPosition[i][1],m_fPosition[i][2]);
			glutSolidSphere(BALL_RADIUS,20,16);
			glPopMatrix();
		}

	if (m_bVisible[8])
	{
		glPushMatrix();
		glTranslatef(m_fPosition[8][0],m_fPosition[8][1],m_fPosition[8][2]);
		float ambient2[4] = {0.0f,0.1f,0.1f,1.0f};
		float diffuse2[4] = {0.1f,0.1f,0.1f,1.0f};
		float specular2[4] = {0.2f,0.2f,0.2f,1.0f};
		float shininess2  = 0.8f;
		glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, ambient2);
		glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diffuse2);
		glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular2);
		glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, shininess2);
		glutSolidSphere(BALL_RADIUS,20,16);
		glPopMatrix();
	}

	float ambient3[4] = {0.09f,0.0f,0.1f,1.0f};
	float diffuse3[4] = {0.0f,0.0f,0.8f,1.0f};
	float specular3[4] = {0.1f,0.3f,0.1f,1.0f};
    float shininess3  = 0.8f;
	glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, ambient3);
	glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diffuse3);
	glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular3);
	glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, shininess3);
  	for (i = 9; i<16; i++)
		if (m_bVisible[i])
		{
			glPushMatrix();
			glTranslatef(m_fPosition[i][0],m_fPosition[i][1],m_fPosition[i][2]);
			glutSolidSphere(BALL_RADIUS,20,16);
			glPopMatrix();
		}

	glPopMatrix();*/
    glMatrixMode(GL_MODELVIEW);
	glPushMatrix();
	glTranslatef(0.0f, TABLE_HEIGHT+BALL_RADIUS, 0.0f);

//		GLfloat no_mat[] = { 0.0, 0.0, 0.0, 1.0 };
//		GLfloat mat_ambient[] = { 0.7, 0.7, 0.7, 1.0 };
//		GLfloat mat_ambient_color[] = { 0.8, 0.8, 0.2, 1.0 };
//		GLfloat mat_diffuse[] = { 0.1, 0.5, 0.8, 1.0 };
//		GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 };
//		GLfloat no_shininess[] = { 0.0 };
//		GLfloat low_shininess[] = { 5.0 };
//		GLfloat high_shininess[] = { 100.0 };
//		GLfloat mat_emission[] = {0.3, 0.2, 0.2, 0.0};
//
//	    glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient_color);
//		glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
//		glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
//		glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);
//		glMaterialfv(GL_FRONT, GL_EMISSION, no_mat);
	
	if (m_bVisible[0])
	{

		glPushMatrix();
		glTranslatef(m_fPosition[0][0],m_fPosition[0][1],m_fPosition[0][2]);
		float ambient0[4] = {0.5f,0.5f,0.5f,1.0f};
		float diffuse0[4] = {0.4f,0.4f,0.4f,1.0f};
		//float specular0[4] = {0.25f,0.25f,0.25f,1.0f};
		float specular0[] = {1.0f,1.0f,1.0f,1.0f};
		float shininess0 = 100.0f;
		//float mat_emission[] = {0.3, 0.2, 0.2, 0.0};
		glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, ambient0);
		glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diffuse0);
		glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular0);
		glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, shininess0);
		//glMaterialfv(GL_FRONT, GL_EMISSION, mat_emission);
		glutSolidSphere(BALL_RADIUS,20,16);
		glPopMatrix();
	}

	float ambient1[4] = {0.2f,0.08f,0.0f,1.0f};
	float diffuse1[4] = {0.8f,0.0f,0.0f,1.0f};
//	float specular1[4] = {0.1f,0.3f,0.1f,1.0f};
//    float shininess1  = 0.8f;
	float specular1[] = {1.0f,1.0f,1.0f,1.0f};
	float shininess1 = 100.0f;

	glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, ambient1);
	glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diffuse1);
	glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular1);
	glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, shininess1);
	for (int i = 1; i<9; i++)
		if (m_bVisible[i])
		{
			glPushMatrix();
			glTranslatef(m_fPosition[i][0],m_fPosition[i][1],m_fPosition[i][2]);
			glutSolidSphere(BALL_RADIUS,20,16);
			glPopMatrix();
		}

//	if (m_bVisible[8])
//	{
//		glPushMatrix();
//		glTranslatef(m_fPosition[8][0],m_fPosition[8][1],m_fPosition[8][2]);
//		float ambient2[4] = {0.0f,0.1f,0.1f,1.0f};
//		float diffuse2[4] = {0.1f,0.1f,0.1f,1.0f};
////		float specular2[4] = {0.2f,0.2f,0.2f,1.0f};
////		float shininess2  = 0.8f;
//		float specular2[] = {1.0f,1.0f,1.0f,1.0f};
//		float shininess2 = 100.0f;
//
//		glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, ambient2);
//		glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diffuse2);
//		glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular2);
//		glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, shininess2);
//		glutSolidSphere(BALL_RADIUS,20,16);
//		glPopMatrix();
//	}

	float ambient3[4] = {0.09f,0.0f,0.1f,1.0f};
	float diffuse3[4] = {0.0f,0.0f,0.8f,1.0f};
//	float specular3[4] = {0.1f,0.3f,0.1f,1.0f};
//    float shininess3  = 0.8f;
	float specular3[] = {1.0f,1.0f,1.0f,1.0f};
	float shininess3 = 100.0f;

	glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, ambient3);
	glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diffuse3);
	glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular3);
	glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, shininess3);
  	for (i = 9; i<16; i++)
		if (m_bVisible[i])
		{
			glPushMatrix();
			glTranslatef(m_fPosition[i][0],m_fPosition[i][1],m_fPosition[i][2]);
			glutSolidSphere(BALL_RADIUS,20,16);
			glPopMatrix();
		}

	glPopMatrix();
}

int CBilliardsPlayView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CWnd::OnCreate(lpCreateStruct) == -1)
		return -1;
	
    Init();	
   
	return 0;
}

BOOL CBilliardsPlayView::SetThePixelFormat(CDC *pDC)
{
    static PIXELFORMATDESCRIPTOR pfd = {
		sizeof(PIXELFORMATDESCRIPTOR),	// size of this pfd
		1,                              // version number
		PFD_DRAW_TO_WINDOW |            // support window
		PFD_SUPPORT_OPENGL |            // support OpenGL
		PFD_DOUBLEBUFFER,               // double buffered
		PFD_TYPE_RGBA,                  // RGBA type
		24,                             // 24-bit color depth
		0, 0, 0, 0, 0, 0,               // color bits ignored
		0,                              // no alpha buffer
		0,                              // shift bit ignored
		0,                              // no accumulation buffer
		0, 0, 0, 0,                     // accum bits ignored
		32,                             // 32-bit z-buffer	
		0,                              // no stencil buffer
		0,                              // no auxiliary buffer
		PFD_MAIN_PLANE,                 // main layer
		0,                              // reserved
		0, 0, 0                         // layer masks ignored
    };

	int pixelformat;
    if((pixelformat = ChoosePixelFormat(m_hDc, &pfd)) == 0)
    {
        MessageBox( "ChoosePixelFormat failed", "Error", MB_OK);
        return FALSE;
    }

    if(SetPixelFormat(m_hDc, pixelformat, &pfd) == FALSE)
    {
        MessageBox( "SetPixelFormat failed", "Error", MB_OK);
        return FALSE;
    }

    CreateRGBPalette(m_hDc);

    return TRUE;
}


BOOL CBilliardsPlayView::PreCreateWindow(CREATESTRUCT& cs) 
{
    cs.style |= WS_CLIPSIBLINGS | WS_CLIPCHILDREN ;
	cs.dwExStyle |= WS_EX_CLIENTEDGE;
	cs.style &= ~WS_BORDER;
	cs.lpszClass = AfxRegisterWndClass(CS_OWNDC|CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS, 
		::LoadCursor(NULL, IDC_ARROW), HBRUSH(COLOR_WINDOW+1), NULL);
	
	if (!CWnd::PreCreateWindow(cs))
		return FALSE;

	return TRUE;	
}


void CBilliardsPlayView::OnSize(UINT nType, int cx, int cy) 
{
	CView::OnSize(nType, cx, cy);
	
	Project();
}

void CBilliardsPlayView::Project()
{
	RECT	rect;

	GetClientRect( &rect);
	GLsizei nWidth = rect.right;
	GLsizei nHeight = rect.bottom;
	nHeight = (nHeight == 0) ? 1 : nHeight;
	float dAspect = (float)nWidth/(float)nHeight;
	m_fViewWidth = m_fViewHeight * dAspect;

	glViewport(0,0,nWidth,nHeight);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	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);	
}

BOOL CBilliardsPlayView::OnEraseBkgnd(CDC* pDC) 
{
	return TRUE;
}

void CBilliardsPlayView::DrawScene()
{
	int j;

	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

	glMatrixMode(GL_MODELVIEW);
	glPushMatrix();

	if (m_bAnimate)
	{
		if (Calculate())
		{
			KillTimer(ANIMATE_TIMER);
			m_bAnimate = FALSE;

⌨️ 快捷键说明

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