【VC开源代码栏目提醒】:以下是网学会员为您推荐的VC开源代码-tex_cubeView.cpp,希望本篇文章对您学习有所帮助。
// tex_cubeView.cpp : Ctex_cubeView 类的实现
//
#include "stdafx.h"
#include "tex_cube.h"
#include "tex_cubeDoc.h"
#include "tex_cubeView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
void Ctex_cubeView::DrawOpenGLScene( )
{
static BOOL bBusy = FALSE;
static GLfloat wAngleY = 10.0f;
static GLfloat wAngleX = 1.0f;
static GLfloat wAngleZ = 5.0f;
if(bBusy)
return;
bBusy = TRUE;
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslatef(0.0f, 0.0f, -5.0f);
glRotatef(wAngleX, 1.0f, 0.0f, 0.0f);
glRotatef(wAngleY, 0.0f, 1.0f, 0.0f);
glRotatef(wAngleZ, 0.0f, 0.0f, 1.0f);
wAngleX += 1.0f;
wAngleY += 10.0f;
wAngleZ += 5.0f;
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
glEnable(GL_TEXTURE_2D);
glShadeModel(GL_SMOOTH);
glTexImage2D(GL_TEXTURE_2D,0,3,
m_Texture_Width,m_Texture_Height,0, GL_RGB,GL_UNSIGNED_BYTE, m_pData);
glBegin(GL_POLYGON);
glNormal3d(0.0,0.0,1.0);
glTexCoord2f(0.0, 0.0); glVertex3d( 0.8, 0.8, 0.8);
glTexCoord2f(1.0, 0.0); glVertex3d( 0.8, -0.8, 0.8);
glTexCoord2f(1.0, 1.0); glVertex3d(-0.8, -0.8, 0.8);
glTexCoord2f(0.0, 1.0); glVertex3d(-0.8, 0.8, 0.8);
glEnd();
glBegin(GL_POLYGON);
glNormal3d(0.0,0.0,-1.0);
glTexCoord2f(0.0, 0.0); glVertex3d( -0.8, 0.8, -0.8);
glTexCoord2f(1.0, 0.0); glVertex3d( -0.8, -0.8, -0.8);
glTexCoord2f(1.0, 1.0); glVertex3d( 0.8, -0.8, -0.8);
glTexCoord2f(0.0, 1.0); glVertex3d( 0.8, 0.8, -0.8);
glEnd();
glBegin(GL_POLYGON);
glNormal3d(1.0,0.0,0.0);
glTexCoord2f(0.0, 0.0); glVertex3d( 0.8, 0.8, 0.8);
glTexCoord2f(1.0, 0.0); glVertex3d( 0.8, 0.8, -0.8);
glTexCoord2f(1.0, 1.0); glVertex3d( 0.8, -0.8, -0.8);
glTexCoord2f(0.0, 1.0); glVertex3d( 0.8, -0.8, 0.8);
glEnd();
glBegin(GL_POLYGON);
glNormal3d(-1.0,0.0,0.0);
glTexCoord2f(0.0, 0.0); glVertex3d( -0.8, 0.8, 0.8);
glTexCoord2f(1.0, 0.0); glVertex3d( -0.8, 0.8, -0.8);
glTexCoord2f(1.0, 1.0); glVertex3d( -0.8, -0.8, -0.8);
glTexCoord2f(0.0, 1.0); glVertex3d( -0.8, -0.8, 0.8);
glEnd();
glBegin(GL_POLYGON);
glNormal3d(0.0,-1.0,0.0);
glTexCoord2f(0.0, 0.0); glVertex3d( -0.8, -0.8, 0.8);
glTexCoord2f(1.0, 0.0); glVertex3d( 0.8, -0.8, 0.8);
glTexCoord2f(1.0, 1.0); glVertex3d( 0.8, -0.8, -0.8);
glTexCoord2f(0.0, 1.0); glVertex3d( -0.8, -0.8, -0.8);
glEnd();
glBegin(GL_POLYGON);
glNormal3d(0.0,1.0,0.0);
glTexCoord2f(0.0, 0.0); glVertex3d( -0.8, 0.8, 0.8);
glTexCoord2f(1.0, 0.0); glVertex3d( 0.8, 0.8, 0.8);
glTexCoord2f(1.0, 1.0); glVertex3d( 0.8, 0.8, -0.8);
glTexCoord2f(0.0, 1.0); glVertex3d( -0.8, 0.8, -0.8);
glEnd();
::glDisable(GL_TEXTURE_2D);
glPopMatrix();
glFinish();
SwapBuffers(wglGetCurrentDC());
bBusy = FALSE;
}
HGLRC Ctex_cubeView::SetUpOpenGL( HWND hWnd )
{
static PIXELFORMATDESCRIPTOR pfd = {
sizeof (PIXELFORMATDESCRIPTOR), // strcut size
1, // Version number
PFD_DRAW_TO_WINDOW | // Flags, draw to a window,
PFD_SUPPORT_OPENGL| // use OpenGL
PFD_DOUBLEBUFFER,
PFD_TYPE_RGBA, // RGBA pixel values
24, // 24-bit color
0, 0, 0, // RGB bits & shift sizes.
0, 0, 0, // Don't care about them
0, 0, // No alpha buffer info
0, 0, 0, 0, 0, // No accumulation buffer
32, // 32-bit depth buffer
0, // No stencil buffer
0, // No auxiliary buffers
PFD_MAIN_PLANE, // Layer type
0, // Reserved (must be 0)
0, // No layer mask
0, // No visible mask
0 // No damage mask
};
int nMyPixelFormatID;
HGLRC hrc;
GLfloat fMaxObjSize, fAspect;
GLfloat fNearPlane, fFarPlane;
m_pDC=new CClientDC(this);
nMyPixelFormatID = ChoosePixelFormat( m_pDC->GetSafeHdc(), &pfd );
SetPixelFormat( m_pDC->GetSafeHdc(), nMyPixelFormatID, &pfd );
hrc = wglCreateContext(m_pDC->GetSafeHdc());
wglMakeCurrent(m_pDC->GetSafeHdc(), hrc);
GetClientRect(&m_oldRect);
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
if(m_oldRect.bottom)
fAspect = (GLfloat)m_oldRect.right/m_oldRect.bottom;
else
f
Aspect = 1.0f;
fNearPlane = 3.0f;
fFarPlane = 7.0f;
fMaxObjSiz