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

📄 gl2view.cpp

📁 该文件是教你如何来旋转一个正方体的,并可以用不同的颜色
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	  glRotatef(m_fAngleY,0.0f,1.0f,0.0f);
	  glRotatef(m_fAngleZ,0.0f,0.0f,1.0f);
	  
	  
      DrawCube(0.3);
	



	   glPopMatrix();
		glFinish();

		SwapBuffers(wglGetCurrentDC());
		bBusy=FALSE;

	

	

}
void CGl2View::GLTextOut(GLuint id,const char * const textstring)
{
	if ( 0 == id || 0 == textstring )
		{
    		return;
		}

	GLsizei size = strlen( textstring );

	::glListBase( id );
	::glCallLists( size, GL_UNSIGNED_BYTE, (const GLvoid*)textstring ); 

}
void CGl2View::CreateRGBPalette()
{
    PIXELFORMATDESCRIPTOR pfd;
    LOGPALETTE *pPal;
    int n, i;

	// get the initially choosen video mode
	n = ::GetPixelFormat(m_pDC->GetSafeHdc());
    ::DescribePixelFormat(m_pDC->GetSafeHdc(), n, sizeof(pfd), &pfd);

	// if is an indexed one...
    if (pfd.dwFlags & PFD_NEED_PALETTE)
    {
        // ... construct an equilibrated palette (3 red bits, 3 green bits, 2 blue bits)
        // NOTE: this code is integrally taken from MFC example Cube
		n = 1 << pfd.cColorBits;
        pPal = (PLOGPALETTE) new char[sizeof(LOGPALETTE) + n * sizeof(PALETTEENTRY)];

        ASSERT(pPal != NULL);

        pPal->palVersion = 0x300;
        pPal->palNumEntries = n;
        for (i=0; i<n; i++)
        {
            pPal->palPalEntry[i].peRed=ComponentFromIndex(i, pfd.cRedBits, pfd.cRedShift);
            pPal->palPalEntry[i].peGreen=ComponentFromIndex(i, pfd.cGreenBits, pfd.cGreenShift);
            pPal->palPalEntry[i].peBlue=ComponentFromIndex(i, pfd.cBlueBits, pfd.cBlueShift);
            pPal->palPalEntry[i].peFlags=0;
        }

		// fix up the palette to include the default Windows palette
        if ((pfd.cColorBits == 8)                           &&
            (pfd.cRedBits   == 3) && (pfd.cRedShift   == 0) &&
            (pfd.cGreenBits == 3) && (pfd.cGreenShift == 3) &&
            (pfd.cBlueBits  == 2) && (pfd.cBlueShift  == 6)
           )
        {
			for (i = 1 ; i <= 12 ; i++)
                pPal->palPalEntry[defaultOverride[i]] = defaultPalEntry[i];
        }

        m_cPalette.CreatePalette(pPal);
        delete pPal;

		// set the palette
        m_pOldPalette=m_pDC->SelectPalette(&m_cPalette, FALSE);
        m_pDC->RealizePalette();
    }
}

unsigned char CGl2View::ComponentFromIndex(int i, UINT nbits, UINT shift)
{
    unsigned char val;

    val = (unsigned char) (i >> shift);
    switch (nbits) 
	{

    case 1:
        val &= 0x1;
        return _oneto8[val];
    case 2:
        val &= 0x3;
        return _twoto8[val];
    case 3:
        val &= 0x7;
        return _threeto8[val];

    default:
        return 0;
    }
}

void CGl2View::OnTimer(UINT nIDEvent) 
{
	m_fAngleY+=10.f;
	m_fAngleX+=1.0f;
	m_fAngleZ+=5.0f;
	Invalidate(FALSE);
	// TODO: Add your message handler code here and/or call default
	
	CView::OnTimer(nIDEvent);
}

void CGl2View::OnPlayPause() 
{
	m_play=m_play?FALSE:TRUE;
	if(m_play)
		SetTimer(1,45,NULL);
	else
	     KillTimer(1);
	// TODO: Add your command handler code here
	
}
void CGl2View::DrawCube(GLdouble dLength)
{
	



	glPushMatrix();
	     glRotatef(30.0f,1.0f,0.0f,0.0f);

         glRotatef(20.0f,0.0f,1.0f,0.0f);

	     glScalef(1.2f,1.2f,1.2f);
	     
		 double dNormal[3];
 /////////////////////////////在前面
		 
		 double dPoint1[3]={-dLength,dLength,dLength};
	     double dPoint2[3]={-dLength,-dLength,dLength};
	     double dPoint3[3]={dLength,-dLength,dLength};
		 double dPoint4[3]={dLength,dLength,dLength};
		 CalculateNormal(dPoint1,dPoint2,dPoint3,dNormal);
		 
         glBegin(GL_POLYGON);
		      glNormal3dv(dNormal);

	          glVertex3f(-dLength,dLength,dLength);
			  glVertex3f(-dLength,-dLength,dLength);
			  glVertex3f(dLength,-dLength,dLength);
			  glVertex3f(dLength,dLength,dLength);
       glEnd();
          
//////////////////////////////在右面

//	      dPoint1[3]={dLength,dLength,dLength};
//	      dPoint2[3]={dLength,-dLength,dLength};
//	      dPoint3[3]={dLength,-dLength,-dLength};
//		  dPoint4[3]={dLength,dLength,-dLength};

	   dPoint1[0]=dLength;dPoint1[1]=dLength;dPoint1[2]=dLength;
	   dPoint2[0]=dLength;dPoint2[1]=-dLength;dPoint2[2]=dLength;
	   dPoint3[0]=dLength;dPoint3[1]=-dLength;dPoint3[2]=-dLength;
	   dPoint4[0]=dLength;dPoint4[1]=dLength;dPoint4[2]=-dLength;


		 CalculateNormal(dPoint1,dPoint2,dPoint3,dNormal);
         glBegin(GL_POLYGON); 
              glNormal3dv(dNormal);

	          glVertex3f(dLength,dLength,dLength);
			  glVertex3f(dLength,-dLength,dLength);
			  glVertex3f(dLength,-dLength,-dLength);
			  glVertex3f(dLength,dLength,-dLength);

       glEnd();

///////////////////////在后面
//          dPoint1[3]={dLength,dLength,-dLength};
//	      dPoint2[3]={dLength,-dLength,-dLength};
//	      dPoint3[3]={-dLength,-dLength,-dLength};
//		  dPoint4[3]={-dLength,dLength,-dLength};


       dPoint1[0]=dLength;dPoint1[1]=dLength;dPoint1[2]=-dLength;
	   dPoint2[0]=dLength;dPoint2[1]=-dLength;dPoint2[2]=-dLength;
	   dPoint3[0]=-dLength;dPoint3[1]=-dLength;dPoint3[2]=-dLength;
	   dPoint4[0]=-dLength;dPoint4[1]=dLength;dPoint4[2]=-dLength;
		 CalculateNormal(dPoint1,dPoint2,dPoint3,dNormal);
         glBegin(GL_POLYGON);
	          glNormal3dv(dNormal);

	          glVertex3f(dLength,dLength,-dLength);
			  glVertex3f(dLength,-dLength,-dLength);
			  glVertex3f(-dLength,-dLength,-dLength);
			  glVertex3f(-dLength,dLength,-dLength);
       glEnd();
////////////////////////在左面
//	     dPoint1[3]={-dLength,dLength,-dLength};
//	     dPoint2[3]={-dLength,-dLength,-dLength};
//	      dPoint3[3]={-dLength,-dLength,dLength};
//		  dPoint4[3]={-dLength,dLength,dLength};
	    dPoint1[0]=-dLength;dPoint1[1]=dLength;dPoint1[2]=-dLength;
	   dPoint2[0]=-dLength;dPoint2[1]=-dLength;dPoint2[2]=-dLength;
	   dPoint3[0]=-dLength;dPoint3[1]=-dLength;dPoint3[2]=dLength;
	   dPoint4[0]=-dLength;dPoint4[1]=dLength;dPoint4[2]=dLength;
		 CalculateNormal(dPoint1,dPoint2,dPoint3,dNormal);

       glBegin(GL_POLYGON);
	          glNormal3dv(dNormal);

	          glVertex3f(-dLength,dLength,-dLength);
			  glVertex3f(-dLength,-dLength,-dLength);
			  glVertex3f(-dLength,-dLength,dLength);
			  glVertex3f(-dLength,dLength,dLength);

       glEnd();

///////////////////////在下面


//	   dPoint1[0]=dLength;dPoint1[1]=dLength;dPoint1[2]=-dLength;
//	   dPoint2[0]=-dLength;dPoint2[1]=dLength;dPoint2[2]=-dLength;
//	   dPoint3[0]=-dLength;dPoint3[1]=-dLength;dPoint3[2]=-dLength;
//	   dPoint4[0]=dLength;dPoint4[1]=-dLength;dPoint4[2]=-dLength;
//	   	 CalculateNormal(dPoint1,dPoint2,dPoint3,dNormal);
//	   glBegin(GL_POLYGON);
//	          glNormal3dv(dNormal);
//
//	          glVertex3f(dLength,dLength,-dLength);
//			  glVertex3f(-dLength,dLength,-dLength);
//			  glVertex3f(-dLength,-dLength,-dLength);
//			  glVertex3f(dLength,-dLength,-dLength);
//       glEnd();
//			    


	    dPoint1[0]=-dLength;dPoint1[1]=-dLength;dPoint1[2]=dLength;
	   dPoint2[0]=dLength;dPoint2[1]=-dLength;dPoint2[2]=dLength;
	   dPoint3[0]=dLength;dPoint3[1]=-dLength;dPoint3[2]=-dLength;
	   dPoint4[0]=-dLength;dPoint4[1]=-dLength;dPoint4[2]=-dLength;
		 CalculateNormal(dPoint1,dPoint2,dPoint3,dNormal);
	   glBegin(GL_POLYGON);
	          glNormal3dv(dNormal);

	          glVertex3f(-dLength,-dLength,dLength);
			  glVertex3f(dLength,-dLength,dLength);
			  glVertex3f(dLength,-dLength,-dLength);
			  glVertex3f(-dLength,-dLength,-dLength);
       glEnd();
			    
///////////////////在上面
//	     dPoint1[3]={-dLength,dLength,-dLength};
//	     dPoint2[3]={-dLength,dLength,dLength};
//	      dPoint3[3]={dLength,dLength,dLength};
//		  dPoint4[3]={dLength,dLength,-dLength};
	    dPoint1[0]=-dLength;dPoint1[1]=dLength;dPoint1[2]=-dLength;
	   dPoint2[0]=-dLength;dPoint2[1]=dLength;dPoint2[2]=dLength;
	   dPoint3[0]=dLength;dPoint3[1]=dLength;dPoint3[2]=dLength;
	   dPoint4[0]=dLength;dPoint4[1]=dLength;dPoint4[2]=-dLength;
		 CalculateNormal(dPoint1,dPoint2,dPoint3,dNormal);
	   glBegin(GL_POLYGON);
	          glNormal3dv(dNormal);
			  
	          glVertex3f(-dLength,dLength,-dLength);
			  glVertex3f(-dLength,dLength,dLength);
			  glVertex3f(dLength,dLength,dLength);
			  glVertex3f(dLength,dLength,-dLength);
       glEnd();

	 glPopMatrix();
	

	

	

}
void CGl2View::CalculateNormal(GLdouble* dVertex1,GLdouble* dVertex2,GLdouble* dVertex3,GLdouble* dNormal)
{

    GLdouble dVector1[3],dVector2[3];
	dVector1[0]=dVertex2[0]-dVertex1[0];
	dVector1[1]=dVertex2[1]-dVertex1[1];
	dVector1[2]=dVertex2[2]-dVertex1[2];

	dVector2[0]=dVertex3[0]-dVertex1[0];
	dVector2[1]=dVertex3[1]-dVertex1[1];
	dVector2[2]=dVertex3[2]-dVertex1[2];

	dNormal[0]=dVector1[1]*dVector2[2]-dVector1[2]*dVector2[1];
	dNormal[1]=dVector1[2]*dVector2[0]-dVector1[0]*dVector2[2];
	dNormal[2]=dVector1[0]*dVector2[1]-dVector1[1]*dVector2[0];

	double dNormalLength=sqrt(dNormal[0]*dNormal[0]+dNormal[1]*dNormal[1]+dNormal[2]*dNormal[2]);
    
	if(dNormalLength!=0.0)
	{
		dNormal[0]=dNormal[0]/dNormalLength;
		dNormal[1]=dNormal[1]/dNormalLength;
		dNormal[2]=dNormal[2]/dNormalLength;

	}
	else
	{
		dNormal[0]=0.0;
		dNormal[1]=0.0;
		dNormal[2]=0.0;

	}


}
void CGl2View::CreatLights()
{
	glLightfv(GL_LIGHT0,GL_AMBIENT,m_lightAmb);
	glLightfv(GL_LIGHT0,GL_DIFFUSE,m_lightDif);
	glLightfv(GL_LIGHT0,GL_SPECULAR,m_lightSpe);

	glLightfv(GL_LIGHT0,GL_POSITION,m_lightPos);
	glEnable(GL_LIGHTING);
	glEnable(GL_LIGHT0);
}

void CGl2View::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	
	CView::OnLButtonDown(nFlags, point);
}

⌨️ 快捷键说明

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