国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
基于MFC下的OpenGL框架

創(chuàng)建一個(gè)SDI(單文檔)MFC應(yīng)用程序
這里項(xiàng)目名稱叫做MFCOpenGL,視圖類(lèi)名叫做CMFCOpenGLView
CMFCOpenGLView類(lèi)的.h文件中,加入OpenGL的運(yùn)行庫(kù)
#include <GL/gl.h>

#include <GL/glu.h>

#include <GL/glaux.h>

opengl32.lib glu32.lib glaux.lib加入到工程中,方法:Project->Settings->Link->Object/library modules中輸入opengl32.lib glu32.lib glaux.lib,不要忘記空格.

 

CMFCOpenGLView類(lèi)中加入成員函數(shù)
//
函數(shù)功能:設(shè)置屏幕像素格式
BOOL CMFCOpenGLView::SetupPixelFormat()
{
   static    PIXELFORMATDESCRIPTOR    pfd    ={   
    sizeof(PIXELFORMATDESCRIPTOR),    //  
結(jié)構(gòu)大小
    1,                                         //
版本號(hào)
    PFD_DRAW_TO_WINDOW    |                     //
格式支持窗口
    PFD_SUPPORT_OPENGL    |                     //
格式必須支持OpenGL
    PFD_DOUBLEBUFFER,                          //
格式支持雙緩沖   
    PFD_TYPE_RGBA,                             //
申請(qǐng)RGBA格式
    24,                                        //
色彩深度,此處為24
    0,    0,    0,    0,    0,    0,                //
忽略的色彩位
    0,                                         //
無(wú)Alpha緩存
    0,                                         //
忽略Shift
    0,                                         //
無(wú)累加緩存
    0,    0,    0,    0,                          //
忽略聚集位
    32,                                        // 32
Z-緩存(深度緩存)
    0,                                         //
無(wú)蒙板緩存
    0,                                         //
無(wú)輔助緩存
    PFD_MAIN_PLANE,                            //
主繪圖層
    0,                                         // Reserved
    0,    0,    0                                //
忽略層遮罩
   };     
   int    pixelformat;     
   if    ((pixelformat   = ChoosePixelFormat(m_pDC->m_hDC,    &pfd))    ==    0    )   
   {   
MessageBox("ChoosePixelFormat    failed");   
return    FALSE;   
   }     
   if    (SetPixelFormat(m_pDC->m_hDC,    pixelformat,    &pfd)    ==    FALSE)   
   {   
MessageBox("SetPixelFormat    failed");   
return    FALSE;   
   }     
   return    TRUE;  
}

//函數(shù)功能:使用客戶區(qū)的DC創(chuàng)建并初始化渲染環(huán)境,渲染環(huán)境創(chuàng)建成功,我們就可以在上面繪畫(huà)了!
void CMFCOpenGLView::InitOpenGL()
{

m_pDC= new CClientDC(this);    //創(chuàng)建DC   
     ASSERT(m_pDC    !=    NULL);     

     if (!SetupPixelFormat())    //設(shè)定繪圖的位圖格式,函數(shù)下面列出   
         return;     

     m_hRC= wglCreateContext(m_pDC->m_hDC);//創(chuàng)建    RC   
     wglMakeCurrent(m_pDC->m_hDC,    m_hRC);    //RC   
與當(dāng)前    DC    相關(guān)聯(lián)   

glShadeModel(GL_SMOOTH);
glClearColor(0.0,0.0,0.0,0.5);
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);

}

//函數(shù)功能:當(dāng)窗口大小(WM_SIZE消息)發(fā)生改變時(shí)調(diào)用,參數(shù)w,h是改變后的窗口大小
GLvoid CMFCOpenGLView::SceneResizeViewport(GLsizei w, GLsizei h)
{
if(h==0)
   h=1;

m_aspect=(GLfloat)w/(GLfloat)h;
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();

gluPerspective(45.0f,m_aspect,0.1f,100.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
//
函數(shù)功能:釋放、刪除RC,做些清理的工作
void CMFCOpenGLView::DisableOpenGL()
{

   wglMakeCurrent(m_pDC->m_hDC,NULL);    // 釋放與m_hDC    對(duì)應(yīng)的    RC   
   wglDeleteContext(m_hRC);              //
刪除    RC     
   if    (m_pDC)   
delete    m_pDC;                     //
刪除當(dāng)前    View    擁有的    DC 
}

//函數(shù)功能:繪畫(huà),這里只是創(chuàng)建一個(gè)框架,所以沒(méi)有繪畫(huà)的代碼
void CMFCOpenGLView::DrawScene()   //
繪畫(huà)場(chǎng)景
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glLoadIdentity();

}

PreCreateWindow函數(shù)中加入如下語(yǔ)句:
cs.style=cs.style|WS_CLIPSIBLINGS|WS_CLIPCHILDREN

響應(yīng)WM_CREATE消息的OnCreate函數(shù);
加入如下語(yǔ)句:
InitOpenGL();
SetTimer(1,1,NULL);   //
設(shè)置時(shí)鐘

響應(yīng)WM_TIMER消息的OnTimer函數(shù);
加入如下語(yǔ)句:
Invalidate(); 

響應(yīng)WM_SIZE消息的OnSize函數(shù);
加入如下語(yǔ)句:
SceneResizeViewport((GLfloat)cx,(GLfloat)cy);

響應(yīng)WM_ERASEBKGND消息的OnEraseBKgnd函數(shù);
修改如下:
   return TRUE;
// return CView::OnEraseBkgnd(pDC);   //
將這條語(yǔ)句注釋,并直接return TRUE;

響應(yīng)WM_DESTROY消息的OnDestroy函數(shù); 
加入如下語(yǔ)句:
DisableOpenGL();

OnDraw()函數(shù)中
加入如下語(yǔ)句:
DrawScene();  

這里我并沒(méi)有給全部的代碼,只是給出所添加的代碼。并且只是一個(gè)MFC框架下的OpenGL環(huán)境,所以代碼并不復(fù)雜,也很容易理解。

 

 

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
OpenGL(非常值得借鑒)
手把手教你搭建用MFC進(jìn)行OpenGL編程的框架
OpenGL游戲?qū)W習(xí)一:MFC下OpenGL環(huán)境的搭建
用MFC實(shí)現(xiàn)OpenGL編程
OpenGL中顯示文本
MFC單文檔程序中搭建OpenGL框架
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服