?? billiardsplayview.cpp
字號:
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 + -