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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【OpenGL学习笔记⑧】——键盘控制正方体+光源【冯氏光照模型 光照原理 环境光照+漫反射光照+镜面光照】

發布時間:2023/12/29 编程问答 65 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【OpenGL学习笔记⑧】——键盘控制正方体+光源【冯氏光照模型 光照原理 环境光照+漫反射光照+镜面光照】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? 重點參考了 LearnOpenGL CN 的內容,但大部分知識內容,小編已作改寫,以方便讀者理解。


文章目錄

  • 零、 成果預覽圖
  • 一、 光照原理與投光物的配置
    • 1.1 光照原理
    • 1.2 投光物
  • 二、馮氏光照模型
  • 三、環境光照
  • 四、漫反射光照
    • 4.1 法向量
    • 4.2 光源發射的光線
    • 4.3 法向量與光線的夾角
  • 五、鏡面光照
  • 六、主函數中光源的配置
  • 七、鍵盤控制正方體
  • 八、完整代碼(主函數)
  • 九、運行結果
  • 十、參考附錄:


光照 ??

上一篇文章鏈接: 【OpenGL學習筆記⑦】——鍵盤控制鏡頭的平移【3D正方體 透視投影 觀察矩陣 對LookAt的理解】.
下一篇文章鏈接: 【OpenGL學習筆記⑨】——鼠標控制鏡頭 + 滾輪控制鏡頭縮放.
OpenGL總學習目錄: https://blog.csdn.net/Wang_Dou_Dou_/article/details/121240714.


零、 成果預覽圖

??● 說明:實現光照效果 + 依次實現正方體的 左移、右移、上移、下移、前進、后退 功能。



一、 光照原理與投光物的配置

1.1 光照原理

??● 現實世界中顏色由紅色(Red)、綠色(Green)和藍色(Blue)三個分量組成,它們通常被縮寫為 RGB。僅僅用這三個值就可以組合出任意一種顏色。

glm::vec3 color_Red(1.0f, 0.0f, 0.0f); // 紅色 glm::vec3 color_Green(0.0f, 1.0f, 0.0f); // 綠色 glm::vec3 color_Blue(0.0f, 0.0f, 1.0f); // 藍色

??● 我們在現實生活中看到某一物體的顏色并不是這個物體真正擁有的顏色,而是它所 反射的(Reflected) 顏色。換句話說,那些不能被物體所吸收(Absorb)的顏色(被拒絕的顏色)就是我們能夠感知到的物體的顏色。

??● 例如,太陽光(白光)其實是由許多不同的顏色光組合而成的(如下圖所示)。如果我們將白光照在一個藍色的玩具上,這個藍色的玩具會吸收白光中除了藍色以外的所有子顏色,不被吸收的藍色光就被反射到我們的眼中,讓這個玩具看起來是藍色的。下圖顯示的是一個珊瑚紅的玩具,它以不同強度反射了多個顏色:【主要反射了紅色】

??● 這些顏色反射的定律被直接地運用在圖形領域。當我們在 OpenGL 中創建一個光源時,我們希望給光源一個顏色。樣例如下:

"樣例一" glm::vec3 light_Color(1.0f, 1.0f, 1.0f); // 白光源 glm::vec3 object_Color(1.0f, 0.5f, 0.31f); // 珊瑚紅色 glm::vec3 result = lightColor * object_Color; // 結果仍然為珊瑚紅色 = (1.0f, 0.5f, 0.31f);"樣例二" glm::vec3 light_Color(0.0f, 1.0f, 0.0f); // 綠光源 glm::vec3 object_Color(1.0f, 0.5f, 0.31f); // 珊瑚紅色 glm::vec3 result = lightColor * toyColor; // 結果變為半綠色 = (0.0f, 0.5f, 0.0f);

??◆ 說明:當我們把光源的顏色與物體的顏色值相乘,所得到的就是這個物體所反射的顏色。


1.2 投光物

??● 在 OpenGL 中,我們想要將光源顯示為可見的物體(就像限時中到太陽一樣)。在這里我們依然沿用前面的 “3D正方體” 來承載光源,成為 “投光物”。

??● 為了讓 投光物 和 被照正方體 相互獨立,我們需要給投光物單獨開一個頂點著色器和一個片元著色器。

??● 投光物的頂點著色器 light_v.txt:【和原先 3D 立方體的頂點著色器一樣】

#version 330 core layout (location = 0) in vec3 position; uniform mat4 transform_2; uniform mat4 projection_2; uniform mat4 view_2; void main() {gl_Position = projection_2 * view_2 * transform_2 * vec4(position, 1.0f); }

??● 投光物的片元著色器 light_f.txt:【白光源】

#version 330 core out vec4 FragColor; void main() {FragColor = vec4(1.0f, 1.0f, 1.0f, 1.0f); // 白色光 }

??● 我們希望 投光物攝像機 一樣,成為一個封裝類,方便我們創建和調用,故其我 創建了 Point_Light.h 如下:

#include "Shader.h" #include <glew.h> // 根據自身情況進行設置 #include "glm/glm.hpp" #include "glm/gtc/matrix_transform.hpp"GLfloat vertices_2[] = { // 坐標... // 為了節省篇幅, 此處省略. (同上一篇文章的立方體坐標) };class Point_Light { public:Point_Light() // 構造函數{this->update();}void Draw(Shader &shader) // 繪制函數{glBindVertexArray(light_VAO);glDrawArrays(GL_TRIANGLES, 0, 36);glBindVertexArray(0);}~Point_Light() // 析構函數{glBindBuffer(GL_ARRAY_BUFFER, 0); glBindVertexArray(0); glDeleteVertexArrays(1, &light_VAO);glDeleteBuffers(1, &light_VBO);}private:GLuint light_VAO, light_VBO;void update(){/* 設置頂點緩沖對象(VBO) + 設置頂點數組對象(VAO) */glGenVertexArrays(1, &light_VAO);glGenBuffers(1, &light_VBO);glBindVertexArray(light_VAO);glBindBuffer(GL_ARRAY_BUFFER, light_VBO);glBufferData(GL_ARRAY_BUFFER, sizeof(vertices_2), vertices_2, GL_STATIC_DRAW);/* 設置鏈接頂點屬性 */glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), (GLvoid*)0);glEnableVertexAttribArray(0); } };

二、馮氏光照模型

??● 就像現實生活中的一樣,不同光源的光照效果是及其不同的,比如:太陽與日光燈、手電筒與激光。不同光源有不同的光照模型,在這里,我們使用 OpenGL 中較為簡單的光照模型:馮氏光照模型

??● 馮氏光照模型的主要結構由 3 個分量組成而成:環境(Ambient)光照漫反射(Diffuse)光照鏡面(Specular)光照。下面這張圖展示了這些光照分量看起來的樣子:


??◆ 說明
??① 環境光照(Ambient Lighting):即使在黑暗的情況下,世界上通常也仍然有一些光亮(月亮、遠處的光),所以物體幾乎永遠不會是完全黑暗的。為了模擬這個,我們會使用一個環境光照常量,它永遠會給物體一些顏色。
??② 漫反射光照(Diffuse Lighting):模擬光源對物體的方向性影響(Directional Impact)【后面將會重點講解這個】。它是馮氏光照模型中視覺上最顯著的分量。物體的某一部分越是正對著光源,它就會越亮。
??③ 鏡面反射光照(Specular Lighting):模擬有光澤物體上面出現的亮點。鏡面光照的顏色相比于物體的本身顏色會更傾向于光的顏色。
??④ 第四個圖形就是把前三者結合在一起,得到的光照效果。



三、環境光照

??● 有一種環境光照,用的是全局照明的算法,但太復雜了。這里呢,我們簡單一點,使用一個很小的常量(光照)顏色,添加到物體片段著色器中,這樣子的話即便場景中沒有直接的光源也能看見一極其淡淡的光。

??● 被照物體的片元著色器 shader_f.txt【理解版】:

#version 330 core ... "為突出重點內容, 已省去部分內容" in vec3 ourColor; // 傳進來的顏色 out vec4 FragColor; // 傳出去的片元顏色 ... void main() {...float ambientStrength = 0.1; // 常量(光照)顏色因子vec3 ambient = ambientStrength * ourColor; // 環境光照...FragColor = vec4(ambient + 漫反射光照 + 鏡面反射光照, 1.0f) * ourColor; // 三種光照的組合 }

四、漫反射光照

??● 漫反射光照能讓物體產生顯著的視覺影響(就像那種,這邊亮一點,那邊暗一點的效果)。漫反射光照使物體上與光線方向越接近的片段能從光源處獲得更多的亮度。為了能夠更好的理解漫反射光照,請看下圖:

??◆ 說明
????① 圖左上方有一個光源,它所發出的光線落在物體的一個片段上。我們需要測量這個光線是以什么角度接觸到這個片段的(如圖中的 θθθφφφ)。如果光線垂直于物體表面,這束光對物體的影響會最大化(即最亮)。
????② 為了測量光線和片段的角度,我們使用一個叫做 法向量(Normal Vector) 的東西,它是垂直于片段表面的一個向量(即圖中的 N ̄\overline{N}N ),我們在后面再講這個東西。這兩個向量之間的角度很容易就能夠通過點乘計算出來。
????③ 兩個單位向量的夾角越小,它們點乘的結果越傾向于1。當兩個向量的夾角為 90 度的時候,點乘會變為 0。這同樣適用于 θ,θ 越大,光對片段顏色的影響就應該越小。

??● 特別注意:為了(只)得到兩個向量夾角的余弦值,我們使用的是單位向量(長度為 1 的向量),所以我們需要確保所有的向量都是標準化的,否則點乘返回的就不僅僅是余弦值了。

??● 計算漫反射光照需要
??① 法向量(Normal Vector):一個垂直于頂點表面的向量。
??② 光源發射的光線:即圖中黑色的那條線。為了計算這個光線,我們需要光的位置(向量)和片段的位置(向量)。
??③ 法向量與光線的夾角:即圖中的 θθθφφφ


4.1 法向量

??● 法向量是一個垂直于頂點表面的(單位)向量。由于頂點本身并沒有表面(它只是空間中一個獨立的點),我們利用它周圍的頂點來計算出這個頂點的表面。由于 3D 立方體不是一個復雜的形狀,所以我們可以簡單地把法線數據手工添加到頂點數據中。

??● 這些法向量垂直于立方體各個平面的表面的(一個立方體由 6 個平面組成)。

??● 3D正方體(不是投光物)的頂點屬性數組改寫如下:【注:和官方的不一樣,因為我采用的是自己建立的一套世界坐標體系,詳見【OpenGL學習筆記⑦】——鍵盤控制鏡頭的平移【3D正方體 透視投影 觀察矩陣 對LookAt的理解】】

/* 編寫各頂點位置 */ float vertices_1[] = {// x、y、z 坐標 // color // normal-0.5f, -0.5f, -0.5f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, // red 紅色面0.5f, -0.5f, -0.5f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f,0.5f, 0.5f, -0.5f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f,0.5f, 0.5f, -0.5f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f,-0.5f, 0.5f, -0.5f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f,-0.5f, -0.5f, -0.5f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, -1.0f,-0.5f, -0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, // green 綠色面0.5f, -0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f,0.5f, 0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f,0.5f, 0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f,-0.5f, 0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f,-0.5f, -0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f,-0.5f, 0.5f, 0.5f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, // blue 藍色面(不是圖中那種藍)-0.5f, 0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f,-0.5f, -0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f,-0.5f, -0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f,-0.5f, -0.5f, 0.5f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f,-0.5f, 0.5f, 0.5f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f,0.5f, 0.5f, 0.5f, 1.0f, 1.0f, 0.0f, -1.0f, 0.0f, 0.0f, // yellow 黃色面0.5f, 0.5f, -0.5f, 1.0f, 1.0f, 0.0f, -1.0f, 0.0f, 0.0f,0.5f, -0.5f, -0.5f, 1.0f, 1.0f, 0.0f, -1.0f, 0.0f, 0.0f,0.5f, -0.5f, -0.5f, 1.0f, 1.0f, 0.0f, -1.0f, 0.0f, 0.0f,0.5f, -0.5f, 0.5f, 1.0f, 1.0f, 0.0f, -1.0f, 0.0f, 0.0f,0.5f, 0.5f, 0.5f, 1.0f, 1.0f, 0.0f, -1.0f, 0.0f, 0.0f,-0.5f, -0.5f, -0.5f, 1.0f, 0.0f, 1.0f, 0.0f, -1.0f, 0.0f, // purple 紫色面0.5f, -0.5f, -0.5f, 1.0f, 0.0f, 1.0f, 0.0f, -1.0f, 0.0f,0.5f, -0.5f, 0.5f, 1.0f, 0.0f, 1.0f, 0.0f, -1.0f, 0.0f,0.5f, -0.5f, 0.5f, 1.0f, 0.0f, 1.0f, 0.0f, -1.0f, 0.0f,-0.5f, -0.5f, 0.5f, 1.0f, 0.0f, 1.0f, 0.0f, -1.0f, 0.0f,-0.5f, -0.5f, -0.5f, 1.0f, 0.0f, 1.0f, 0.0f, -1.0f, 0.0f,-0.5f, 0.5f, -0.5f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, // cyan 青藍色面0.5f, 0.5f, -0.5f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f,0.5f, 0.5f, 0.5f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f,0.5f, 0.5f, 0.5f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f,-0.5f, 0.5f, 0.5f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f,-0.5f, 0.5f, -0.5f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f };

??● 被照物體的頂點著色器 shader_v.txt【理解版】:

#version 330 core ... "為突出重點內容, 已省去部分內容" layout(location = 2) in vec3 normal; // 新加的法向量通道 ... ... out vec3 FragNormal; // 法向量輸出通道, 將傳給片元著色器 ...void main() {...FragNormal = normal; ... }

??● 在后面我們將知道片段著色器里的計算都是在世界空間坐標中進行的。所以,在這里我們應該把法向量也轉換為世界空間坐標。我們可以將其乘以一個 轉換矩陣(Transform Matrix) 來搞定。

??● 但是,每當我們將 法向量 進行一個不等比縮放時,法向量就不會再垂直于對應的表面了,這樣光照就會被破壞。(注意:等比縮放不會破壞法線,因為法線的方向沒被改變,僅僅改變了法線的長度,而這很容易通過標準化來修復)。

??● 修復這個行為的方法是使用一個為法向量專門定制的矩陣。這個矩陣稱之為 法線矩陣(Normal Matrix),它使用了一些線性代數的操作來移除對法向量錯誤縮放的影響。【后面需要時再學習這個】


4.2 光源發射的光線

??● 經過 4.1 后,每個頂點都有了法向量。現在我們需要光源的位置和片段的位置,由它們倆來計算 “光源發射的光線”。

"該代碼在被著色物體的片段著色器 shader_f.txt 中" ... uniform vec3 LightPos; // 光源位置 ... void main() {... "為突出重點內容, 已省去部分內容"vec3 SendLight= normalize(LightPos - FragPos);... }

??◆ 代碼說明:當計算光照時,我們通常不關心一個向量的模長或它的位置,我們只關心它們的方向。所以,幾乎所有的計算都使用單位向量完成,因為這簡化了大部分的計算(比如點乘)。所以當進行光照計算時,確保你總是對相關向量進行標準化normalize()。

??● 最后,我們還需要片元的位置,因為是片元發生的 “明暗變化” 。我們可以通過把頂點位置屬性乘以轉換矩陣來把它變換到世界空間坐標。這個在頂點著色器中完成,如下代碼所示。

??● 被照物體的頂點著色器 shader_v.txt 【理解版】:

#version 330 core ... "為突出重點內容, 已省去部分內容" layout (location = 0) in vec3 position; // 將片元的坐標位置傳入 ...... out vec3 FragPos; // 將計算后的片元坐標傳給片段著色器 ..void main() {...FragPos = vec3(轉換矩陣 * vec4(position, 1.0f));... }


4.3 法向量與光線的夾角

??● 我們對 法向量 和 發射光線 向量進行點乘,即可計算光源對當前片段實際的漫發射影響。結果值再乘以光的顏色,得到漫反射分量。兩個向量之間的角度越大,漫反射分量就會越小。

"該代碼也在被著色物體的片段著色器 shader_f.txt 中" ... in vec3 FragNormal; ...void main() {... "為突出重點內容, 已省去部分內容" float diff = 0.6 * max(dot(FragNormal, SendLight), 0.0); // 乘以 0.6 是為了不讓漫反射太亮 vec3 diffuse = diff * 光源顏色;......vec3 result = (環境光照 + diffuse + 鏡面反射光照) * 被照物體的顏色;FragColor = vec4(result, 1.0);... }

??◆ 代碼說明:如果兩個向量之間的角度大于 90 度,點乘的結果就會變成負數,這樣會導致漫反射分量變為負數。為此,我們使用max()函數返回兩個參數之間較大的參數,從而保證漫反射分量不會變成負數。(負數顏色的光照是沒有定義的,所以最好避免它)



五、鏡面光照

??● 鏡面光照是基于光的反射特性。如果我們想象物體表面像一面鏡子一樣。和漫反射光照一樣,鏡面光照也是依據 光的方向向量物體的法向量 來決定的,同時它也依賴于(攝像機的)觀察方向。

??● 我們首先計算 反射向量(即圖中深橙黃色的光線)。然后我們計算反射向量和視線方向的 角度差 γγγ ,如果夾角越小,那么鏡面光的影響就會越大。

??● 和漫反射一樣,我們也需要計算出 光源反射的光線(圖中的虛黑線)。此時我們就需要 片元位置(反射點)和攝像機位置 ,兩個相減就能得到:

"這段代碼在被照物體的片元著色器 shader_f.txt 中:" ... uniform vec3 CameraPos; ... void main() {... "為突出重點內容, 已省去部分內容" vec3 CameraDir = normalize(CameraPos - FragPos); // 片元指向攝像機的方向(圖中的虛黑線)vec3 ReflectLight = reflect(-SendLight, FragNormal); // 反射光線...float specularStrength = 0.8;vec3 specular = specularStrength * pow(max(dot(CameraDir, ReflectLight), 0.0), 32) * 光源顏色; // 計算圖中的藍虛線...vec3 result = (環境光照 + 漫反射光照 + specular) * 被照物體顏色;FragColor = vec4(result, 1.0);... }

??◆ 代碼說明
????① reflect()函數要求第一個向量是從光源指向片元位置的向量,但是我們這里的 SendLight 當前正好相反,是從片元指向光源(由先前我們計算 SendLight 向量時,減法的順序決定)。為了保證我們得到正確的 ReflectLight 向量,我們通過對 SendLight 向量取反來獲得相反的方向。第二個參數要求是一個以標準化后的法向量。
????② specularStrength:鏡面強度變量,給鏡面高光一個中等亮度顏色,讓它不要產生過度的影響。
????③ 計算鏡面分量(即計算圖中的藍虛線):我們先計算視線方向與反射方向的點乘(并確保它不是負值),然后取它的 32 次冪。這個 32 是鏡面反射光的反光度(Shininess)。一個物體的反光度越高,反射光的能力越強,散射得越少,高光點就會越小。在下面的圖片里,你會看到不同反光度的視覺效果影響:



六、主函數中光源的配置

??● 主函數的代碼和 第⑦篇 文章類似。我們只是新增了一個 “投光物”,然后原來的 “被照物體” 的頂點/片元著色器的通道上進行了相應的配置。

/* 引入相應的庫 */ ... "為了突出重點內容, 已省去部分內容" #include"Shader.h" #include"Camera.h" #include "Point_Light.h" .../* 編寫各頂點位置 */ float vertices_1[] = {... };... glm::vec3 lightPos = glm::vec3(0.0f, 0.0f, 1.0f); // 光源位置初始化 ...int main() {.../* 初始化 glew */glewInit();Point_Light My_light = Point_Light(); // 新建一個光源(必須在 glew 初始化后才行)....../* 將我們自己設置的著色器文本傳進來 */Shader ourShader = Shader("shader_v.txt", "shader_f.txt"); // 相對路徑Shader lightShader = Shader("light_v.txt", "light_f.txt"); // 相對路徑.../* draw loop 畫圖循環 */while (!glfwWindowShouldClose(window_1)){...Square_Movement(..., ..., ...); // 正方體移動.../* 繪制光照 */...lightShader.Use();glm::mat4 transform_1 = glm::mat4(1.0f);lightPos = glm::rotate(lightPos, glm::radians(0.1f)/2, glm::vec3(0.0f, 1.0f, 0.0f));transform_1 = glm::translate(transform_1, lightPos);transform_1 = glm::scale(transform_1, glm::vec3(0.1f, 0.1f, 0.1f));glm::mat4 projection_1 = glm::perspective(glm::radians(45.0f), (float)screenWidth_1/(float)screenHeight_1, 0.1f, 100.0f);glm::mat4 view_1 = camera.GetViewMatrix(); // 求得觀察矩陣int transform_1_Location = glGetUniformLocation(lightShader.Program, "transform_2");glUniformMatrix4fv(transform_1_Location, 1, GL_FALSE, glm::value_ptr(transform_1));int projection_1_Location = glGetUniformLocation(lightShader.Program, "projection_2");glUniformMatrix4fv(projection_1_Location, 1, GL_FALSE, glm::value_ptr(projection_1));int view_1_Location = glGetUniformLocation(lightShader.Program, "view_2");glUniformMatrix4fv(view_1_Location, 1, GL_FALSE, glm::value_ptr(view_1));My_light.Draw(lightShader);transform_1 = glm::mat4(1.0f); // 這里需要重新初始化.../* 繪制正方體 */ourShader.Use(); // 調用著色器程序...}...return 0; } ...

七、鍵盤控制正方體

??● 這和上一篇文章第⑦篇——鍵盤控制移動攝像機的原理差不多。我們只需要在上面的主函數中加如下按鍵響應代碼即可:

"這段代碼在主函數中:" ... "為突出重點內容, 已省去部分內容" void Square_Movement(GLfloat&, GLfloat&, GLfloat&); // 正方體移動 ... int main() {...GLfloat up_down_move = 0.0f; // 上下移動的變量GLfloat left_right_move = 0.0f; // 左右移動的變量GLfloat front_back_move = 0.0f; // 前后移動的變量...Square_Movement(up_down_move, left_right_move, front_back_move); // 正方體移動.../* draw loop 畫圖循環 */while (!glfwWindowShouldClose(window_1)){...transform_1 = glm::translate(transform_1, glm::vec3(left_right_move, up_down_move, front_back_move)); // 轉換矩陣...}...return 0; }... void Square_Movement(GLfloat& shang_and_xia_move, GLfloat& left_and_right_move, GLfloat &up_and_down_move) // 正方體移動 {if (keys[GLFW_KEY_UP]) // 向上{shang_and_xia_move += 0.0005f;}if (keys[GLFW_KEY_DOWN]) // 向下{shang_and_xia_move -= 0.0005f;}if (keys[GLFW_KEY_LEFT]) // 向左{left_and_right_move += 0.0005f;}if (keys[GLFW_KEY_RIGHT]) // 向右{left_and_right_move -= 0.0005f;}if (keys[GLFW_KEY_F]) // 向前(按 F 鍵){up_and_down_move += 0.0005f;}if (keys[GLFW_KEY_B]) // 向后(按 B 鍵){up_and_down_move -= 0.0005f;} }

八、完整代碼(主函數)

??● 頭文件 Shader.h 依舊沿用第③篇中的代碼【OpenGL學習筆記③】——?著色器【GLSL Uniform 彩色三角形 變色正方形】?

??● 頭文件 Camera.h 依舊沿用第⑦篇中的代碼【OpenGL學習筆記⑦】——鍵盤控制鏡頭的平移【3D正方體 透視投影 觀察矩陣】

??● shader_v.txt的完整代碼如下:

#version 330 core layout (location = 0) in vec3 position; layout(location = 1) in vec3 color; layout(location = 2) in vec3 normal;out vec3 ourColor; out vec3 FragNormal; out vec3 FragPos;uniform mat4 transform_1; uniform mat4 projection_1; uniform mat4 view_1;void main() {ourColor = color;gl_Position = projection_1 * view_1 * transform_1 * vec4(position, 1.0f);FragPos = vec3(transform_1 * vec4(position, 1.0f));FragNormal = normal; }

??● shader_f.txt的完整代碼如下:

#version 330 core in vec3 ourColor; in vec3 FragNormal; in vec3 FragPos;out vec4 FragColor;uniform vec3 LightPos; uniform vec3 CameraPos;void main() {vec3 std_norm = normalize(FragNormal);// 環境光照float ambientStrength = 0.1; // 常量(光照)顏色因子vec3 ambient = ambientStrength * ourColor; // 環境光照// 漫反射光照vec3 SendLight = normalize(LightPos - FragPos);float diff = 0.6 * max(dot(FragNormal, SendLight), 0.0f);vec3 diffuse = diff * ourColor;// 鏡面反射光照vec3 ReflectLight = reflect(-SendLight, FragNormal);float specularStrength = 0.8;vec3 CameraDir = normalize(CameraPos - FragPos);vec3 specular = specularStrength * pow(max(dot(CameraDir, ReflectLight), 0.0), 32) * ourColor; FragColor = vec4(ambient + diffuse + specular, 1.0f); }

??● 投光物的頂點著色器 light_v.txt 和投光物的片元著色器 light_f.txt 在本文開頭已經寫了,關于投光物 的封裝類 Point_Light.h 也在文章前面配置好了,其所有環境配置如下圖所示:


??● 最后主函數代碼如下

/* 引入相應的庫 */ #include <iostream> using namespace std; #define GLEW_STATIC #include"Shader.h" #include"Camera.h" #include "Point_Light.h" #include<glew.h> // 注:這一部分要根據個人情況進行設定 #include<glfw3.h> #include"glm\glm.hpp" #include"glm\gtc\matrix_transform.hpp" #include"glm\gtc\type_ptr.hpp" #include"glm/gtx/rotate_vector.hpp"/* 編寫各頂點位置 */ float vertices_1[] = {... "前文已寫" // 前文已寫 };const GLint WIDTH = 600, HEIGHT = 600;bool keys[1024]; // 專門存儲按過的鍵 Camera camera(glm::vec3(1.0f, 1.0f, -5.0f), glm::vec3(-1.0f, -1.0f, 5.0f), glm::vec3(0.0f, 1.0f, 0.0f)); void KeyCallback(GLFWwindow* window, int key, int scancode, int action, int mode); void Key_Movement(); void square_Movement(GLfloat&, GLfloat&, GLfloat&); GLfloat deltaTime = 0.0f; GLfloat lastTime = 0.0f;glm::vec3 lightPos = glm::vec3(0.0f, 0.0f, 1.0f); const double Shift_pix = 0.0005; // 正方體移動速度 int main() {/* 初始化 glfw */glfwInit();glfwWindowHint(GLFW_RESIZABLE, GL_FALSE); // 縮放關閉/* 窗口捕獲與處理 */GLFWwindow* window_1 = glfwCreateWindow(WIDTH, HEIGHT, "Learn OpenGL Light Test", nullptr, nullptr);int screenWidth_1, screenHeight_1;glfwGetFramebufferSize(window_1, &screenWidth_1, &screenHeight_1);glfwMakeContextCurrent(window_1);glfwSetKeyCallback(window_1, KeyCallback);/* 初始化 glew + 光照生成 */glewInit();Point_Light my_light = Point_Light();/* 深度測試開啟 */glEnable(GL_DEPTH_TEST);/* 將我們自己設置的著色器文本傳進來 */Shader ourShader = Shader("shader_v.txt", "shader_f.txt"); // 相對路徑Shader lightShader = Shader("light_v.txt", "light_f.txt"); // 相對路徑/* 設置頂點緩沖對象(VBO) + 設置頂點數組對象(VAO) */GLuint VAO, VBO;glGenVertexArrays(1, &VAO);glGenBuffers(1, &VBO);glBindVertexArray(VAO);glBindBuffer(GL_ARRAY_BUFFER, VBO);glBufferData(GL_ARRAY_BUFFER, sizeof(vertices_1), vertices_1, GL_STATIC_DRAW);/* 設置鏈接頂點屬性 */glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 9 * sizeof(GLfloat), (GLvoid*)0);glEnableVertexAttribArray(0); // 通道 0 打開glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 9 * sizeof(GLfloat), (GLvoid*)(3 * sizeof(GLfloat)));glEnableVertexAttribArray(1); // 通道 1 打開glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, 9 * sizeof(GLfloat), (GLvoid*)(6 * sizeof(GLfloat)));glEnableVertexAttribArray(2); // 通道 2 打開GLfloat up_down_move = 0.0f; // 上下移動的變量GLfloat left_right_move = 0.0f; // 左右移動的變量GLfloat front_back_move = 0.0f; // 前后移動的變量/* draw loop 畫圖循環 */while (!glfwWindowShouldClose(window_1)){/* 時間獲取 */GLfloat currentTime = glfwGetTime();deltaTime = currentTime - lastTime;lastTime = (float)currentTime;/* 視口 + 鍵鼠捕獲 */glViewport(0, 0, screenWidth_1, screenHeight_1);glfwPollEvents(); // 獲取鍵盤鼠標Key_Movement(); // 獲取鍵盤square_Movement(up_down_move, left_right_move, front_back_move ); // 正方體移動/* 渲染 + 清除顏色緩沖 */glClearColor(0.0f, 0.0f, 0.0f, 1.0f);glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);/* 光照繪制 */lightShader.Use();glm::mat4 my_transform = glm::mat4(1.0f);lightPos = glm::rotate(lightPos, glm::radians(0.1f), glm::vec3(0.0f, 1.0f, 0.0f)); // 旋轉my_transform = glm::translate(my_transform, lightPos); // 平移my_transform = glm::scale(my_transform, glm::vec3(0.1f, 0.1f, 0.1f)); // 縮放glm::mat4 my_projection = glm::perspective(glm::radians(45.0f), (float)screenWidth_1 / (float)screenHeight_1, 0.1f, 100.0f); glm::mat4 my_view = camera.GetViewMatrix(); // 求得觀察矩陣int my_transform_Location = glGetUniformLocation(lightShader.Program, "transform_2");glUniformMatrix4fv(my_transform_Location, 1, GL_FALSE, glm::value_ptr(my_transform));int my_projection_Location = glGetUniformLocation(lightShader.Program, "projection_2");glUniformMatrix4fv(my_projection_Location, 1, GL_FALSE, glm::value_ptr(my_projection));int my_view_Location = glGetUniformLocation(lightShader.Program, "view_2");glUniformMatrix4fv(my_view_Location, 1, GL_FALSE, glm::value_ptr(my_view));my_light.Draw(lightShader);/* 正方體繪制 */my_transform = glm::mat4(1.0f); // 初始化是必要的ourShader.Use(); // 調用著色器程序glBindVertexArray(VAO); // 綁定 VAOmy_transform = glm::translate(my_transform, glm::vec3(left_right_move, up_down_move, front_back_move ));my_transform = glm::scale(my_transform, glm::vec3(0.5, 0.5, 0.5));my_projection = glm::perspective(glm::radians(45.0f), (float)screenWidth_1 / (float)screenHeight_1, 0.1f, 100.0f);my_view = camera.GetViewMatrix();my_transform_Location = glGetUniformLocation(ourShader.Program, "transform_1");glUniformMatrix4fv(my_transform_Location, 1, GL_FALSE, glm::value_ptr(my_transform));my_projection_Location = glGetUniformLocation(ourShader.Program, "projection_1");glUniformMatrix4fv(my_projection_Location, 1, GL_FALSE, glm::value_ptr(my_projection));my_view_Location = glGetUniformLocation(ourShader.Program, "view_1");glUniformMatrix4fv(my_view_Location, 1, GL_FALSE, glm::value_ptr(my_view));int LightPos_Location = glGetUniformLocation(ourShader.Program, "LightPos");glUniform3f(LightPos_Location, lightPos.x, lightPos.y, lightPos.z);int CameraPos_Location = glGetUniformLocation(ourShader.Program, "CameraPos");glUniform3f(CameraPos_Location, camera.GetPosition().x, camera.GetPosition().y, camera.GetPosition().z);glDrawArrays(GL_TRIANGLES, 0, 36); // 繪制 36 個點(正方體)glBindVertexArray(0); // 解綁定 VAOglfwSwapBuffers(window_1);}glDeleteVertexArrays(1, &VAO);glDeleteBuffers(1, &VBO);glfwTerminate();return 0; }void KeyCallback(GLFWwindow* window, int key, int scancode, int action, int mode) // 按鍵捕獲(固定函數格式) {if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS){glfwSetWindowShouldClose(window, GL_TRUE);}if (key >= 0 && key <= 1024){if (action == GLFW_PRESS)keys[key] = true;else if (action == GLFW_RELEASE)keys[key] = false;} }void Key_Movement() // Camera {if (keys[GLFW_KEY_Q]) // 向前camera.ProcessKeyboard(FORWARD, deltaTime);if (keys[GLFW_KEY_E]) // 向后camera.ProcessKeyboard(BACKWARD, deltaTime);if (keys[GLFW_KEY_A]) // 向左camera.ProcessKeyboard(LEFT, deltaTime);if (keys[GLFW_KEY_D]) // 向右camera.ProcessKeyboard(RIGHT, deltaTime);if (keys[GLFW_KEY_W]) // 向上camera.ProcessKeyboard(UPWARD, deltaTime);if (keys[GLFW_KEY_S]) // 向下camera.ProcessKeyboard(DOWNWARD, deltaTime); }void square_Movement(GLfloat& up_down_move, GLfloat& left_right_move, GLfloat& front_back_move) // Square {if (keys[GLFW_KEY_UP]) // 向上{up_down_move += Shift_pix;}if (keys[GLFW_KEY_DOWN]) // 向下{up_down_move -= Shift_pix;}if (keys[GLFW_KEY_LEFT]) // 向左{left_right_move += Shift_pix;}if (keys[GLFW_KEY_RIGHT]) // 向右{left_right_move -= Shift_pix;}if (keys[GLFW_KEY_F]) // 向前(按 F 鍵){front_back_move += Shift_pix;}if (keys[GLFW_KEY_B]) // 向后(按 B 鍵){front_back_move -= Shift_pix;} }

九、運行結果

??● 如果你認真按照上訴內容一步一步地進行配置,即可得到如下結果:



十、參考附錄:

[1] 《Learn OpenGL——顏色》
鏈接: https://learnopengl-cn.github.io/02%20Lighting/01%20Colors/.

[2] 《Learn OpenGL——基礎光照》
鏈接: https://learnopengl-cn.github.io/02%20Lighting/02%20Basic%20Lighting/#_1.

上一篇文章鏈接: 【OpenGL學習筆記⑦】——鍵盤控制鏡頭的平移【3D正方體 透視投影 觀察矩陣 對LookAt的理解】.

下一篇文章鏈接: 【OpenGL學習筆記⑨】——鼠標控制鏡頭 + 滾輪控制鏡頭縮放.

OpenGL總學習目錄: https://blog.csdn.net/Wang_Dou_Dou_/article/details/121240714.


?? ??

總結

以上是生活随笔為你收集整理的【OpenGL学习笔记⑧】——键盘控制正方体+光源【冯氏光照模型 光照原理 环境光照+漫反射光照+镜面光照】的全部內容,希望文章能夠幫你解決所遇到的問題。

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

99热只有精品在线观看 | 精品国产乱码久久久久久1区二区 | 国产少妇在线观看 | 亚洲一区天堂 | 日本公妇在线观看 | 99精品偷拍视频一区二区三区 | 人人超碰97 | 曰韩精品 | 久久精品免视看 | 丁香 久久 综合 | 五月开心激情网 | 中文区中文字幕免费看 | 99精品视频免费全部在线 | 国产一级视频免费看 | 狠狠色丁香婷婷综合最新地址 | 久久99精品久久久久久三级 | 亚洲精品毛片一级91精品 | www99久久| 亚洲精品国偷自产在线99热 | 免费视频国产 | 91精品婷婷国产综合久久蝌蚪 | 在线激情小视频 | 在线观看一二三区 | 西西4444www大胆无视频 | 国产成人免费网站 | 一区二区亚洲精品 | 91麻豆免费看 | 黄色h在线观看 | 欧美激情视频在线观看免费 | 欧美日韩在线视频免费 | 玖玖视频免费在线 | 日韩在线观看高清 | av无限看| 国产人成精品一区二区三 | 国产午夜不卡 | 色中色综合| 在线观看av小说 | 日韩中文在线电影 | 午夜久久成人 | 亚洲免费观看视频 | 中文字幕一区二区三区乱码在线 | 久久久久国产精品www | 亚洲码国产日韩欧美高潮在线播放 | 99在线精品免费视频九九视 | 四虎国产精品成人免费影视 | www.夜夜骑.com | 国产黄色片一级 | 国产成人一区二区三区免费看 | 欧美ⅹxxxxxx | 精品伦理一区二区三区 | 久久久精品影视 | 欧美日韩首页 | 五月天丁香视频 | 欧美另类高清 videos | 正在播放国产一区 | 91在线免费看片 | 黄色影院在线免费观看 | 天天躁天天操 | 黄色片网站 | 天天色天天操天天爽 | 九九色在线观看 | 国产精品专区在线观看 | 国语黄色片 | 欧美a在线免费观看 | 亚洲激情校园春色 | 婷婷六月网| 午夜免费福利片 | 国产精品2018 | 91完整版观看 | 欧美亚洲国产精品久久高清浪潮 | www黄在线| 天天爱天天色 | 国产日产精品久久久久快鸭 | 91香蕉视频好色先生 | 久草免费资源 | 日本久久综合网 | 免费视频97 | 欧美一级片在线观看视频 | 黄色综合 | 国产不卡精品视频 | 2021国产在线 | 久久精品站 | 国产精品久久久久av免费 | 一区二区视频网站 | 91九色自拍 | 精品中文字幕在线观看 | 日韩精品免费在线播放 | 深爱五月激情五月 | 久草免费在线视频 | 欧美色久| 久久精品牌麻豆国产大山 | 97精品超碰一区二区三区 | 亚洲精品视频网 | 五月天丁香综合 | 中文字幕欲求不满 | 亚洲经典视频在线观看 | www免费黄色 | 日日天天狠狠 | 99久久精品免费一区 | 国产亚洲综合性久久久影院 | 国产首页| 丁香综合| 久久深爱网 | 蜜臀久久99精品久久久酒店新书 | 亚洲黄色在线 | 在线视频免费观看 | 不卡的av在线 | 日韩av影视在线观看 | 国产精品18久久久久久久 | 国产韩国日本高清视频 | 久久另类小说 | 福利一区二区在线 | 国产麻豆视频在线观看 | 在线观影网站 | 精品久久久久久国产偷窥 | 中文字幕在线免费看线人 | 日韩精品一区二 | 伊色综合久久之综合久久 | 国产一区二区成人 | 黄色性av | 国产字幕在线播放 | 久久久久久久久久久久久久av | 国产精品久久久久久久久久久久冷 | 四虎在线观看网址 | 久久久久久久久爱 | 98超碰在线 | 在线免费观看视频a | 91在线看黄| 久久黄色小说 | 国产特级毛片aaaaaa高清 | 亚洲一二视频 | 国产精品久久久久四虎 | 久久国产精品免费一区二区三区 | 激情综合一区 | 中文字幕丰满人伦在线 | 天天爱天天射天天干天天 | 天天天天爱天天躁 | 国产一区二区在线免费视频 | 国产亚洲在线 | 天天操 夜夜操 | 久久伦理 | 中文字幕在线有码 | 国产高清日韩欧美 | 国产成视频在线观看 | 精品视频9999 | 少妇bbbb搡bbbb桶 | 久久综合天天 | aaa日本高清在线播放免费观看 | 亚洲精品久久久久久久不卡四虎 | 日韩精品一区二区三区丰满 | 毛片1000部免费看 | 国产精品mm | 亚洲高清av在线 | 欧美日韩国产精品一区 | 五月天国产精品 | 国产粉嫩在线观看 | 欧美老女人xx| 国产美女搞久久 | 国产精品国内免费一区二区三区 | 亚洲国产精品久久 | 天天操狠狠干 | 在线黄色观看 | 五月开心婷婷网 | 日日夜夜操操操操 | 超碰97人人爱 | 亚洲视频一级 | 中文字幕黄色网址 | 伊人视频 | 国产成人久久 | 亚洲国产成人高清精品 | 69国产精品视频免费观看 | 亚洲黄网站 | 91黄色在线视频 | 日本久久久精品视频 | 国产成人无码AⅤ片在线观 日韩av不卡在线 | 在线观看 亚洲 | 亚洲精品在线免费观看视频 | 亚洲伊人色 | 亚洲精品小视频在线观看 | 中文字幕电影高清在线观看 | 日韩毛片在线一区二区毛片 | av 在线观看| 亚洲精品h | 丁香久久综合 | 日日躁夜夜躁xxxxaaaa | 欧美乱码精品一区二区 | 成人免费视频网 | 狠狠色丁香| 精品国产一区二区三区在线观看 | 亚洲国产精选 | 天天操操 | 国产精品久久婷婷六月丁香 | 黄色aaa级片 | 日韩成人免费在线 | 日韩女同av | av中文字幕免费在线观看 | 国产精品久久一区二区三区, | 丝袜护士aⅴ在线白丝护士 天天综合精品 | 国产馆在线播放 | 在线免费观看视频 | 中文字幕 影院 | 久久久国产精品麻豆 | 精品久久久久国产免费第一页 | 天天操天天爽天天干 | 成人av片在线观看 | 在线看中文字幕 | 欧美亚洲国产精品久久高清浪潮 | 国产精品免费久久久久久久久久中文 | 黄色大片网 | 天天干天天操天天拍 | 97精品在线视频 | 免费看国产a | 国产美女精品人人做人人爽 | 成人在线观看免费 | 免费在线中文字幕 | 五月婷婷久久丁香 | 久久人操 | 韩日电影在线观看 | 国产91精品高清一区二区三区 | 99久久久久久久久久 | 色噜噜在线观看视频 | .国产精品成人自产拍在线观看6 | 99成人精品 | 91麻豆国产福利在线观看 | 亚洲视频免费在线观看 | 性色在线视频 | 亚洲黄色一级电影 | 午夜国产福利在线观看 | 五月黄色 | 2000xxx影视 | 午夜精品福利在线 | 国产亚洲精品久久久网站好莱 | 在线三级中文 | www色网站| 日韩欧美一区二区在线观看 | 狠狠的日日 | 国产精品一区二区久久精品爱微奶 | 亚洲国产精品成人av | 最近日本韩国中文字幕 | 国产在线播放一区 | 日本久久高清视频 | 久久久久久久久久网 | 国产成人av免费在线观看 | 久久国产精品免费视频 | 亚洲成人免费 | 玖玖在线资源 | 免费在线一区二区 | 午夜精品久久久久久久99 | 在线观看中文字幕亚洲 | 久久久久亚洲最大xxxx | 国产剧情一区 | 日韩精品一区在线观看 | 成人午夜电影久久影院 | 波多野结衣精品视频 | 久久久免费少妇 | 中文字幕三区 | 2019天天干夜夜操 | 在线香蕉视频 | 激情综合五月婷婷 | 日韩久久久久久久久久久久 | 日韩二区三区在线观看 | 欧美日韩在线视频一区二区 | 精品婷婷 | 九色视频网址 | 久久成人麻豆午夜电影 | 中文字幕av在线播放 | 综合影视 | 蜜桃传媒一区二区 | 久草在线免费资源站 | 日本一区二区三区视频在线播放 | 国产精品va在线观看入 | 免费在线观看一区 | 久久香蕉电影 | 五月婷网 | 国产成人黄色在线 | 中文字幕成人一区 | 亚洲国产小视频在线观看 | 日韩另类在线 | 一区二区三区韩国免费中文网站 | 中文字幕av在线播放 | 免费看黄视频 | 在线黄色av | 国产日韩欧美自拍 | 丁香激情综合 | 激情视频一区二区三区 | 一本一道久久a久久精品蜜桃 | 久久99国产精品二区护士 | 91九色在线播放 | 美女久久久久久 | 综合亚洲视频 | 欧美午夜精品久久久久久浪潮 | 91免费视频网站在线观看 | 日韩动态视频 | 成人免费观看网站 | av丝袜在线 | 亚洲精品国久久99热 | 色91av| 国产一区二区视频在线播放 | 久久9999久久免费精品国产 | 国产精品一区二区白浆 | 91精品在线看 | 13日本xxxxxⅹxxx20 | 天天操婷婷 | 午夜久久久久久久久久久 | 国产精华国产精品 | 中文字幕精品一区久久久久 | 婷婷色综合 | 日韩在线视频观看免费 | 国产精品一区二区 91 | 免费在线观看成人小视频 | 午夜精品久久久久久久99婷婷 | 99r在线播放 | 97热视频 | 国产91粉嫩白浆在线观看 | 亚洲视频456| 91自拍视频在线 | 日本黄色免费电影网站 | 免费看黄在线网站 | 96久久欧美麻豆网站 | 亚洲一区日韩在线 | 久久99在线观看 | 一区二区三区四区免费视频 | 欧美日韩精品综合 | 色网站中文字幕 | 亚洲视频2 | 久久久福利视频 | 超碰在线9 | 欧美成人区 | 国产免费亚洲高清 | 97影视 | 国产在线视频不卡 | 欧美日韩在线观看一区二区三区 | 美女啪啪图片 | 二区视频在线观看 | 日韩在线免费视频观看 | 国产日韩欧美自拍 | 国产日韩在线视频 | 亚洲精品一区二区三区四区高清 | 超碰在线个人 | 500部大龄熟乱视频使用方法 | 日日干激情五月 | 亚洲欧美综合精品久久成人 | 久久久综合电影 | 久久成人福利 | 国产成人免费网站 | 日韩精品综合在线 | 中文字幕在线免费看 | 干狠狠 | 国产精品黑丝在线观看 | 在线观看视频97 | 久久国产一区二区三区 | 一区二区三区国产精品 | 免费麻豆视频 | 一区二区中文字幕在线观看 | 综合色婷婷 | 天天干夜夜擦 | 久久久精品一区二区 | 98久久| 人人爽人人插 | 天干啦夜天干天干在线线 | 91精品国产99久久久久 | 国产日韩欧美在线看 | 日韩三级视频在线看 | 午夜.dj高清免费观看视频 | 人人干,人人爽 | 久久视频二区 | 欧美精品日韩 | 狠狠色丁香婷婷综合橹88 | 91精品网站在线观看 | 草久在线观看视频 | 国产美女被啪进深处喷白浆视频 | 亚洲第一色 | 国产精品自产拍在线观看蜜 | 天天拍天天爽 | 在线观看免费福利 | 亚洲激情在线播放 | 在线亚洲精品 | 国产不卡精品 | 黄色av观看 | 激情婷婷av | 日本最新高清不卡中文字幕 | 在线观看91精品国产网站 | 黄色美女免费网站 | 2018精品视频 | 一区二区三区精品久久久 | 久久成人综合 | 99精品区| 一本一本久久a久久精品牛牛影视 | 婷婷夜夜 | 久久久久国产精品免费 | 永久免费观看视频 | 综合久久网站 | 国产精品国产亚洲精品看不卡15 | 欧美成a人片在线观看久 | 手机看片 | 免费中文字幕视频 | 中文字幕av网站 | 久久精品一区二区三区视频 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 91x色| 免费观看全黄做爰大片国产 | 国产午夜三级一二三区 | 日韩在线视频网站 | 久久免费观看视频 | 91免费日韩 | 久久久国产精品网站 | 美女网站在线播放 | 色婷婷欧美 | 成人中文字幕在线 | 欧美日韩中文在线 | 亚洲精品永久免费视频 | 正在播放亚洲精品 | 国产99久久久国产精品免费二区 | 久久免费视频网 | a级片网站 | 免费久久99精品国产 | 在线观看免费视频你懂的 | 久久久伊人网 | 一区二区视频电影在线观看 | 天天做日日爱夜夜爽 | 91黄色影视| 日韩欧美视频免费在线观看 | 国产自在线观看 | 欧美日韩国产精品一区二区 | av 一区二区三区四区 | 91免费在线视频 | 少妇按摩av| 成人性生交大片免费观看网站 | 久久久久久免费毛片精品 | 91av成人| 国产三级国产精品国产专区50 | 国产精品久久久毛片 | 草免费视频 | 久久九九免费视频 | 麻豆免费观看视频 | 人人超在线公开视频 | 久久99久国产精品黄毛片入口 | 久久久久人人 | 日韩大片免费在线观看 | 久久久久成人精品免费播放动漫 | www.午夜视频 | 国产精品成人a免费观看 | 高清精品久久 | 国产在线播放不卡 | 国产又粗又猛又爽又黄的视频免费 | 果冻av在线 | 超碰在线个人 | 久久97久久| 中文字幕一区二区三区在线播放 | 久久艹影院 | 久久久精品网站 | 免费在线观看视频一区 | 国产一区二区三精品久久久无广告 | 四虎成人在线 | 九九热只有这里有精品 | 不卡的av| 国产美女视频一区 | 日日操夜夜操狠狠操 | 国产一区在线看 | 五月天视频网站 | 国产91精品一区二区绿帽 | 精品中文字幕视频 | 成年人黄色免费网站 | 成人影视免费看 | 免费91麻豆精品国产自产在线观看 | 亚洲欧洲精品久久 | 国产精品九色 | 二区三区av | 91精品国产成人www | 久久精品一二三 | 午夜国产福利在线 | 免费看黄视频 | 亚洲永久精品国产 | 国产精品福利在线播放 | 亚洲一区二区三区毛片 | 国产成人一区二区三区在线观看 | 精品久久国产 | 久久中文字幕在线视频 | 日韩mv欧美mv国产精品 | 人人看黄色 | 99精品视频在线播放免费 | 日韩啪啪小视频 | av中文字幕在线观看网站 | 久草在线免费播放 | 成人网页在线免费观看 | 日本黄色大片儿 | 狠狠色丁香婷婷综合久久片 | 高清av影院 | 亚洲一区二区视频在线 | 国产免费不卡av | 亚洲h在线播放在线观看h | 亚洲人在线视频 | 天天艹 | 精品一区久久 | 中文字幕在线观看资源 | 香蕉在线视频观看 | 日本精品一 | 97精品国产| 国产精品久久久久久久久蜜臀 | 麻豆 91 在线| 性色av一区二区三区在线观看 | 久久永久免费 | 久久久久久久久爱 | 高清av免费一区中文字幕 | 亚洲国产久 | 亚洲播播 | 九月婷婷人人澡人人添人人爽 | 欧美性一级观看 | 国产亚洲久一区二区 | 国产高清久久久久 | 看v片 | 亚洲婷婷伊人 | 日韩在线免费视频 | 九九九九热精品免费视频点播观看 | 久久久国产一区二区三区四区小说 | 国产高清无线码2021 | 中文字幕资源站 | 日韩欧美在线高清 | 国内精品久久久久久中文字幕 | 天天操天天爱天天干 | 在线黄色国产 | 日本乱码在线 | 亚洲国产欧洲综合997久久, | 国产一级电影网 | 九九视频热 | 蜜臀av在线一区二区三区 | 中文字幕日本电影 | 久久婷婷亚洲 | 欧美亚洲一区二区在线 | 99久久99久久精品国产片果冰 | 18国产精品白浆在线观看免费 | 天天干天天弄 | 五月婷婷开心中文字幕 | 久久网页| 在线观看视频免费大全 | 欧美日本不卡 | 91九色蝌蚪在线 | 五月色丁香| 久久综合免费视频 | 日韩高清精品一区二区 | 玖玖爱免费视频 | 日韩av高清在线观看 | 超碰97免费在线 | 欧美中文字幕久久 | 日韩理论片 | 国内久久精品视频 | 日本少妇高清做爰视频 | 久久亚洲影视 | 九九视频一区 | 日本在线视频一区二区三区 | 欧美中文字幕久久 | 精壮的侍卫呻吟h | 国产日韩在线播放 | 日韩av电影中文字幕在线观看 | 色综合夜色一区 | 99爱视频在线观看 | 一级黄色av| 亚洲日韩中文字幕 | 久久国产影院 | 亚洲乱码久久久 | 91久久国产综合精品女同国语 | 国产1级视频 | 国产精品黄色影片导航在线观看 | 中文字幕永久在线 | 日韩精品一二三 | 在线看的毛片 | 欧美另类69 | 丁香午夜婷婷 | 日韩字幕在线观看 | 亚洲激情视频在线 | 国产亚洲精品久久久久久久久久久久 | 国产91区 | 亚洲精品www. | 69精品视频| 蜜桃视频在线视频 | 成人黄色免费在线观看 | 在线观看岛国片 | 久久一本综合 | 欧洲视频一区 | 色综合久久综合网 | 精品国产免费人成在线观看 | 免费高清在线一区 | 亚洲小视频在线观看 | 日韩美女高潮 | 久久av在线播放 | 欧美亚洲精品一区 | 99热这里精品 | 四虎在线影视 | 亚洲精品自拍视频在线观看 | 日本99久久 | 色婷婷狠狠五月综合天色拍 | 亚洲欧美日韩精品久久奇米一区 | 美女网站免费福利视频 | 国产一区在线视频观看 | 国产一级片网站 | 国产麻豆电影在线观看 | 久久深夜 | 久久精品久久精品 | 18性欧美xxxⅹ性满足 | 中日韩免费视频 | 国产精品麻豆免费版 | 天堂av官网 | 国产一级特黄毛片在线毛片 | 日日爽视频 | 国产一级片不卡 | 天天操天天艹 | 99精品视频免费观看 | zzijzzij亚洲成熟少妇 | 高清不卡免费视频 | 韩日av一区二区 | 国产成人a v电影 | 99久久精品网 | 中文字幕一区二区三区四区久久 | 国产精品久久久久久久久久久杏吧 | 成人在线一区二区 | 五月天综合网站 | 亚洲成av人片在线观看www | www.色com | 国产九色91| 久久黄色片| 日韩最新中文字幕 | 色综合久| 在线看片91 | 国产精品va | 色天天综合久久久久综合片 | 免费中文字幕视频 | 欧美 高跟鞋交 xxxxhd | 综合网av | 久久久久久国产精品久久 | 日韩午夜三级 | 亚洲午夜精品久久久久久久久久久久 | 国产黄色片免费观看 | 一区二区av | 久久综合狠狠综合久久综合88 | 九九热国产视频 | 成人午夜在线观看 | 美女福利视频在线 | 能在线观看的日韩av | 在线看片中文字幕 | 91日韩精品视频 | 国产99久久九九精品免费 | 欧美日韩国产区 | 91电影福利 | 欧洲精品久久久久毛片完整版 | 日本精品午夜 | 成人网大片| 亚洲最新毛片 | 日日操天天操夜夜操 | 婷婷色婷婷 | av在线网站大全 | 亚洲精品乱码久久久久久9色 | 六月色丁香 | 免费a级观看 | 色综合天天做天天爱 | 综合网天天射 | 久久久96| 天天爱天天操 | 久久成人午夜视频 | 日韩精品一区二区三区免费观看 | 欧美大片在线观看一区 | 国产午夜精品一区二区三区欧美 | 五月激情丁香婷婷 | 久久精品99精品国产香蕉 | 久久全国免费视频 | 久久99久久99精品免视看婷婷 | 国产精品午夜av | 日韩中文字幕免费视频 | 天天插天天狠 | 久久九九影院 | 欧美久久影院 | 在线视频久久 | 狠狠干成人综合网 | 在线看片日韩 | 色婷婷综合激情 | 五月婷婷av | 亚洲电影自拍 | 久久成人一区 | 99夜色 | 九九热免费观看 | 99精品久久精品一区二区 | 亚洲动漫在线观看 | 国产精品淫| 97在线免费观看视频 | 欧美精选一区二区三区 | 91在线中文 | 久久精品久久国产 | 久久久www成人免费毛片 | 丁香激情综合久久伊人久久 | 91经典在线 | 视频在线观看入口黄最新永久免费国产 | 日批视频在线 | 一区二区三区免费在线观看视频 | 国产一区观看 | 国产黄影院色大全免费 | 2022国产精品视频 | www免费在线观看 | 欧美精品久久久久a | 最近中文字幕免费 | 国产精品一区二区三区在线 | 成人av免费看 | 婷婷丁香久久五月婷婷 | 五月天久久 | 久久久网站 | 免费在线黄网 | 日韩精品免费一线在线观看 | 国产小视频国产精品 | 精品免费久久久久 | 一区二区激情 | 欧美日韩伦理一区 | wwxxx日本 | 91高清免费看 | 成人精品一区二区三区中文字幕 | 久久 一区| 麻豆91在线看| 99久久这里只有精品 | 五月天色婷婷丁香 | 欧美最猛性xxxxx(亚洲精品) | 中文字幕在线免费播放 | 五月天久久久久久 | 亚洲国产福利视频 | 国产亚洲成人网 | 精品视频免费在线 | 亚洲自拍av在线 | 色插综合 | 免费a v在线| 国产精品久久久久久久久大全 | 在线国产视频 | 欧美视频www | 国内精品久久久久久久久久久 | 久久激情视频免费观看 | 国产黄色成人av | 色婷婷久久一区二区 | 国产精品免费视频网站 | 亚洲女人天堂成人av在线 | 中文区中文字幕免费看 | 在线探花| 美女精品国产 | 国产精品入口麻豆www | 欧美精品在线观看一区 | 久久在视频 | 日韩成人免费观看 | 日韩av在线资源 | 成人精品久久久 | 天天爽人人爽夜夜爽 | 精品91久久久久 | 日日久视频 | 91综合色 | 天天爱天天 | 久久y | 99精品国产高清在线观看 | 在线精品在线 | 91麻豆网站 | 91理论片午午伦夜理片久久 | 国产精品不卡一区 | 久久久久 免费视频 | 91麻豆网 | 日韩小视频 | 青青草国产精品视频 | 欧美国产日韩中文 | 欧美精品久久久久久久久久白贞 | 久久午夜电影网 | 毛片二区 | 欧美激情第28页 | 69精品视频 | 精品日韩在线一区 | 黄色免费看片网站 | 国产精品久久久久影视 | 手机在线日韩视频 | 99这里只有精品99 | 免费网址你懂的 | 日韩精品2区 | 久久精品视频在线观看免费 | 91在线精品播放 | 精品不卡视频 | www久久国产 | 久久久久国产视频 | 欧美午夜精品久久久久 | 五月婷婷电影网 | 中文字幕电影一区 | 国产不卡视频在线 | 欧美激情视频在线观看免费 | 国产精品www | 极品美女被弄高潮视频网站 | 性色大片在线观看 | av在线一二三区 | 黄影院| 91精品国产91| 国产在线97 | 欧美日韩一二三四区 | 午夜精品电影一区二区在线 | 免费看搞黄视频网站 | 黄色成人影院 | 人人舔人人舔 | 久久精品在线免费观看 | 国产看片网站 | 国产精品av免费 | av日韩中文| av观看在线观看 | 丰满少妇在线观看资源站 | 国产黄色特级片 | 亚洲视频在线观看免费 | 欧美日韩国产一区二 | 色网站免费在线看 | 免费国产在线精品 | 天天天天爱天天躁 | 在线国产高清 | 免费成人看片 | 五月婷婷综合在线视频 | 黄色小网站在线 | 欧美最猛性xxxx | 91香蕉亚洲精品 | av在线h| 99色免费视频 | 日韩久久一区 | 天天操天天操天天操天天操天天操天天操 | 天天射天天爱天天干 | 日日干天天 | 欧美一级专区免费大片 | 日韩久久午夜一级啪啪 | 久久久久久久久久网站 | 成人网在线免费视频 | 久久久免费国产 | 国产精品视频全国免费观看 | 婷婷综合网| 国产精品一区久久久久 | 人人爱人人舔 | 日韩精品久久久久久久电影99爱 | 亚洲精品456在线播放乱码 | 欧美综合在线观看 | 久久婷婷综合激情 | 天天在线视频色 | 国产精品夜夜夜一区二区三区尤 | 日韩视频免费观看高清完整版在线 | 亚洲午夜久久久久久久久 | 在线婷婷| 91九色蝌蚪国产 | 麻豆国产在线播放 | 成人免费xyz网站 | 美女视频黄网站 | 国产亚洲日 | 中文字幕观看av | 成人国产精品 | 久久婷亚洲五月一区天天躁 | 日韩高清一二三区 | 国产又粗又猛又黄又爽的视频 | 青青河边草观看完整版高清 | 久久免费看片 | 日韩精品一区二区三区免费观看 | 久久尤物电影视频在线观看 | 日产av在线播放 | 国产九色91 | 国产系列精品av | 在线天堂日本 | 中文字幕资源网 | 亚洲精品一区二区三区四区高清 | 国产成人免费在线观看 | 亚洲成人黄色av | 国产丝袜一区二区三区 | 久久香蕉影视 | 亚洲精品国产综合久久 | 婷婷激情av | 日韩,中文字幕 | 91精品啪在线观看国产81旧版 | 8x成人在线 | www激情com| 激情电影影院 | 久久久国产精品网站 | 国产精品麻豆一区二区三区 | 91综合视频在线观看 | 亚洲六月丁香色婷婷综合久久 | 99久久er热在这里只有精品15 | 日韩毛片一区 | 亚洲一区久久 | 午夜久久福利 | 国产精品国产三级国产aⅴ无密码 | 日韩精品在线免费播放 | 国产最新精品视频 | 在线免费观看国产黄色 | 一区二区三区日韩在线 | a视频在线观看免费 | 婷婷综合 | 8x成人免费视频 | 久久精品这里热有精品 | 国产91综合一区在线观看 | 91香蕉视频黄色 | 狠狠干成人综合网 | 国产又粗又硬又爽的视频 | 一区二区日韩av | 日韩高清 一区 | 亚洲国内精品在线 | 久久影院午夜论 | 亚洲国产人午在线一二区 | 亚洲综合成人av | 国产大陆亚洲精品国产 | 婷婷在线不卡 | 97视频在线播放 | 91x色 | 96国产精品视频 | 91九色最新地址 | 91成年视频 | 免费试看一区 | 亚洲一二三区精品 | 在线电影中文字幕 | 国产91影院 | 国产精品一区二区久久精品爱涩 | 亚洲精品中文在线观看 | 4hu视频 | 日韩精品高清视频 | .国产精品成人自产拍在线观看6 | 久久99爱视频 | 久久综合免费视频 | 97视频亚洲 | va视频在线 | 五月婷久久 | 91福利视频久久久久 | 亚洲欧洲精品一区二区精品久久久 | 亚洲做受高潮欧美裸体 | 欧洲精品一区二区 | 久久99久久99精品中文字幕 | 在线看日韩av | 国产精品一区二区久久精品 | 国产视频精品久久 | 日韩免费成人 | 国产精品女人久久久久久 | 在线国产激情视频 | 精品美女国产在线 | 日韩欧美69 | 黄色小视频在线观看免费 | 亚洲黄色一级电影 | 欧美一区二区三区在线播放 | av直接看| 99精品在线播放 | 久久久99国产精品免费 | 国产精品免费在线观看视频 | 人人搞人人干 | 天天做天天看 | 九九热在线观看视频 | 精品久久久久久亚洲综合网 | 97碰碰碰| 日韩一区二区三区免费视频 | 久久久国产99久久国产一 | 六月丁香伊人 | 首页中文字幕 | 丁香花在线观看免费完整版视频 | 亚洲精品一区二区三区四区高清 | 97国产精品视频 | 色偷偷av男人天堂 | 99国产免费网址 | 五月天九九 | 国产免费高清视频 | 在线高清一区 | 久久视频在线观看中文字幕 | 91在线最新| 日韩欧美一级二级 | 综合久久久 | 91精品国产九九九久久久亚洲 | 青春草免费视频 | 国产午夜精品一区二区三区在线观看 | 国产一二三区av | 97视频免费 | 日韩xxxx视频 | 97综合网 | 国产成人久久精品 | 久久成人免费 | 91专区在线观看 | 婷婷精品国产欧美精品亚洲人人爽 | 亚洲国产成人精品电影在线观看 | 日本精品一区二区在线观看 | 99精品视频在线播放免费 | 激情中文字幕 | 天天骚夜夜操 | 在线观看香蕉视频 | 激情丁香综合 | 亚洲精品久久久久久国 | 天堂av在线中文在线 | 精品高清美女精品国产区 | 天天爽夜夜爽精品视频婷婷 | 国产一级片直播 | 久久久久伦理电影 | 欧美在线free | 制服丝袜在线91 | 国内丰满少妇猛烈精品播 | 欧美久久久久 | 欧美久久久久久久久中文字幕 | 国产成人亚洲在线观看 | 激情av网| 人人玩人人添人人澡97 | 久久视频二区 | 毛片激情永久免费 | 国产午夜三级一区二区三 | 伊人久久影视 | 特黄特色特刺激视频免费播放 | 国产精品免费久久久久久久久久中文 | 国产精品午夜久久久久久99热 | 国产永久免费观看 | 天堂av官网 | 国产一二三区在线观看 | 亚洲免费色 |