日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

win32下的OpenGL绘图环境框架

發布時間:2024/3/13 编程问答 63 豆豆
生活随笔 收集整理的這篇文章主要介紹了 win32下的OpenGL绘图环境框架 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Win32OpenGL入門

主要的步驟包括:添加opengl頭文件,庫文件,鍵盤鼠標響應,像素格式設置,opengl環境初始化,繪圖變量設置,創建窗口,窗口大小改變時響應,繪制場景,源文件

1,?新建一個win32項目(注意,不是console程序),在添加過程中,創建一個空的項目,然后,在解決方案資源管理器的源文件樹目錄下,添加一個cpp文件,文件可以命名為mian.cpp

2,?添加繪圖相關的頭文件和庫文件,在新建的main.cpp中,加入如下頭文件:

?

#include <windows.h>???????????????????????????????????????? // Windows的頭文件

#include <gl\gl.h>???????????????????????????????????????????????? // Header File For The OpenGL32 Library

#include <gl\glu.h>?????????????????????????????????????????????? // Header File For The GLu32 Library

#include <gl\glaux.h>????????????????????? // Header File For The Glaux Library

#include <math.h>?????????????????????????????????????????????? // 引入數學函數庫中的Sin

#include <stdio.h>??????????????????????????????????????????????? // Header File For Standard Input/Output

在項目,配置屬性-連接器-輸入的附加依賴項里,加入opengl32.libglu32.libglaux.lib

glut.lib,如圖所示。

3,為創建繪圖窗口,定義基本的相關變量,這些變量在opengl繪圖中,都必須用到。

HGLRC?????????? hRC=NULL;?? // 窗口著色描述表句柄 HDC???????????? hDC=NULL;??? // OpenGL渲染描述表句柄 HWND??????????? hWnd=NULL;??????????????????? // 保存我們的窗口句柄 HINSTANCE?????? hInstance;???? // 保存程序的實例

第一行設置的變量是Rendering Context(著色描述表)。每一個OpenGL都被連接到一個著色描述表上。著色描述表將所有的OpenGL調用命令連接到Device Context(設備描述表)上。我將OpenGL的著色描述表定義為 hRC 。要讓您的程序能夠繪制窗口的話,還需要創建一個設備描述表,也就是第二行的內容。Windows的設備描述表被定義為 hDC 。DC將窗口連接到GDI(Graphics Device Interface圖形設備接口)。而RC將OpenGL連接到DC。第三行的變量 hWnd 將保存由Windows給我們的窗口指派的句柄。最后,第四行為我們的程序創建了一個Instance(實例)。

?

4,為響應鍵盤,鼠標等操作,以及窗口活動情況,是否全屏等

bool??????????? keys[256];???????????????????? // 保存鍵盤按鍵的數組 bool??????????? active=TRUE;??????????????? // 窗口的活動標志,缺省為TRUE bool??????????? fullscreen=TRUE;???????? // 全屏標志缺省,缺省設定成全屏模式 GLfloat???????????? rtri;???? // 用于幾何體旋轉的角度

active 變量用來告知程序窗口是否處于最小化的狀態。如果窗口已經最小化的話,我們可以做從暫停代碼執行到退出程序的任何事情。我喜歡暫停程序。這樣可以使得程序不用在后臺保持運行。

fullscreen 變量的作用相當明顯。如果我們的程序在全屏狀態下運行, fullscreen 的值為TRUE,否則為FALSE。這個全局變量的設置十分重要,它讓每個過程都知道程序是否運行在全屏狀態下。

?

5我們需要先定義WndProc()。必須這么做的原因是CreateGLWindow()有對WndProc()的引用,但WndProc()CreateGLWindow()之后才出現。在C語言中,如果我們想要訪問一個當前程序段之后的過程和程序段的話,必須在程序開始處先申明所要訪問的程序段。所以下面的一行代碼先行定義了WndProc(),使得CreateGLWindow()能夠引用WndProc()

LRESULT?CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);?? // WndProc的定義

?

6,繪圖視口的尺寸以及在窗口大小改變時的響應函數。不管窗口的大小是否已經改變(假定您沒有使用全屏模式)。甚至您無法改變窗口的大小時(例如您在全屏模式下),它至少仍將運行一次--在程序開始時設置我們的透視圖。OpenGL場景的尺寸將被設置成它顯示時所在窗口的大小。

GLvoid ReSizeGLScene(GLsizei width, GLsizei height)?? // 重置OpenGL窗口大小 { ??????????????????? if (height==0)???????????????????????????????????? ??????????????????? // 防止被零除 ??????????????????? { ???????????????????????????????????????? height=1;??????????????????????????????????????????? // Height設為1 ??????????????????? } ? ??????????????????? glViewport(0, 0, width, height);?????????????????????????? // 重置當前的視口glMatrixMode(GL_PROJECTION);??????????????????????????? // 選擇投影矩陣 ??????????????????? glLoadIdentity();??????????????????????????????????????????????????? // 重置投影矩陣 ? ??????????????????? // 設置投影模式為透視投影 ??????????????????? gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f); ? ??????????????????? glMatrixMode(GL_MODELVIEW);???????????????????? // 選擇模型觀察矩陣 ??????????????????? glLoadIdentity();??????????????????????????????????????????????????? // 重置模型觀察矩陣 }

透視圖設置屏幕。意味著越遠的東西看起來越小。這么做創建了一個現實外觀的場景。此處透視按照基于窗口寬度和高度的45度視角來計算。0.1f,100.0f是我們在場景中所能繪制深度的起點和終點。 glMatrixMode(GL_PROJECTION)指明接下來的兩行代碼將影響projection matrix(投影矩陣)。投影矩陣負責為我們的場景增加透視。 glLoadIdentity()近似于重置。它將所選的矩陣狀態恢復成其原始狀態。調用 glLoadIdentity()之后我們為場景設置透視圖。

glMatrixMode(GL_MODELVIEW)指明任何新的變換將會影響 modelview matrix(模型觀察矩陣)。模型觀察矩陣中存放了我們的物體訊息。最后我們重置模型觀察矩陣。如果您還不能理解這些術語的含義,請別著急。在以后的教程里,我會向大家解釋。只要知道如果您想獲得一個精彩的透視場景的話,必須這么做。

?

7接下的代碼段中,我們將對OpenGL進行所有的設置。我們將設置清除屏幕所用的顏色,打開深度緩存,啟用smooth shading(陰影平滑),等等。這個例程直到OpenGL窗口創建之后才會被調用。此過程將有返回值。但我們此處的初始化沒那么復雜,現在還用不著擔心這個返回值

int InitGL(GLvoid)???????????????????????????? // 此處開始對OpenGL進行所有設置 { glShadeModel(GL_SMOOTH);???????????????? // 啟用陰影平滑 glClearColor(0.0f, 0.0f, 0.0f, 0.0f);?????????? // 黑色背景 glClearDepth(1.0f);???????????????????????????????????? // 設置深度緩存 glEnable(GL_DEPTH_TEST);????????????????? // 啟用深度測試 glDepthFunc(GL_LEQUAL); // 所作深度測試的類型 glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);// 告訴系統對透視進行修正 return TRUE;???????????????????????????????????????????????? // 初始化 OK }

GL_SMOOTH陰影平滑通過多邊形精細的混合色彩,并對外部光進行平滑。我將在另一個教程中更詳細的解釋陰影平滑。

深度緩存:將深度緩存設想為屏幕后面的層。深度緩存不斷的對物體進入屏幕內部有多深進行跟蹤。幾乎所有在屏幕上顯示3D場景OpenGL程序都使用深度緩存。它的排序決定那個物體先畫。這樣您就不會將一個圓形后面的正方形畫到圓形上來。深度緩存是OpenGL十分重要的部分。

?

8,繪圖部分。下一段包括了所有的繪圖代碼。任何您所想在屏幕上顯示的東東都將在此段代碼中出現。 這里,繪制了一個簡單的金字塔,每個頂點采用不用的顏色

int DrawGLScene(GLvoid)????????????????????????????????? // 從這里開始進行所有的繪制 { ??????????????????? glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);????? // 清除屏幕和深度緩存 ??????????????????? glLoadIdentity();??????????????????????????????????????????????????? // 重置當前的模型觀察矩陣 ??????????????????? glTranslatef(-1.5f,0.0f,-6.0f);????????????????????????????? // 左移 1.5 單位,并移入屏幕 6.0 ??????????????????? glRotatef(rtri,0.0f,1.0f,0.0f);??????????? // Y軸旋轉金字塔 ? ??????????????????? glBegin(GL_TRIANGLES);????????????????????????????????? // 開始繪制金字塔的各個面 ???????????????????????????????????????? glColor3f(1.0f,0.0f,0.0f);????????????????????????????????????????????????????????? // 紅色 ???????????????????????????????????????? glVertex3f( 0.0f, 1.0f, 0.0f);???????????? // 三角形的上頂點 (前側面) ???????????????????????????????????????? glColor3f(0.0f,1.0f,0.0f);????????????????????????????????????? // 綠色 ???????????????????????????????????????? glVertex3f(-1.0f,-1.0f, 1.0f);??????????????????????????????? // 三角形的左下頂點 (前側面) ???????????????????????????????????????? glColor3f(0.0f,0.0f,1.0f);????????????????????????????????????? // 藍色 ???????????????????????????????????????? glVertex3f( 1.0f,-1.0f, 1.0f);???????????????????????????????? // 三角形的右下頂點 (前側面) ???????????????????????????????????????? glColor3f(1.0f,0.0f,0.0f);????????????????????????????????????? // 紅色 ???????????????????????????????????????? glVertex3f( 0.0f, 1.0f, 0.0f);???????????????????????????????? // 三角形的上頂點 (右側面) ???????????????????????????????????????? glColor3f(0.0f,0.0f,1.0f);????????????????????????????????????? // 藍色 ???????????????????????????????????????? glVertex3f( 1.0f,-1.0f, 1.0f);???????????????????????????????? // 三角形的左下頂點 (右側面) ???????????????????????????????????????? glColor3f(0.0f,1.0f,0.0f);???????????????? // 綠色 ???????????????????????????????????????? glVertex3f( 1.0f,-1.0f, -1.0f);?????????????????????????????? // 三角形的右下頂點 (右側面) ???????????????????????????????????????? glColor3f(1.0f,0.0f,0.0f);????????????????????????????????????? // 紅色 ???????????????????????????????????????? glVertex3f( 0.0f, 1.0f, 0.0f);???????????????????????????????? // 三角形的上頂點 (后側面) ???????????????????????????????????????? glColor3f(0.0f,1.0f,0.0f);????????????????????????????????????????????????????????? // 綠色 ???????????????????????????????????????? glVertex3f( 1.0f,-1.0f, -1.0f);?????????????????????????????? // 三角形的左下頂點 (后側面) ???????????????????????????????????????? glColor3f(0.0f,0.0f,1.0f);????????????????????????????????????????????????????????? // 藍色 ???????????????????????????????????????? glVertex3f(-1.0f,-1.0f, -1.0f);?????????????????????????????? // 三角形的右下頂點 (后側面) ???????????????????????????????????????? glColor3f(1.0f,0.0f,0.0f);????????????????????????????????????????????????????????? // 紅色 ???????????????????????????????????????? glVertex3f( 0.0f, 1.0f, 0.0f);???????????????????????????????? // 三角形的上頂點 (左側面) ???????????????????????????????????????? glColor3f(0.0f,0.0f,1.0f);????????????????????????????????????????????????????????? // 藍色 ???????????????????????????????????????? glVertex3f(-1.0f,-1.0f,-1.0f);??????????????????????????????? // 三角形的左下頂點 (左側面) ???????????????????????????????????????? glColor3f(0.0f,1.0f,0.0f);????????????????????????????????????????????????????????? // 綠色 ???????????????????????????????????????? glVertex3f(-1.0f,-1.0f, 1.0f);??????????????????????????????? // 三角形的右下頂點 (左側面) ??????????????????? glEnd();????? ??????????????????? rtri+=0.2f;?????????????????????? // 增加三角形的旋轉變量 ???????????????????????????????????????????????????????????????????????????????? ??????????????????? return TRUE;????????????????????????????????????????????????????????????????????????????? }

關于繪圖:在opengl里面繪圖,首先要了解的就是坐標原點,OpenGL的坐標原點默認情況下,在屏幕中心。OpenGL的坐標系統是右手坐標系統,默認情況下,屏幕朝上為y,朝左為x,朝外為z。

9,釋放程序的繪圖指針。在程序退出之前調用。KillGLWindow() 的作用是依次釋放著色描述表,設備描述表和窗口句柄。

GLvoid KillGLWindow(GLvoid)????? // 正常銷毀窗口 { ??????????????????? if (fullscreen)???????????????? // 我們處于全屏模式嗎? ??????????????????? { ???????????????????????????????????????? ChangeDisplaySettings(NULL,0);???????????????????? // 是的話,切換回桌面,因為全屏模式直接關閉窗口,可能引發錯誤 ???????????????????????????????????????? ShowCursor(TRUE);??????????????????????????????????????????? // 顯示鼠標指針 ??????????????????? } ??????????????????? if (hRC)?????????????????????????????????????????????????????????????????? // 我們擁有OpenGL渲染描述表嗎? ??????????????????? { ???????????????????????????????????????? if (!wglMakeCurrent(NULL,NULL))?????????????????? // 我們能否釋放DCRC描述表? ???????????????????????????????????????? { ???????????????????????????????????????????????????????????? MessageBox(NULL,"釋放DCRC失敗。","關閉錯誤",MB_OK | MB_ICONINFORMATION); ???????????????????????????????????????? } ???????????????????????????????????????? if (!wglDeleteContext(hRC))?????????? // 我們能否刪除RC? ???????????????????????????????????????? { ???????????????????????????????????????????????????????????? MessageBox(NULL,"釋放RC失敗。","關閉錯誤",MB_OK | MB_ICONINFORMATION); ???????????????????????????????????????? } ???????????????????????????????????????? hRC=NULL;?????????????????????????????????????????????????????????? // RC設為 NULL ??????????????????? } ??????????????????? if (hDC && !ReleaseDC(hWnd,hDC))?????????????????????????????????? // 我們能否釋放 DC? ??????????????????? { ???????????????????????????????????????? MessageBox(NULL,"釋放DC失敗。","關閉錯誤",MB_OK | MB_ICONINFORMATION); ???????????????????????????????????????? hDC=NULL;?????????????????????????????????????????????????????????? // DC 設為 NULL ??????????????????? } ??????????????????? if (hWnd && !DestroyWindow(hWnd))?????????????????????????????????? // 能否銷毀窗口? ??????????????????? { ???????????????????????????????????????? MessageBox(NULL,"釋放窗口句柄失敗。","關閉錯誤",MB_OK | MB_ICONINFORMATION); ???????????????????????????????????????? hWnd=NULL;??????????????????????????????????? ??????????????????? // hWnd 設為 NULL ??????????????????? } ??????????????????? if (!UnregisterClass("OpenG",hInstance))??????????????????????????? // 能否注銷類? ??????????????????? { ???????????????????????????????????????? MessageBox(NULL,"不能注銷窗口類。","關閉錯誤",MB_OK | MB_ICONINFORMATION); ???????????????????????????????????????? hInstance=NULL;???????????????????????????? ??????????????????? // hInstance 設為 NULL ??????????????????? } }

?

10,創建窗口。此過程返回布爾變量(TRUE FALSE)。他還帶有5個參數:窗口的標題欄,窗口的寬度,窗口的高度,色彩位數(16/24/32),和全屏標志(TRUE --全屏模式, FALSE--窗口模式 )。返回的布爾值告訴我們窗口是否成功創建。

BOOL CreateGLWindow(char* title, int width, int height, int bits, bool fullscreenflag) { //我們要求Windows為我們尋找相匹配的象素格式時,Windows尋找結束后將模式值保存在變量PixelFormat ??????????????????? GLuint???????????????????????????? PixelFormat;????????????????? // 保存查找匹配的結果 ??????????????????? WNDCLASS????????????????? wc;?????????????????????????????????? // 窗口類結構 ??????????????????? DWORD???????????????????????? dwExStyle;???????????????????? ??????????????????? // 擴展窗口風格 ??????????????????? DWORD???????????????????????? dwStyle;???????????????????????? // 窗口風格 ??????????????????? RECT WindowRect;????????????????????????????????????????????? // 取得矩形的左上角和右下角的坐標值 ??????????????????? WindowRect.left=(long)0;?????????????? // Left?? 設為 0 ??????????????????? WindowRect.right=(long)width;????? ??????????????????? // Right?設為要求的寬度 ??????????????????? WindowRect.top=(long)0;??????????????????????????????????? // Top??? 設為 0 ??????????????????? WindowRect.bottom=(long)height;??????????????????????????????????????? // Bottom 設為要求的高度 ??????????????????? fullscreen=fullscreenflag;?????????????????????????????????? // 設置全局全屏標志 ??????????????????? hInstance?????????????????????? = GetModuleHandle(NULL);????????? // 取得我們窗口的實例 ??????????????????? wc.style????????????????????????? = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;// 移動時重畫,并為窗口取得DCCS_OWNDC為窗口創建一個私有的DC。這意味著DC不能在程序間共享。 ??????????????????? wc.lpfnWndProc?????????????????????????????? = (WNDPROC) WndProc;?????????????? // WndProc處理消息 ??????????????????? wc.cbClsExtra?????????????????????????????????? = 0;????????????????????????????????? // 無額外窗口數據 ??????????????????? wc.cbWndExtra???????????????????????????????? = 0;????????????????????????????????? // 無額外窗口數據 ??????????????????? wc.hInstance???????????????????????????????????? = hInstance;?????????????????? // 設置實例 ??????????????????? wc.hIcon???????????????????????? = LoadIcon(NULL, IDI_WINLOGO);// 裝入缺省圖標 ??????????????????? wc.hCursor??????????????????????????????????????? = LoadCursor(NULL, IDC_ARROW);// 裝入默認鼠標指針 ??????????????????? wc.hbrBackground?????? = NULL;????????????????????????????????????????????? // GL不需要背景 ??????????????????? wc.lpszMenuName????????????????????????? = NULL;????????????????????????? // 不需要菜單 ??????????????????? wc.lpszClassName????? = "OpenG";???????????????????????????????????????????????????????????? // 設定類名字 ? ??????????????????? if (!RegisterClass(&wc))?????????????????????????????????????? // 嘗試注冊窗口類 ??????????????????? { ???????????????????????????????????????? MessageBox(NULL,"注冊窗口失敗","錯誤",MB_OK|MB_ICONEXCLAMATION); ???????????????????????????????????????? return FALSE;??????????????????????????????????????????????????????? // 退出并返回FALSE ??????????????????? } ??????????????????? if (fullscreen)???????????????????????????????????? // 要嘗試全屏模式嗎? ??????????????????? { ???????????????????????????????????????? DEVMODE dmScreenSettings;???? ??????????????????? // 設備模式 ???????????????????????????????????????? memset(&dmScreenSettings,0,sizeof(dmScreenSettings));// 確保內存清空為零 ???????????????????????????????????????? dmScreenSettings.dmSize=sizeof(dmScreenSettings);?????????????????????? // Devmode 結構的大小 ???????????????????????????????????????? dmScreenSettings.dmPelsWidth?= width;?????????????????????????? // 所選屏幕寬度 ???????????????????????????????????????? dmScreenSettings.dmPelsHeight???????????????????? = height;???? ???????????????????? // 所選屏幕高度 ???????????????????????????????????????? dmScreenSettings.dmBitsPerPel = bits;????????? // 每象素所選的色彩深度??????????????????? dmScreenSettings.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT; ???????????????????????????????????????? // 嘗試設置顯示模式并返回結果。注: CDS_FULLSCREEN 移去了狀態條。 ???????????????????????????????????????? if (ChangeDisplaySettings(&dmScreenSettings,CDS_FULLSCREEN)!=DISP_CHANGE_SUCCESSFUL) ???????????????????????????????????????? { ???????????????????????????????????????????????????????????? // 若模式失敗,提供兩個選項:退出或在窗口內運行。 ???????????????????????????????????????????????????????????? if (MessageBox(NULL,"全屏模式在當前顯卡上設置失敗!\n使用窗口模式?","NeHe G",MB_YESNO|MB_ICONEXCLAMATION)==IDYES) ???????????????????????????????????????????????????????????? { ???????????????????????????????????????????????????????????????????????????????? fullscreen=FALSE;// 選擇窗口模式(Fullscreen=FALSE) ???????????????????????????????????????????????????????????? } ???????????????????????????????????????????????????????????? else ???????????????????????????????????????????????????????????? { ???????????????????????????????????????????????????????????????????????????????? // 彈出一個對話框,告訴用戶程序結束 ???????????????????????????????????????????????????????????????????????????????? MessageBox(NULL,"程序將被關閉","錯誤",MB_OK|MB_ICONSTOP); ???????????????????????????????????????????????????????????????????????????????? return FALSE;?????????????? //?退出并返回 FALSE ???????????????????????????????????????????????????????????? } ???????????????????????????????????????? } ??????????????????? } ??????????????????? if (fullscreen)???????????????????????????????????? // 仍處于全屏模式嗎? ??????????????????? { ???????????????????????????????????????? dwExStyle=WS_EX_APPWINDOW;???????????????? // 擴展窗體風格 ???????????????????????????????????????? dwStyle=WS_POPUP;???????????????????????????????????????? // 窗體風格 ???????????????????????????????????????? ShowCursor(FALSE);????????????????????? // 隱藏鼠標指針 ??????????????????? } ??????????????????? else ??????????????????? { ???????????????????????????????????????? dwExStyle=WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;// 擴展窗體風格 ???????????????????????????????????????? dwStyle=WS_OVERLAPPEDWINDOW;?????????? ??????????????????? //?窗體風格 ??????????????????? } ??????????????????? AdjustWindowRectEx(&WindowRect, dwStyle, FALSE, dwExStyle);?// 調整窗口大小 ??????????????????? if (!(hWnd=CreateWindowEx(??????? dwExStyle,???????????????????????????????????????? // 擴展窗體風格 ????????????????????????????????????????????????????????????????????????????????????????????????????? "OpenGL", ??????????????????? // 類名字 ????????????????????????????????????????????????????????????????????????????????????????????????????? title,???????????????????????????????? ???????????????????? // 窗口標題 ????????????????????????????????????????????????????????????????????????????????????????????????????? WS_CLIPSIBLINGS |?? // 必須的窗體風格屬性 ????????????????????????????????????????????????????????????????????????????????????????????????????? WS_CLIPCHILDREN |???????????????????? // 必須的窗體風格屬性 ????????????????????????????????????????????????????????????????????????????????????????????????????? dwStyle,???????????????????????? // 選擇的窗體屬性 ???????????????????????????????????????????????????????????????????????????????? ??????????????????? 0, 0,????????????????????????????????????????????????????? // 窗口位置 ????????????????????????????????????????????????????????????????????????????????????????????????????? WindowRect.right-WindowRect.left,// ????????????????????????????????????????????????????????????????????????????????????????????????????? WindowRect.bottom-WindowRect.top,//高度 ????????????????????????????????????????????????????????????????????????????????????????????????????? NULL,????????????????????????????????????????????????? // 無父窗口 ????????????????????????????????????????????????????????????????????????????????????????????????????? NULL,????????????????????????????????????????????????? // 無菜單 ????????????????????????????????????????????????????????????????????????????????????????????????????? hInstance,?????????????????????????????????????????? // 實例 ????????????????????????????????????????????????????????????????????????????????????????????????????? NULL)))??? // 不向WM_CREATE傳遞任何東東 ??????????????????? { ???????????????????????????????????????? KillGLWindow();??????????????????????????????????????????????????????????????????????? // 重置顯示區 ???????????????????????????????????????? MessageBox(NULL,"不能創建一個窗口設備描述表","錯誤",MB_OK|MB_ICONEXCLAMATION); ???????????????????????????????????????? return FALSE;??????????????????????????????????????????????????????? // 返回 FALSE ??????????????????? } ??????????????????? static?????????? PIXELFORMATDESCRIPTOR pfd=// /pfd 告訴窗使用的像素格式 ??????????????????? { ???????????????????????????????????????? sizeof(PIXELFORMATDESCRIPTOR),???????????? // 上述格式描述符的大小 ???????????????????????????????????????? 1,????????????????????????????????????????????????????????????????????????????? // 版本號 ???????????????????????????????????????? PFD_DRAW_TO_WINDOW |????????????????????????????? // 格式支持窗口 ???????????????????????????????????????? PFD_SUPPORT_OPENGL |?????????? // 格式必須支持OpenGL ???????????????????????????????????????? PFD_DOUBLEBUFFER,???????????????? // 必須支持雙緩沖 ???????????????????????????????????????? PFD_TYPE_RGBA,????????????????????????? // 申請 RGBA 格式 ???????????????????????????????????????? bits,????????????????????????????????????????????????????? // 選定色彩深度 ???????????????????????????????????????? 0, 0, 0, 0, 0, 0,??????????????????????????????????? // 忽略的色彩位 ???????????????????????????????????????? 0,????????????????????????????????????????????????????????? // Alpha緩存 ???????????????????????????????????????? 0,????????????????????????????????????????????????????????? // 忽略Shift Bit ???????????????????????????????????????? 0,????????????????????????????????????????????????????????? // 無累加緩存 ???????????????????????????????????????? 0, 0, 0, 0,???????????????????????????????????????????? // 忽略聚集位 ???????????????????????????????????????? 16,?????????????????????????????????????????????????????? // 16 Z-緩存 (深度緩存) ???????????????????????????????????????? 0,????????????????????????????????????????????????????????? // 無蒙板緩存 ???????????????????????????????????????? 0,???????????????? ???????????????????????????????????????? // 無輔助緩存 ???????????????????????????????????????? PFD_MAIN_PLANE,??????????????????????? // 主繪圖層 ???????????????????????????????????????? 0,????????????????????????????????????????????????????????? // Reserved ???????????????????????????????????????? 0, 0, 0????????????????????????????????????????????????? // 忽略層遮罩 ??????????????????? }; ??????????????????? if (!(hDC=GetDC(hWnd)))??????????????????????????????????????????????????????? // 取得設備描述表了么? ??????????????????? { ???????????????????????????????????????? KillGLWindow();??????????????????????????????????????????????????????????????????????? // 重置顯示區 ???????????????????????????????????????? MessageBox(NULL,"不能創建一種相匹配的像素格式","錯誤",MB_OK|MB_ICONEXCLAMATION); ???????????????????????????????????????? return FALSE;??????????????????????????????????????????????????????????????????????????? // 返回 FALSE ??????????????????? } ??????????????????? if (!(PixelFormat=ChoosePixelFormat(hDC,&pfd)))// Windows 找到相應的象素格式了嗎? ??????????????????? { ???????????????????????????????????????? KillGLWindow();??????????????????????????????????????????????????? // 重置顯示區 ???????????????????????????????????????? MessageBox(NULL,"不能設置像素格式","錯誤",MB_OK|MB_ICONEXCLAMATION); ???????????????????????????????????????? return FALSE;??????????????????????????????????????????????????????? // 返回 FALSE ??????????????????? } ??????????????????? if(!SetPixelFormat(hDC,PixelFormat,&pfd))??? // 能夠設置象素格式么? ??????????????????? { ???????????????????????????????????????? KillGLWindow();??????????????????????????????????????????????????????????????????????? // 重置顯示區 ???????????????????????????????????????? MessageBox(NULL,"不能設置像素格式","錯誤",MB_OK|MB_ICONEXCLAMATION); ???????????????????????????????????????? return FALSE;??????????????????????????????????????????????????????????????????????????? // 返回 FALSE ??????????????????? } ??????????????????? if (!(hRC=wglCreateContext(hDC)))????????????????????????????????????? // 能否取得著色描述表? ??????????????????? { ???????????????????????????????????????? KillGLWindow();??????????????????????????????? // 重置顯示區 ???????????????????????????????????????? MessageBox(NULL,"不能創建OpenGL渲染描述表","錯誤",MB_OK|MB_ICONEXCLAMATION); ???????????????????????????????????????? return FALSE;??????????????????????????????????????????????????????????????????????????? // 返回 FALSE ??????????????????? } ??????????????????? if(!wglMakeCurrent(hDC,hRC))???????????????????????? // 嘗試激活著色描述表 ??????????????????? { ???????????????????????????????????????? KillGLWindow();??????????????????????????????? // 重置顯示區 ???????????????????????????????????????? MessageBox(NULL,"不能激活當前的OpenGL渲然描述表","錯誤",MB_OK|MB_ICONEXCLAMATION); ???????????????????????????????????????? return FALSE;??????????????????????????????????? // 返回 FALSE ??????????????????? } ??????????????????? ShowWindow(hWnd,SW_SHOW);??????????????????????????????????????? // 顯示窗口 ??????????????????? SetForegroundWindow(hWnd);???????????????????????? // 略略提高優先級 ??????????????????? SetFocus(hWnd);????????????????????????????????????????????????? // 設置鍵盤的焦點至此窗口 ??????????????????? ReSizeGLScene(width, height);???????????????????????? // 設置透視 GL 屏幕 ??????????????????? if (!InitGL())???????????????????????????????????????????????????????????? // 初始化新建的GL窗口 ??????????????????? { ???????????????????????????????????????? KillGLWindow();?????????? // 重置顯示區 ???????????????????????????????????????? MessageBox(NULL,"Initialization Failed.","ERROR",MB_OK|MB_ICONEXCLAMATION); ???????????????????????????????????????? return FALSE;??????????????????????????????????? // 返回 FALSE ??????????????????? } ??????????????????? return TRUE;????????????????????????????????????????????????????????? // 成功 }

?

11,建立了窗口類之后,我們接下來完成窗口消息處理函數。

LRESULT CALLBACK WndProc(?HWND??????? hWnd,???????????????????????????? // 窗口的句柄 ???????????????????????????????????????????????????????????????????????????????? UINT?????????? uMsg,????????????????????????????? // 窗口的消息 ???????????????????????????????????????????????????????????????????????????????? WPARAM?? wParam,??????????????????????? // 附加的消息內容 ???????????????????????????????????????????????????????????????????????????????? LPARAM??? lParam)????????????????????????? // 附加的消息內容 { ??????????????????? switch (uMsg)??????????????????????????????????????????????????????? // 檢查Windows消息 ??????????????????? { ???????????????????????????????????????? case WM_ACTIVATE:????????????????????? // 監視窗口激活消息 ???????????????????????????????????????? { ???????????????????????????????????????????????????????????? if (!HIWORD(wParam))??????????????????? // 檢查最小化狀態 ???????????????????????????????????????????????????????????? { ???????????????????????????????????????????????????????????????????????????????? active=TRUE;??????????????? // 程序處于激活狀態 ???????????????????????????????????????????????????????????? } ???????????????????????????????????????????????????????????? else ???????????????????????????????????????????????????????????? { ???????????????????????????????????????????????????????????????????????????????? active=FALSE;????????????? // 程序不再激活 ???????????????????????????????????????????????????????????? } ? ???????????????????????????????????????????????????????????? return 0;????????????????????????? // 返回消息循環 ???????????????????????????????????????? } ???????????????????????????????????????? case WM_SYSCOMMAND:??????????????????????????????? // 系統中斷命令 ???????????????????????????????????????? { ???????????????????????????????????????????????????????????? switch (wParam)?????????????????????????????? // 檢查系統調用 ???????????????????????????????????????????????????????????? { ???????????????????????????????????????????????????????????????????????????????? case SC_SCREENSAVE:?????????????? // 屏保要運行? ???????????????????????????????????????????????????????????????????????????????? case SC_MONITORPOWER:// 顯示器要進入節電模式? ???????????????????????????????????????????????????????????????????????????????? return 0;????????????????????????? // 阻止發生 ???????????????????????????????????????????????????????????? } ???????????????????????????????????????????????????????????? break;????????????????????????????????????????????????????????????????????? // 退出 ???????????????????????????????????????? } ???????????????????????????????????????? case WM_CLOSE:??????????????????????????????????????????????? // 收到Close消息? ???????????????????????????????????????? { ???????????????????????????????????????????????????????????? PostQuitMessage(0);?????????????????????????????????????????? // 發出退出消息 ???????????????????????????????????????????????????????????? return 0;?????????????????????????????????????????????????????????????????????????????????????? // 返回 ???????????????????????????????????????? } ???????????????????????????????????????? case WM_KEYDOWN:???????????????????????????????????????????????????????????? // 有鍵按下么? ???????????????????????????????????????? { ???????????????????????????????????????????????????????????? keys[wParam] = TRUE;??????????????????????????????????????? // 如果是,設為TRUE ???????????????????????????????????????????????????????????? return 0;????????????????????????????????????????????? ??????????????????? // 返回 ???????????????????????????????????????? } ???????????????????????????????????????? case WM_KEYUP:??????????????????????????????????????????????????????????????????? // 有鍵放開么? ???????????????????????????????????????? { ???????????????????????????????????????????????????????????? keys[wParam] = FALSE;????????????????????????????????????? // 如果是,設為FALSE ???????????????????????????????????????????????????????????? return 0;????????????????????????????????????????????? // 返回 ???????????????????????????????????????? } ???????????????????????????????????????? case WM_SIZE:???????????????????????????????????????????????????? // 調整OpenGL窗口大小 ???????????????????????????????????????? { ???????????????????????????????????????????????????????????? ReSizeGLScene(LOWORD(lParam),HIWORD(lParam));????????????????????? // LoWord=Width,HiWord=Height ???????????????????????????????????????????????????????????? return 0;????????????????????????????????????????????? // 返回 ???????????????????????????????????????? } ??????????????????? } ??????????????????? // DefWindowProc傳遞所有未處理的默認消息。 ??????????????????? return DefWindowProc(hWnd,uMsg,wParam,lParam); }

?

12,好了,南西北風都準備好了,現在只差東風。接下來我們來定義東風——程序的入口。調用窗口創建例程,處理窗口消息,并監視人機交互。

int ?WINAPI WinMain(??????????????????? HINSTANCE???????????????? hInstance,????????????????????? // 當前窗口實例 ???????????????????????????????????????????????????????????? HINSTANCE???????????????? hPrevInstance,????????????? // 前一個窗口實例 ???????????????????????????????????????????????????????????? LPSTR??????????????????????????? lpCmdLine,??????????????????????????????????????? // 命令行參數 ???????????????????????????????????????????????????????????? int??????????????????????????????????? nCmdShow)????????????????? // 窗口顯示狀態 { ??????????????????? MSG?????????? msg;??????????????????????????????????????????????????? ??????????????????? // Windowsx消息結構 ??????????????????? BOOL???????? done=FALSE;??????????????????????????????????? ??????????????????? // 用來退出循環的Bool 變量 ??????????????????? // 提示用戶選擇運行模式 ??????????????????? if (MessageBox(NULL,"你想在全屏模式下運行么?", "設置全屏模式",MB_YESNO|MB_ICONQUESTION)==IDNO) ??????????????????? { ???????????????????????????????????????? fullscreen=FALSE;?????????????????????????????????????????????? // FALSE為窗口模式 ??????????????????? } ??????????????????? // 創建OpenGL窗口 /*CreateGLWindow函數的參數依次為標題、寬度、高度、色彩深度,以及全屏標志。就這么簡單!我很欣賞這段代碼的簡潔。如果未能創建成功,函數返回FALSE。程序立即退出。*/ ??????????????????? if (!CreateGLWindow("win32下的OpenGL程序學習入門 ",640,480,16,fullscreen)) ??????????????????? { ???????????????????????????????????????? return 0;????????????????????????????????????????????? // 失敗退出 ??????????????????? } ??????????????????? while(!done)????????????????????????????????????? ??????????????????? // 保持循環直到 done=TRUE ??????????????????? { ???????????????????????????????????????? if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))????????? // 有消息在等待嗎? ???????????????????????????????????????? { ???????????????????????????????????????????????????????????? if (msg.message==WM_QUIT)????? // 收到退出消息? ???????????????????????????????????????????????????????????? { ???????????????????????????????????????????????????????????????????????????????? done=TRUE;???????????????? // 是,則done=TRUE ???????????????????????????????????????????????????????????? } ???????????????????????????????????????????????????????????? else???????????????????????????????????????????????????? ??????????????????? // 不是,處理窗口消息 ???????????????????????????????????????????????????????????? { ???????????????????????????????????????????????????????????????????????????????? TranslateMessage(&msg);???????????? ???????????????????? // 翻譯消息 ???????????????????????????????????????????????????????????????????????????????? DispatchMessage(&msg);?????????????????????????????????? // 發送消息 ???????????????????????????????????????????????????????????? } ???????????????????????????????????????? } ???????????????????????????????????????? else????????????????????????????????????????????????????????????????????????? // 如果沒有消息 ???????????????????????????????????????? { ???????????????????????????????????????????????????????????? // 繪制場景。監視ESC鍵和來自DrawGLScene()的退出消息 ???????????????????????????????????????????????????????????? if (active)??????????????????????? // 程序激活的么? ???????????????????????????????????????????????????????????? { ???????????????????????????????????????????????????????????????????????????????? if (keys[VK_ESCAPE])???????????????????????????????????????? // ESC 按下了么? ???????????????????????????????????????????????????????????????????????????????? { ????????????????????????????????????????????????????????????????????????????????????????????????????? done=TRUE;???????????????? // ESC 發出退出信號 ???????????????????????????????????????????????????????????????????????????????? } ???????????????????????????????????????????????????????????????????????????????? else???????????????????????????????? // 不是退出的時候,刷新屏幕 ???????????????????????????????????????????????????????????????????????????????? { ????????????????????????????????????????????????????????????????????????????????????????????????????? DrawGLScene();????????? // 繪制場景 ????????????????????????????????????????????????????????????????????????????????????????????????????? SwapBuffers(hDC);???? // 交換緩存 (雙緩存) ???????????????????????????????????????????????????????????????????????????????? } ???????????????????????????????????????????????????????????? } //下面代碼的用于進行全屏跟普通窗口之間的切換 ???????????????????????????????????????????????????????????? if (keys[VK_F1])??????????????????????????????? // F1鍵按下了么? ???????????????????????????????????????????????????????????? { ???????????????????????????????????????????????????????????????????????????????? keys[VK_F1]=FALSE;?// Key數組中的值為 FALSE ???????????????????????????????????????????????????????????????????????????????? KillGLWindow();??????????????????????????????? // 銷毀當前的窗口 ???????????????????????????????????????????????????????????????????????????????? fullscreen=!fullscreen;???????????????????? // 切換 全屏 / 窗口 模式 ???????????????????????????????????????????????????????????????????????????????? // 重建 OpenGL 窗口 ???????????????????????????????????????????????????????????????????????????????? if (!CreateGLWindow("NeHe's OpenGL 程序框架",640,480,16,fullscreen)) ???????????????????????????????????????????????????????????????????????????????? { ????????????????????????????????????????????????????????????????????????????????????????????????????? return 0;???? // 如果窗口未能創建,程序退出 ???????????????????????????????????????????????????????????????????????????????? } ???????????????????????????????????????????????????????????? } ???????????????????????????????????????? } ??????????????????? } ??????????????????? // 關閉程序 ??????????????????? KillGLWindow();????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? // 銷毀窗口 ??????????????????? return (msg.wParam);?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? // 退出程序 }

雙緩沖繪圖:使用雙緩存可以實現無閃爍的動畫,繪圖領域一個經常用到的技術,特別是大規模場景的繪圖。我們實際上在另一個看不見的"屏幕"上繪圖。當我們交換緩存后,我們當前的屏幕被隱藏,現在看到的是剛才看不到的屏幕。這也是我們看不到場景繪制過程的原因。場景只是即時顯示。

?

13,好了,運行程序

?

?

?

?

?

?

?

?

附:

常見錯誤列表:

1新建的工程如果出現error C2664: MessageBoxW: 不能將參數2 從const char [42]轉換為LPCWSTR這種錯誤, 將項目->配置屬性->常規->字符集改為支持多字節字符集

2. error LNK2019: 無法解析的外部符號_main,該符號在函數___tmainCRTStartup 中被引用,找到項目->配置屬性->連接器->系統,將子系統修改為Windows (/SUBSYSTEM:WINDOWS)

轉載于:https://www.cnblogs.com/yanhuiw/archive/2010/08/06/1794467.html

總結

以上是生活随笔為你收集整理的win32下的OpenGL绘图环境框架的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

天天干天天操天天射 | 久草在线手机视频 | 亚洲视频电影在线 | 亚洲区另类春色综合小说校园片 | 美女网站在线观看 | 综合色爱| 久久久久久久影视 | 中文字幕一区二区三区久久 | 亚洲电影影音先锋 | 天天干,天天插 | 激情五月六月婷婷 | 国产特黄色片 | 欧美精品乱码久久久久久按摩 | 青青草华人在线视频 | 久久久wwww| 国产精品麻豆视频 | 主播av在线 | 亚洲精品乱码久久久久久蜜桃欧美 | 激情综合网五月激情 | 欧美午夜a | 久久99国产精品免费网站 | 中文字幕av免费在线观看 | 久久久久久麻豆 | www.99av| 免费午夜av| 久草视频在 | 国产精品一区二区免费在线观看 | 精品人人人人 | 中文字幕在线播放一区二区 | 91中文字幕在线 | 国产小视频你懂的在线 | 91av在线免费播放 | 91av电影在线 | 久久综合狠狠综合 | 91成人国产 | 99精彩视频 | 亚洲精品乱码久久久久久久久久 | 玖玖视频网 | 97成人精品 | 91色九色| 射射射综合网 | 中文字幕在线观看第二页 | 中文亚洲欧美日韩 | 黄色a一级视频 | 国产精品嫩草影视久久久 | 成人黄色小说网 | 国产麻豆精品免费视频 | 99国产一区| 久久午夜影视 | 国产日韩在线播放 | 国产色视频一区二区三区qq号 | 97在线观 | 婷婷国产v亚洲v欧美久久 | 久久久精品99 | 久久激情日本aⅴ | 五月婷丁香网 | 在线观看亚洲国产精品 | 人人插人人插 | 蜜桃麻豆www久久囤产精品 | 亚洲做受高潮欧美裸体 | 日韩中文字幕免费视频 | 五月婷婷综合网 | 欧美日韩国产一区二区三区在线观看 | 欧美一区二区三区在线 | 最近中文字幕视频完整版 | 久青草视频在线观看 | 天天综合网久久综合网 | 亚洲理论电影网 | 久久大片 | 亚洲国产一区在线观看 | 91视频高清免费 | 久久图| 日韩专区av | 天天干天天天天 | 免费碰碰 | 国产精品综合av一区二区国产馆 | 91九色最新 | 中文字幕亚洲不卡 | 黄色大全免费观看 | 色偷偷88888欧美精品久久 | 亚洲久久视频 | 超碰九九 | 最新色视频| 精品99在线视频 | 国产又粗又猛又色又黄视频 | 国产剧情av在线播放 | 91毛片在线观看 | 9i看片成人免费看片 | 午夜免费电影院 | 午夜私人影院久久久久 | 欧美日韩精品久久久 | 爱色婷婷| 五月天电影免费在线观看一区 | 在线免费观看成人 | www久久久久 | 色综合天天做天天爱 | 中日韩三级视频 | 97视频网址 | 欧美一级免费 | 91片网| 亚洲一区二区视频 | 国产精品九九九九九 | 综合色综合| 91av国产视频 | 99草视频在线观看 | 国内成人精品2018免费看 | 一级成人网| 精品在线免费视频 | 麻豆影视在线播放 | 探花视频网站 | 精品国产免费久久 | 97超在线| 久久99精品国产麻豆婷婷 | 免费观看黄色av | 成人在线免费观看视视频 | 精品国产自 | 久久久香蕉视频 | 国产精品男女视频 | 久久久久久国产精品999 | 在线 国产一区 | 久久免费电影网 | 亚洲精品小视频 | 不卡电影一区二区三区 | 91激情视频在线观看 | 成人午夜影院在线观看 | 91av在线国产 | 国产色区 | av片在线观看免费 | 黄www在线观看| 久久精品人人做人人综合老师 | 激情av网 | 欧美日韩中字 | 久草网视频 | 在线观看韩国av | 97超碰在线久草超碰在线观看 | 国产亚洲欧美一区 | 999视频网站| 免费看精品久久片 | 91丨九色丨蝌蚪丰满 | 人人网av | 人人精品久久 | 81精品国产乱码久久久久久 | 久久视频国产精品免费视频在线 | 天天艹天天爽 | 国产精品美女久久久久久久久久久 | 国产精品99久久久久久武松影视 | 免费看黄20分钟 | 亚洲欧洲精品久久 | 久久精品一区二区三区四区 | 亚洲视屏 | 天天操天天射天天插 | 久久久久久久看片 | 亚洲专区 国产精品 | 中文字幕在线视频免费播放 | 99热999| 久久久久久久久久免费视频 | 日韩免费一区二区三区 | 亚洲三级影院 | 欧美另类z0zx | 欧美久久久| 国产麻豆精品传媒av国产下载 | av中文字幕在线观看网站 | av中文字幕在线看 | 精品黄色片 | 成人a视频在线观看 | 狠狠狠狠狠狠 | 日韩精品免费一区二区在线观看 | 午夜国产福利视频 | 午夜精品久久久久99热app | 亚洲高清视频在线观看免费 | 91探花在线 | 2019中文最近的2019中文在线 | 欧美日韩91 | 国产91精品久久久久久 | 日本中文不卡 | 亚洲电影图片小说 | 亚洲专区 国产精品 | 在线观看国产一区 | 久久天天躁狠狠躁亚洲综合公司 | 91最新在线观看 | 久草9视频 | 热久久免费视频 | 日本乱视频 | 91免费版在线 | 国产精品国产三级国产不产一地 | 国产精品美女久久久久久2018 | 婷婷色综 | 视频一区视频二区在线观看 | 狠狠干狠狠久久 | 久久精品久久精品 | 精品久久电影 | 欧美精品在线一区二区 | 欧美福利网址 | 国内精品视频一区二区三区八戒 | 91最新地址永久入口 | 久久黄色片子 | 999视频在线播放 | 日韩高清国产精品 | 人人爽人人看 | www.黄色片.com | 精品国产123 | 国产黄大片在线观看 | 亚洲三区在线 | 国产在线观看中文字幕 | 米奇影视7777| 亚洲精品国产欧美在线观看 | 精品福利网站 | 精品99在线观看 | www在线观看视频 | 国产成人一区二区精品非洲 | 精品国产乱码一区二 | 国产精品99精品 | 久久国产精品小视频 | 91在线观看视频 | 日日日视频 | 久久视频在线观看免费 | 91视频观看免费 | 久久国产精品99久久久久久进口 | 久久精品香蕉视频 | 久久综合综合久久综合 | 亚洲成人av电影在线 | 成人av在线电影 | 激情av在线资源 | 天天躁天天操 | 国内精品中文字幕 | 五月天久久婷 | 日本精油按摩3 | 色香蕉在线视频 | 午夜婷婷网 | 美女一二三区 | 97在线观看视频 | av中文字幕av | 久久久久久久久久久黄色 | 国产免费资源 | 日日插日日干 | 在线免费观看视频一区二区三区 | 在线观看爱爱视频 | 国产精品欧美久久久久无广告 | 国产在线一区观看 | 夜色成人网 | 欧美人牲 | 国产成年免费视频 | 一级a性色生活片久久毛片波多野 | 91九色在线播放 | 美女在线观看av | 91亚州 | 亚洲毛片一区二区三区 | 国产偷v国产偷∨精品视频 在线草 | 日韩精品国产一区 | 国产精品久久久久久五月尺 | 欧美性极品xxxx做受 | 91少妇精拍在线播放 | 中文字幕一区二区三区久久 | 中文字幕久久精品一区 | 中文字幕在线字幕中文 | 国产精品理论在线观看 | 欧美日韩网址 | 午夜美女av | 日韩女同av | 日韩在线一区二区免费 | 五月天激情开心 | 五月婷婷影院 | 亚洲涩涩网站 | 精品国产_亚洲人成在线 | 亚洲综合色视频在线观看 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 国产成人免费在线观看 | 亚a在线| 欧美成人精品欧美一级乱 | 日日干天天 | 国产精品久久久久久久久毛片 | 狠狠干,狠狠操 | 九九热在线观看视频 | 久久国产精品免费观看 | 成年人视频在线免费观看 | 欧美不卡视频在线 | 亚洲综合色av | 日韩中文字幕亚洲一区二区va在线 | 亚洲黄色片 | 青青草国产免费 | 日韩在线视频免费看 | 黄色片网站 | 国产精品麻豆视频 | 国产一区在线不卡 | 国产精品免费av | 亚洲欧美日本A∨在线观看 青青河边草观看完整版高清 | 欧美国产视频在线 | 国产日本亚洲高清 | 狠狠干夜夜操 | av大片免费在线观看 | 精品专区| 久草在线在线精品观看 | 一级片视频在线 | 五月天婷婷在线播放 | 天天色天天干天天 | 日韩精品一区二区三区在线播放 | 二区视频在线观看 | 人人干人人搞 | 婷婷色伊人 | 国产成人99久久亚洲综合精品 | 久久午夜电影院 | 日韩在线观看 | 国产精品久久嫩一区二区免费 | 中文电影网 | 人人讲下载 | 综合色播| 一区二区三区电影在线播 | 日韩精品中文字幕av | 7777精品伊人久久久大香线蕉 | av在线电影网站 | 国产视频一区在线免费观看 | 91精品在线观看入口 | 又湿又紧又大又爽a视频国产 | 久久精品黄| 免费毛片一区二区三区久久久 | 日本一区二区三区免费观看 | 永久免费的啪啪网站免费观看浪潮 | 日本美女xx | 999久久久精品视频 日韩高清www | 免费亚洲电影 | 亚洲精品综合欧美二区变态 | 日本在线中文 | 国产精品系列在线观看 | 欧产日产国产69 | 国产精品99在线观看 | 天干啦夜天干天干在线线 | 91精品国产乱码久久 | 成人理论在线观看 | 97av在线| 久久有精品 | 国产不卡视频在线 | 91手机视频在线 | 国产高清视频在线免费观看 | 免费看一级黄色大全 | 精品自拍sae8—视频 | 日韩黄色网络 | 国产精品久久麻豆 | av电影免费看 | 4438全国亚洲精品观看视频 | 91资源在线免费观看 | 五月婷婷开心中文字幕 | 久久久久久久99精品免费观看 | 日韩三级视频 | 国产日产av | 国产91精品欧美 | 超碰人人在 | 国产精品区免费视频 | 五月婷婷综合激情网 | 亚洲国产免费看 | 麻豆首页| 国内精品久久久精品电影院 | 在线导航av| 色综合婷婷久久 | 九色精品 | 久久久久久久久久伊人 | 久久精品一区二区三区中文字幕 | 国产在线观看你懂的 | 国产在线欧美在线 | 精品国产乱码一区二 | 亚洲成人黄色在线观看 | 夜夜夜夜猛噜噜噜噜噜初音未来 | 日韩一区精品 | 精品高清美女精品国产区 | 欧美日韩国产在线一区 | 国产精品99久久久 | 国产精品入口久久 | 婷婷丁香久久五月婷婷 | 91av亚洲| 欧美日韩视频在线观看免费 | 日韩一级电影在线观看 | 国产小视频在线免费观看 | 在线99热| 黄色小网站在线 | 91精品国产91久久久久福利 | 精品久久一区 | 一区二区三区四区精品视频 | 亚洲成av人片 | 九九热在线观看 | 伊人婷婷久久 | 在线观看91视频 | 激情av五月婷婷 | 久久久天堂 | 亚洲国产精品一区二区久久hs | 久久综合五月 | 天天干,天天操,天天射 | 免费看久久 | 亚洲少妇xxxx | 日韩,精品电影 | 国产成人精品一区二区三区 | 99热国产在线中文 | 九色福利视频 | 五月天婷亚洲天综合网鲁鲁鲁 | 国产一级不卡视频 | 福利av影院 | 国产午夜一区二区 | 亚洲影视资源 | 国产丝袜高跟 | 国产在线日韩 | 国内精品久久久久久久久久久 | 精品自拍sae8—视频 | 又黄又爽又湿又无遮挡的在线视频 | 亚洲精品中文字幕在线 | 69精品久久久 | 久久中国精品 | 国产精品久久久久影院日本 | 久精品在线观看 | 99 久久久久| av电影在线观看 | 免费观看xxxx9999片 | 日韩激情视频在线 | 久久久黄色免费网站 | 成人av中文字幕在线观看 | 欧美精品一区二区免费 | 久人人| 日韩影视大全 | 日本最新一区二区三区 | 日本中文在线播放 | 欧美一级片免费观看 | 国产精品va在线观看入 | 一级大片在线观看 | 91成人午夜 | 日韩视频在线观看视频 | 国产亚洲精品久久网站 | 96精品视频 | 亚洲国产mv| 免费观看国产成人 | 99久久99视频只有精品 | 国产精品一区二区你懂的 | 一级片色播影院 | 在线 日韩 av | 天天艹天天爽 | 日韩视频一区二区 | 久久免费观看视频 | 欧美在线视频第一页 | 亚洲国产久 | 777xxx欧美 | 国产中文字幕视频在线观看 | 国产精品久久久久久久久久久久午夜 | 国产精品久久久久久久久久免费 | 黄色在线免费观看网站 | 香蕉蜜桃视频 | 成人av电影免费在线播放 | 国产情侣一区 | 日女人免费视频 | 韩国av一区二区三区在线观看 | 成人超碰在线 | 在线国产黄色 | 亚洲日日夜夜 | 久久精品3 | 91av超碰| 91桃色免费视频 | 在线观看香蕉视频 | 色91在线| 最新av网址在线 | 国产精品午夜久久 | 91精品一区在线观看 | 黄色片视频免费 | 久草视频在线免费看 | 免费三级a| 欧美人体xx | 欧美性网站 | 久久久精品视频网站 | 精品日韩在线一区 | 欧美婷婷色 | 九九热精品国产 | 天天拍天天草 | 欧美在线你懂的 | 国产精品女同一区二区三区久久夜 | 亚洲精品一区二区在线观看 | 日韩免费在线 | 久久黄色免费观看 | 国产不卡av在线播放 | 最新日韩在线观看 | 国产精品久久免费看 | 国产精品高潮呻吟久久av无 | 亚洲午夜电影网 | 97超在线视频| 一本色道久久综合亚洲二区三区 | 亚洲欧美一区二区三区孕妇写真 | 欧美亚洲免费在线一区 | 成人小视频在线免费观看 | 久久国产a | 国产一级黄大片 | 在线韩国电影免费观影完整版 | 懂色av懂色av粉嫩av分享吧 | 精品黄色在线观看 | 日韩欧美视频二区 | 欧美久久久影院 | 久草在线免费电影 | 中文字幕资源在线观看 | 久久激情视频 久久 | 亚洲高清国产视频 | 婷婷精品国产一区二区三区日韩 | 五月婷婷色综合 | 成人观看 | 91传媒免费观看 | 一区二区在线不卡 | 成人毛片在线视频 | 国产精品露脸在线 | 国产精品对白一区二区三区 | 精品久久久久久亚洲综合网 | 亚洲狠狠干 | 午夜 在线 | 右手影院亚洲欧美 | 欧美精品xxx | 久久久91精品国产 | 亚洲一区欧美激情 | 黄色av电影在线 | 久久精品艹 | 婷婷在线视频观看 | 日韩在线免费不卡 | 精品在线视频一区 | 久久伦理影院 | 一区二区三区精品久久久 | 久久精品五月 | 精品自拍av| 欧美日韩视频免费 | 国产男女免费完整视频 | 国产一级在线免费观看 | 精品亚洲网 | 视频在线一区二区三区 | 亚洲国产免费网站 | 国产视频在线一区二区 | 超碰人人99| 国产91免费观看 | 少妇做爰k8经典 | 日本韩国精品在线 | 国产a级精品 | 日韩网站免费观看 | 亚洲电影一级黄 | 国产乱码精品一区二区三区介绍 | 色爱区综合激月婷婷 | 久久久精品高清 | 欧美三级高清 | 999久久久精品视频 日韩高清www | 99在线高清视频在线播放 | 毛片久久久 | 久草在线免费新视频 | 欧美精品一二 | 超碰在线网| 日韩久久午夜一级啪啪 | 日韩在线视频国产 | www日韩欧美| 免费观看视频的网站 | 在线观看免费日韩 | 久久99影院| av免费在线看网站 | 日韩欧美视频免费看 | 亚洲国产中文字幕在线视频综合 | 一区二区三区av在线 | 色.www| 天天综合入口 | 国产精品一区二区久久久 | 亚洲婷婷综合色高清在线 | 国产99久久99热这里精品5 | 91精品久久久久久综合五月天 | 日韩精品91偷拍在线观看 | 亚洲乱亚洲乱亚洲 | 日本免费一二三区 | 成年人在线免费看视频 | 91九色视频在线观看 | 天天色天天操天天爽 | 精品久久久久久久久亚洲 | 久久婷婷精品 | 久久精品视| 亚洲精品在线二区 | 国产做a爱一级久久 | 国产福利中文字幕 | 国产一级精品在线观看 | 99视频网址| 久久免费视频国产 | 国产精品女 | 欧美激情第十页 | 国产精品theporn | 久久精品国产精品亚洲 | 日韩一区精品 | 国产高清不卡 | 97精品国自产拍在线观看 | 国产美女精品视频免费观看 | 欧美不卡视频在线 | 国产精品扒开做爽爽的视频 | 少妇激情久久 | 字幕网资源站中文字幕 | 国产伦精品一区二区三区… | 999久久久精品视频 日韩高清www | 国产成人精品午夜在线播放 | 国产黄色片免费 | 91黄视频在线 | 亚洲精品va | 在线精品视频免费播放 | 91精品少妇偷拍99 | 日韩网站在线看片你懂的 | 人人艹视频 | 中文区中文字幕免费看 | 亚洲精品乱码久久久久久蜜桃不爽 | 免费视频网 | 欧美十八 | 久久精品中文字幕免费mv | 免费视频97 | 一级黄色网址 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 91视频一8mav | 欧美午夜理伦三级在线观看 | 欧女人精69xxxxxx | 在线免费91 | av免费试看 | 久久综合99 | 久久精品欧美一区二区三区麻豆 | 国产成人精品福利 | 免费日韩一区 | 亚洲国产精品日韩 | 夜夜操夜夜干 | 美女免费视频一区 | 亚洲欧美日韩在线看 | 精品久久久久免费极品大片 | 婷婷四房综合激情五月 | 国产精品久久久久久久久毛片 | 亚州精品天堂中文字幕 | 日韩精品一区二区免费视频 | 免费黄色在线网址 | 东方av在 | 色婷婷婷 | 婷婷成人综合 | 久久人人添人人爽添人人88v | 成人小视频在线观看免费 | 亚洲精品视 | 日韩在线观看视频一区二区三区 | 天天色天天操综合网 | 在线a视频 | 久精品视频在线 | 久久伊人八月婷婷综合激情 | 99视频在线精品 | 免费观看成人网 | 欧美日韩午夜在线 | 日韩一级电影在线观看 | 最近高清中文字幕在线国语5 | 91污污| 国产99一区二区 | 干干夜夜| 西西大胆免费视频 | 日韩精品一区二区三区在线视频 | 一级黄色a视频 | 亚洲精品乱码久久久久久蜜桃不爽 | 97人人澡人人爽人人模亚洲 | 四虎www com| 少妇bbbb搡bbbb桶 | 成年人在线免费看片 | 国产欧美中文字幕 | 欧美日韩亚洲在线观看 | 久久精品99国产精品 | 日韩精品一区二区三区丰满 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 少妇bbb| 91最新中文字幕 | 99久久婷婷国产综合亚洲 | 男女激情麻豆 | 一区 二区电影免费在线观看 | 五月天堂网 | 日韩在线色| 亚洲综合丁香 | 热久久最新地址 | 国产一级电影网 | 婷婷六月中文字幕 | 麻豆视频国产在线观看 | 丁香六月网 | 韩日精品在线观看 | 精品字幕在线 | 国产又粗又猛又色又黄网站 | 黄网站免费久久 | 五月天中文字幕 | 黄色小说免费在线观看 | 四虎成人av | av中文字幕第一页 | 精品国产一区二区三区久久久 | 国产专区视频在线观看 | 久草视频一区 | 亚洲国产日韩av | 国产亚洲无 | 狠狠色免费 | 日韩在线| 久久国产露脸精品国产 | 久久久久久久久久久久99 | 日韩免费三区 | 最近最新中文字幕视频 | 中文在线8新资源库 | 在线午夜av | 久久www免费人成看片高清 | 精品国产伦一区二区三区观看方式 | 亚洲精品综合欧美二区变态 | 99久久精品国产一区二区三区 | 黄色免费电影网站 | 久久综合精品国产一区二区三区 | 国产一区二区三区在线免费观看 | 日韩理论电影在线 | 香蕉久草在线 | 国产第一二区 | 国内99视频 | 黄污视频大全 | 国产精品一区二区三区视频免费 | 奇米影音四色 | 久久精品99北条麻妃 | 天天超碰 | 手机av在线网站 | 99中文字幕视频 | 国产成人综合精品 | 免费一级毛毛片 | 日韩精品免费在线播放 | 婷婷色在线 | 久久黄色片子 | 精品视频99 | 玖玖爱在线观看 | 亚洲国产成人精品久久 | www国产亚洲 | 免费看的国产视频网站 | 欧美日韩高清免费 | 激情久久综合网 | 九色在线视频 | 色婷婷九月 | 亚洲韩国一区二区三区 | 国产在线播放一区二区三区 | 日韩欧美在线观看 | 久久人人爽人人爽人人片av免费 | 成年人在线免费看视频 | 五月婷婷伊人网 | 午夜国产一区二区三区四区 | 久久99热这里只有精品国产 | 国产免费av一区二区三区 | 久久五月情影视 | 国产精品国产亚洲精品看不卡 | 国产视频亚洲精品 | 99久久99久久精品 | av在线免费在线 | 精品久久久99 | www日韩| 亚洲一区二区三区在线看 | 国产我不卡 | 国产美女精品在线 | 中文字幕在线观看网站 | 精品不卡av | 天天摸天天操天天爽 | 碰超在线 | 99欧美视频 | 欧美日韩另类在线 | 天天操天天操一操 | 超碰在线公开免费 | 免费久久99精品国产婷婷六月 | 国内精品视频一区二区三区八戒 | 日韩久久一区二区 | 黄色午夜网站 | 成人资源在线观看 | 最新日本中文字幕 | 日韩视频一区二区 | 国产精品一区久久久久 | 天天操天天色天天射 | 色偷偷88888欧美精品久久 | 久久精品精品 | 色com | 国产精品久久久久久a | 免费高清在线视频一区· | 日韩欧美在线免费 | 99视频精品全部免费 在线 | 国产成人三级三级三级97 | 五月综合在线观看 | 免费av网站在线 | 欧美视频18 | 婷婷免费视频 | 色综合久久久久综合体桃花网 | 免费成人结看片 | 一 级 黄 色 片免费看的 | 国产精品18久久久久久首页狼 | av在线免费在线 | 黄色小说网站在线 | 日韩国产精品毛片 | 99国产精品一区二区 | 伊人狠狠操 | 天天爽人人爽夜夜爽 | 久久久久久久久久久免费视频 | 国产精品18久久久久久久久久久久 | 日韩免费电影 | 日韩欧美综合精品 | 黄色在线免费观看网址 | 国内综合精品午夜久久资源 | 91精品色| 欧美一区二区三区在线播放 | 天天草综合网 | 有没有在线观看av | 日韩三级免费 | 黄色大片免费网站 | 日韩av免费观看网站 | 三级黄色免费片 | 天天综合网天天综合色 | 亚洲欧洲成人精品av97 | 国产专区一 | 999抗病毒口服液 | 色综合亚洲精品激情狠狠 | 国产 字幕 制服 中文 在线 | 四虎影视4hu4虎成人 | 国产色视频网站2 | 欧美动漫一区二区三区 | 一级片免费观看视频 | 美腿丝袜一区二区三区 | 亚洲国产成人av网 | 91综合视频在线观看 | 婷婷六月天丁香 | 亚洲色图22p | 免费中文字幕视频 | 亚洲深爱激情 | 国产在线不卡精品 | 国产色拍| 91麻豆国产福利在线观看 | 久久久久久久久影视 | 日韩欧美综合精品 | 福利网址在线观看 | 在线韩国电影免费观影完整版 | www.黄色 | 97超碰超碰| 手机av片| 欧美有色| 福利视频在线看 | www91在线观看 | 日韩网站一区二区 | 天天拍天天操 | www免费网站在线观看 | 欧美日韩a视频 | 久草在线久草在线2 | 国产在线91在线电影 | 高清av网 | 韩国av在线播放 | 人人射人人爱 | 中文字幕欧美激情 | 99久久国产免费免费 | 国产精品国产三级国产aⅴ9色 | 成人黄色小说在线观看 | 欧美久久久久久久久 | 久久刺激视频 | 国产精品久久久久久久久费观看 | 一级α片免费看 | 少妇bbbb | 中文字幕丝袜 | 婷婷久久一区 | 久久综合中文色婷婷 | 在线日韩亚洲 | 亚洲精品中文字幕视频 | 美女精品 | 久久女教师 | 日韩欧美国产精品 | 中文字幕av在线 | 久久99精品国产99久久6尤 | 国产精品麻豆视频 | 99久久99精品| 国产免费三级在线观看 | 精品主播网红福利资源观看 | 午夜视频久久久 | 久久9999久久免费精品国产 | 男女免费av| 久久久久成人精品亚洲国产 | 日韩av影视| 亚洲一区美女视频在线观看免费 | 欧美日本不卡 | 久久av一区二区三区亚洲 | 国产亚洲精品久久19p | 韩国av免费在线 | 亚州免费视频 | 亚洲精品美女久久17c | 人人澡人人添人人爽一区二区 | 色婷婷a| 99精品黄色片免费大全 | 黄色国产在线观看 | av888.com| 成人久久久精品国产乱码一区二区 | 在线 国产一区 | 成年人在线观看网站 | 亚洲综合欧美精品电影 | 天天干 夜夜操 | 天天爽夜夜操 | 欧美性色xo影院 | 97网站| 久久久久久在线观看 | 久久麻豆视频 | 中文字幕韩在线第一页 | 国产v亚洲v | 日韩一区二区三区高清在线观看 | 久久色在线播放 | 欧美日韩国产在线一区 | 91香蕉视频黄 | 激情久久综合网 | 国产精品亚洲片在线播放 | 久久资源总站 | 日韩免费看视频 | 伊人黄 | 国产一区二区在线视频观看 | 欧美最猛性xxxxx免费 | 久久久免费精品视频 | 久久成人18免费网站 | av官网| 亚洲国产精品小视频 | 97精品国产97久久久久久久久久久久 | 亚洲视频中文 | 99久久久久久国产精品 | 精品视频成人 | av大片网站| 韩日av在线| 国产精品一区二区三区在线播放 | 久久综合国产伦精品免费 | av解说在线 | 在线之家官网 | 免费特级黄毛片 | 99精品视频99 | 亚洲精品美女在线观看 | 国产专区免费 | 超碰在线人人艹 | 91最新在线视频 | 手机看片国产日韩 | 国外调教视频网站 | 91人人干 | 日日爱夜夜爱 | www.亚洲黄| 国产亲近乱来精品 | 精品毛片一区二区免费看 | 国产免费嫩草影院 | 国产激情小视频在线观看 | 国产一区二区精品久久 | 人人澡澡人人 | 色五月情| 欧美精品资源 | 在线观看中文字幕av | 婷婷草 | 亚洲高清资源 | 97超碰总站 | 91日本在线播放 | 亚洲欧美观看 | 欧美性黄网官网 | 在线视频 一区二区 | 亚洲午夜精品久久久 | 日韩欧美精品在线视频 | 天天操天天拍 | 天天操天天操 | 麻豆视传媒官网免费观看 | 久草在线国产 | 久久综合久久综合久久综合 | 99看视频在线观看 | 国产视频二区三区 | 国产日韩欧美视频在线观看 | 国产亚洲欧美日韩高清 | 亚洲一级黄色大片 | www.激情五月.com | 亚洲资源视频 | 欧美日韩一区二区在线观看 | av片一区二区 | 国产亚洲精品久久久久久无几年桃 | 久久免费视频这里只有精品 | 成+人+色综合 | 精品视频免费 | 蜜臀av夜夜澡人人爽人人桃色 | 免费男女羞羞的视频网站中文字幕 | 成人综合婷婷国产精品久久免费 | 丁香电影小说免费视频观看 | 99久久激情 | 99久久99热这里只有精品 | 欧美日韩一级视频 | 成 人 黄 色 视频免费播放 | 最新影院| 麻豆视频免费版 | av成人黄色 | 久久久影片 | 日韩在线一级 | 久久免费看毛片 | 日韩av在线影视 | 国产精品原创在线 | 91九色视频 | 97成人在线视频 | 91网免费观看 | 99久久精品免费看国产麻豆 | 久久精品欧美视频 | 成人免费视频观看 | 天天综合导航 | 在线观看视频一区二区三区 | 男女拍拍免费视频 | 久久久电影网站 | 久草精品视频 | 日韩在线观看中文 | 五月婷婷深开心 | 亚洲黄色在线播放 | 在线观看aaa | www.亚洲视频.com | 精品免费视频. | 色综合久久精品 | 国产精品 日韩 欧美 | 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 毛片网免费| 久久精品男人的天堂 | 日日干日日操 | 波多野结衣电影久久 | 中文字幕频道 | 久久精品一二区 | 免费a网 | 国产高清日韩欧美 | 韩国av免费观看 |