OpenGL三角形的雙面不同顏色的繪製

2021-09-02 11:18:07 字數 1210 閱讀 2135

對於乙個三角形,我要給它正反面不同的顏色。然後通過旋轉,看出它的效果。

我只想到了2種方法,下面我來寫一下這兩種方法。

對於乙個平面,我們知道,當它旋轉到一定角度的時候,它就變成了一條線,那麼,我們只要對這個角度進行一下判斷就可以了。

下面是我的測試**:

#include

glfloat yrot; //饒y軸旋轉

void display()

第二種方法,在同乙個地方繪製兩個三角形(不同顏色的),然後通過剔除多邊形背面的方式實現。

先來介紹一下繪製方式,在預設情況下,逆時針繪製的是正面,順時針繪製的是背面,當然,可以通過glfrontface(gl_ccw)是它相反。

既然如此,那麼就可以繪製兩個正好相反的三角形,乙個正面(紅色)乙個背面(藍色)。

然後對其剔除背面就可以了。

如何剔除?

void glcullface(glenum mode); 通過這個函式

看一下它的引數:

gl_front: 剔除正面多邊形

gl_back:剔除背面多邊形

gl_front_and_back:剔除所有多邊形

那麼這裡,就使用gl_back這個引數。

然後要使用剔除功能的時候,啟用一下glenable(gl_cull_face);即可。

接下來我來說一下實現的原理:

在繪製的時候是乙個正面(紅色)乙個背面(藍色)。

在啟用glenable(gl_cull_face);剔除的功能後,我們告訴opengl說:「我看不見的你給我剔除了把!」。

一開始,我們看到的是紅色三角形,因為它是正面。opengl認為,看得見的是正面,看不見的是背面。

其實,我們可以這麼想,對於這兩個三角形,乙個紅色三角形,乙個藍色三角形,因為被剔除了背面,所以,它們始終只有乙個面,即正面。

當這兩個三角形,不斷旋轉,旋轉到紅色三角形即將沒有了的時候,這個時候,是不是原本是正面的紅色三角形要變成了背面(因為看不見了嘛~)?結果就要被剔除了,然後此時,原本是背面的藍色三角形,變成了正面,因為我們可以看到正面,所以接下來看到的就是藍色三角形了。

下面,我貼一下這種方法的原始碼:

#include

glfloat yrot; //饒y軸旋轉

void display()

void initgl()

int main(int argc, char *argv)

opengl原始碼:[url]

OpenGL畫三角形

修改paintgl函式 void nehewidget paintgl 清楚螢幕和深度快取 glclear gl color buffer bit gl depth buffer bit 重置當前的模型觀察矩陣 glloadidentity gltranslatef 1.5,0.0,6.0 開始繪製...

OpenGL畫三角形

修改paintgl函式 void nehewidget paintgl 清楚螢幕和深度快取 glclear gl color buffer bit gl depth buffer bit 重置當前的模型觀察矩陣 glloadidentity gltranslatef 1.5,0.0,6.0 開始繪製...

OpenGL隨筆二 opengl繪製三角形

define glew static 1 include include include vbo繪製兩個共邊的三角形需要六個點 float vertices const char vertexshadersource version 330 core n layout location 0 in v...