可能会是什如下
代码如下
BOOL Ctest9View::PreCreateWindow(CREATESTRUCT& cs)
{ cs.style |= WS_CLIPSIBLINGS | WS_CLIPCHILDREN;//openGL必需的
return CView::PreCreateWindow(cs);
GLboolean a;
glGetBooleanv(GL_DOUBLEBUFFER,&a);
}void Ctest9View::OnDraw(CDC* /*pDC*/)
{
Ctest9Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
CPaintDC dc(this); // device context for painting
RenderScene();
auxSwapBuffers();
SwapBuffers(dc.m_ps.hdc);
}
BOOL Ctest9View::SetWindowPixelFormat(HDC hDC)
{//定义窗口的像素格式
PIXELFORMATDESCRIPTOR pixelDesc =
{
sizeof(PIXELFORMATDESCRIPTOR),
1,
PFD_DOUBLEBUFFER |
PFD_SUPPORT_OPENGL |
PFD_DRAW_TO_WINDOW|PFD_GENERIC_FORMAT|PFD_DRAW_TO_BITMAP,
PFD_TYPE_RGBA,
24,
0,0,0,0,0,0,
0,
0,
0,
0,0,0,0,
32,
0,
0,
PFD_MAIN_PLANE,
0,
0,0,0
};
//pixelDesc.dwFlags=PFD_DOUBLEBUFFER;
if (pixelDesc.dwFlags&(PFD_SUPPORT_OPENGL|PFD_DOUBLEBUFFER))
{
this->m_GLPixelIndex = ChoosePixelFormat(hDC,&pixelDesc);//选择最相近的像素格式
if(this->m_GLPixelIndex==0)
{
this->m_GLPixelIndex = 1;//默认的像素格式
if(DescribePixelFormat(hDC,this->m_GLPixelIndex,sizeof(PIXELFORMATDESCRIPTOR),&pixelDesc)==0)
{//用默认的像素格式进行设置
return FALSE;
}
}
if(SetPixelFormat(hDC,this->m_GLPixelIndex,&pixelDesc)==FALSE)
{
return FALSE;
}
}
return TRUE;
}BOOL Ctest9View::InitGL(GLvoid) // All Setup For OpenGL Goes Here
{
glShadeModel(GL_SMOOTH); // Enable Smooth Shading
glMatrixMode(GL_PROJECTION);
glMatrixMode(GL_MODELVIEW);
auxInitDisplayMode(AUX_DOUBLE|AUX_RGBA);
//auxInitDisplayMode(AUX_DOUBLE);//设置成双缓存模式auxInitDisplayMode(AUX_DOUBLE);//设置成双缓存模式
glClearColor(0.0,0.0,0.0,0.0);// Black Background
glPolygonMode(GL_FRONT,GL_FILL);
glPolygonMode(GL_BACK,GL_FILL);
glClearDepth(1.0f); // Depth Buffer Setup
glEnable(GL_DEPTH_TEST); // Enables Depth Testing
glDepthFunc(GL_LEQUAL); // The Type Of Depth Testing To Do
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Really Nice Perspective Calculations
return TRUE; // Initialization Went OK
}
BOOL Ctest9View::CreateViewGLContext(HDC hDC)
{
this->m_hGLContext = wglCreateContext(hDC);//创建RC
if(this->m_hGLContext==NULL)
{//创建失败
return FALSE;
} if(wglMakeCurrent(hDC,this->m_hGLContext)==FALSE)
{//选为当前RC失败
return FALSE;
}
return TRUE;
}
int Ctest9View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1; // TODO: 在此添加您专用的创建代码
HWND hWnd = this->GetSafeHwnd();
HDC hDC = ::GetDC(hWnd); if(this->SetWindowPixelFormat(hDC)==FALSE)
{//设置像素格式
return 0;
}
if(this->CreateViewGLContext(hDC)==FALSE)
{//创建RC并选为所用
return 0;
}
if(!this->InitGL())
{//初始化openGL
return 0;
}
BuildList();
return 1;
}void Ctest9View::OnDestroy()
{
CView::OnDestroy(); // TODO: 在此处添加消息处理程序代码
if(wglGetCurrentContext()!=NULL)
{
wglMakeCurrent(NULL,NULL);
}
if(this->m_hGLContext!=NULL)
{
wglDeleteContext(this->m_hGLContext);
this->m_hGLContext = NULL;
}
}void Ctest9View::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
// TODO: 在此处添加消息处理程序代码
GLsizei width,height;
width = cx;
height = cy;
if (height==0) // Prevent A Divide By Zero By
{
height=1; // Making Height Equal One
}
glViewport(0,0,width,height); // Reset The Current Viewport
glMatrixMode(GL_PROJECTION); // Select The Projection Matrix
glLoadIdentity(); // Reset The Projection Matrix
// Calculate The Aspect Ratio Of The Window
gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);//透视投影
glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix
glLoadIdentity(); // Reset The Modelview Matrix
}void Ctest9View::OnPaint()
{ //CPaintDC dc(this); // device context for painting
// TODO: 在此处添加消息处理程序代码
// 不为绘图消息调用 CView::OnPaint()
//SwapBuffers(dc.m_ps.hdc);
CView::OnPaint();
}
void Ctest9View::RenderScene()
{
GLboolean a;
glGetBooleanv(GL_DOUBLEBUFFER,&a); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
// Position / translation
glTranslated(-1.5,-1.5,-10.0);
glRotated(m_xRotate, 1.0, 0.0, 0.0);
glRotated(m_yRotate, 0.0, 1.0, 0.0);
glScalef(2,2,2);
::glCallList(1);
::glCallList(2);
glPopMatrix();
glFlush();
//SwapBuffers(wglGetCurrentDC());
//InvalidateRect(NULL,FALSE);
}int Ctest9View::BuildList(GLvoid)
{// Here's Where We Do All The Drawing
glGenLists(2);
::glNewList(1,GL_COMPILE); glShadeModel(GL_SMOOTH); glColor3ub(255,255,255);
glLineWidth(2.0); //线宽设置 glBegin(GL_LINES);
// draw x axis in red, y axis in green, z axis in blue
glColor3f(1., .2, .2);
glVertex3f(0., 0., 0.);
glVertex3f(1., 0., 0.); glColor3f(.2, 1., .2);
glVertex3f(0., 0., 0.);
glVertex3f(0., 1., 0.); glColor3f(.2, .2, 1.);
glVertex3f(0., 0., 0.);
glVertex3f(0., 0., 1.); glEnd();
::glEndList(); ::glNewList(2,GL_COMPILE);
float i, j;
int count = 0;
GLfloat white4[] = {.4, .4, .4, 1.};
GLfloat white1[] = {.1, .1, .1, 1.};
GLfloat green5[] = {0., .5, 0., 1.};
GLfloat green2[] = {0., .2, 0., 1.};
GLfloat black[] = {0., 0., 0., 1.};
GLfloat mat_shininess[] = {7.}; // Phong exponent
glBegin(GL_QUADS);
for(i=-15.;i<=15.;i+=1)
{
for(j=-15.;j<=15.;j+=1)
{
if((count%2) == 0)
{
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, black);
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, white4);
glColor3f(.6, .6, .6);
}
else
{
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, black);
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, green5);
glColor3f(.8, .8, .8);
} glNormal3f(0.,0.,1.); glVertex3f(j, 0, i);
glVertex3f(j, 0, i+1);
glVertex3f(j+1,0, i+1);
glVertex3f(j+1,0, i);
count++;
}
}
glEnd();
::glEndList();
return TRUE; // Everything Went OK
}
代码如下
BOOL Ctest9View::PreCreateWindow(CREATESTRUCT& cs)
{ cs.style |= WS_CLIPSIBLINGS | WS_CLIPCHILDREN;//openGL必需的
return CView::PreCreateWindow(cs);
GLboolean a;
glGetBooleanv(GL_DOUBLEBUFFER,&a);
}void Ctest9View::OnDraw(CDC* /*pDC*/)
{
Ctest9Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
CPaintDC dc(this); // device context for painting
RenderScene();
auxSwapBuffers();
SwapBuffers(dc.m_ps.hdc);
}
BOOL Ctest9View::SetWindowPixelFormat(HDC hDC)
{//定义窗口的像素格式
PIXELFORMATDESCRIPTOR pixelDesc =
{
sizeof(PIXELFORMATDESCRIPTOR),
1,
PFD_DOUBLEBUFFER |
PFD_SUPPORT_OPENGL |
PFD_DRAW_TO_WINDOW|PFD_GENERIC_FORMAT|PFD_DRAW_TO_BITMAP,
PFD_TYPE_RGBA,
24,
0,0,0,0,0,0,
0,
0,
0,
0,0,0,0,
32,
0,
0,
PFD_MAIN_PLANE,
0,
0,0,0
};
//pixelDesc.dwFlags=PFD_DOUBLEBUFFER;
if (pixelDesc.dwFlags&(PFD_SUPPORT_OPENGL|PFD_DOUBLEBUFFER))
{
this->m_GLPixelIndex = ChoosePixelFormat(hDC,&pixelDesc);//选择最相近的像素格式
if(this->m_GLPixelIndex==0)
{
this->m_GLPixelIndex = 1;//默认的像素格式
if(DescribePixelFormat(hDC,this->m_GLPixelIndex,sizeof(PIXELFORMATDESCRIPTOR),&pixelDesc)==0)
{//用默认的像素格式进行设置
return FALSE;
}
}
if(SetPixelFormat(hDC,this->m_GLPixelIndex,&pixelDesc)==FALSE)
{
return FALSE;
}
}
return TRUE;
}BOOL Ctest9View::InitGL(GLvoid) // All Setup For OpenGL Goes Here
{
glShadeModel(GL_SMOOTH); // Enable Smooth Shading
glMatrixMode(GL_PROJECTION);
glMatrixMode(GL_MODELVIEW);
auxInitDisplayMode(AUX_DOUBLE|AUX_RGBA);
//auxInitDisplayMode(AUX_DOUBLE);//设置成双缓存模式auxInitDisplayMode(AUX_DOUBLE);//设置成双缓存模式
glClearColor(0.0,0.0,0.0,0.0);// Black Background
glPolygonMode(GL_FRONT,GL_FILL);
glPolygonMode(GL_BACK,GL_FILL);
glClearDepth(1.0f); // Depth Buffer Setup
glEnable(GL_DEPTH_TEST); // Enables Depth Testing
glDepthFunc(GL_LEQUAL); // The Type Of Depth Testing To Do
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Really Nice Perspective Calculations
return TRUE; // Initialization Went OK
}
BOOL Ctest9View::CreateViewGLContext(HDC hDC)
{
this->m_hGLContext = wglCreateContext(hDC);//创建RC
if(this->m_hGLContext==NULL)
{//创建失败
return FALSE;
} if(wglMakeCurrent(hDC,this->m_hGLContext)==FALSE)
{//选为当前RC失败
return FALSE;
}
return TRUE;
}
int Ctest9View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1; // TODO: 在此添加您专用的创建代码
HWND hWnd = this->GetSafeHwnd();
HDC hDC = ::GetDC(hWnd); if(this->SetWindowPixelFormat(hDC)==FALSE)
{//设置像素格式
return 0;
}
if(this->CreateViewGLContext(hDC)==FALSE)
{//创建RC并选为所用
return 0;
}
if(!this->InitGL())
{//初始化openGL
return 0;
}
BuildList();
return 1;
}void Ctest9View::OnDestroy()
{
CView::OnDestroy(); // TODO: 在此处添加消息处理程序代码
if(wglGetCurrentContext()!=NULL)
{
wglMakeCurrent(NULL,NULL);
}
if(this->m_hGLContext!=NULL)
{
wglDeleteContext(this->m_hGLContext);
this->m_hGLContext = NULL;
}
}void Ctest9View::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
// TODO: 在此处添加消息处理程序代码
GLsizei width,height;
width = cx;
height = cy;
if (height==0) // Prevent A Divide By Zero By
{
height=1; // Making Height Equal One
}
glViewport(0,0,width,height); // Reset The Current Viewport
glMatrixMode(GL_PROJECTION); // Select The Projection Matrix
glLoadIdentity(); // Reset The Projection Matrix
// Calculate The Aspect Ratio Of The Window
gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);//透视投影
glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix
glLoadIdentity(); // Reset The Modelview Matrix
}void Ctest9View::OnPaint()
{ //CPaintDC dc(this); // device context for painting
// TODO: 在此处添加消息处理程序代码
// 不为绘图消息调用 CView::OnPaint()
//SwapBuffers(dc.m_ps.hdc);
CView::OnPaint();
}
void Ctest9View::RenderScene()
{
GLboolean a;
glGetBooleanv(GL_DOUBLEBUFFER,&a); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
// Position / translation
glTranslated(-1.5,-1.5,-10.0);
glRotated(m_xRotate, 1.0, 0.0, 0.0);
glRotated(m_yRotate, 0.0, 1.0, 0.0);
glScalef(2,2,2);
::glCallList(1);
::glCallList(2);
glPopMatrix();
glFlush();
//SwapBuffers(wglGetCurrentDC());
//InvalidateRect(NULL,FALSE);
}int Ctest9View::BuildList(GLvoid)
{// Here's Where We Do All The Drawing
glGenLists(2);
::glNewList(1,GL_COMPILE); glShadeModel(GL_SMOOTH); glColor3ub(255,255,255);
glLineWidth(2.0); //线宽设置 glBegin(GL_LINES);
// draw x axis in red, y axis in green, z axis in blue
glColor3f(1., .2, .2);
glVertex3f(0., 0., 0.);
glVertex3f(1., 0., 0.); glColor3f(.2, 1., .2);
glVertex3f(0., 0., 0.);
glVertex3f(0., 1., 0.); glColor3f(.2, .2, 1.);
glVertex3f(0., 0., 0.);
glVertex3f(0., 0., 1.); glEnd();
::glEndList(); ::glNewList(2,GL_COMPILE);
float i, j;
int count = 0;
GLfloat white4[] = {.4, .4, .4, 1.};
GLfloat white1[] = {.1, .1, .1, 1.};
GLfloat green5[] = {0., .5, 0., 1.};
GLfloat green2[] = {0., .2, 0., 1.};
GLfloat black[] = {0., 0., 0., 1.};
GLfloat mat_shininess[] = {7.}; // Phong exponent
glBegin(GL_QUADS);
for(i=-15.;i<=15.;i+=1)
{
for(j=-15.;j<=15.;j+=1)
{
if((count%2) == 0)
{
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, black);
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, white4);
glColor3f(.6, .6, .6);
}
else
{
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, black);
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, green5);
glColor3f(.8, .8, .8);
} glNormal3f(0.,0.,1.); glVertex3f(j, 0, i);
glVertex3f(j, 0, i+1);
glVertex3f(j+1,0, i+1);
glVertex3f(j+1,0, i);
count++;
}
}
glEnd();
::glEndList();
return TRUE; // Everything Went OK
}
解决方案 »
- 关于俄罗斯方块的几个问题
- 对话框背景图片上的按钮被覆盖了?分不够再加...
- 编译错误,莫名其妙啊
- 自定义控件的显示问题(在线等,急用)
- "必需的资源无法得到",如何解决?
- 在深圳找it工作,哪个求职网站好点,大家给支点招
- 请问一个DWORD和CString的类型变换的问题
- sql server2k 中 smalldatetime 类型对应到vc里是什么类型?ODBC API
- 可不可以不通过文档模板管理自己的文档
- 关于volatile在多线程中的问题,麻烦斑竹Mackz等进
- 在线求助,鼠标进入对话框后,OnMouseMove响应一个对话框,一直闪烁的问题
- InternetReadFileEx的问题
在这个消息里return TRUE
看着头晕