如何在自己的opengl程式中使用GLSL

2021-05-22 17:47:57 字數 967 閱讀 2107

glsl,即gl shading language,用自己寫的程式取代opengl的固定渲染管線的一種語言。

之前看了下rendermonkey,雖然功能不算弱,但使用rendermonkey卻不知道在裡面怎麼用自己的shader去渲染自己的opengl程式,所以就去找下了關於把shader鏈結到自己的程式裡的方法。

因為microsoft僅支援到opengl1.1,所以使用了glew擴充套件。

測試用的vertex shader和fragment shader非常簡單,即把物體顯示為紅色,**如下:

shader的類的定義:

其中m_vertexshader和m_fragmentshader存放shader的字串,m_vert、m_frag和m_program分別為頂點著色器物件、片段著色器物件和著色器程式物件的控制代碼。

在用readvertextshader()和readfragmentshader()方法來讀取shader源**之後,我們就使用setshader()來編譯著色器**,然後當我們需要使用shader的時候就呼叫useshader()即可。

setshader()**如下:

useshader()**如下:

不過我並沒有使用函式來獲取編譯和鏈結的日誌,這個有待進一步改進。

當我們不需要再使用shader時,要先取消shader物件與程式物件的繫結關係,然後再刪除這些物件,我把這些步驟放在了析構函式裡執行:

當我們寫好類的實現方法後,就可以在程式裡呼叫這些方法來使用shader了。

我是在wm_create訊息裡執行這些的,可以根據需要來自行呼叫。

同時在wm_create訊息裡使用了glewinit()來初始化glew,不初始化glew的話無法正常使用glew擴充套件的函式,並且glew的初始化要放在opengl資源建立之後……這個問題弄了我好久才把其解決……

程式執行圖:

CIV 如何在自己的程式中呼叫外部程式

緣由 因為一些原因要呼叫其他公司的應用程式,到處找相關資料,到乙個論壇上找到了,最後壇主給了我乙個寫好的應用程式,很想吐槽,我要他幹嘛,我要的是原始碼,原始碼啊!最後還是自己在ni官網上找到了答案,並不複雜很簡單。介面 不想多說直接貼 include windows.h include includ...

如何在程式中延時

方法一 使用sleep函式,如延時2秒,用sleep 2000 方法二 使用sleep函式的不利在於延時期間不能處理其他的訊息,如果時間太長,就好象宕機一樣,利用coledatetime類和coledatetimespan類實現延時就不會出現那樣的問題 coledatetime start time...

如何在VS2010中配置OpenGL

opengl作為當前主流圖形api之一,具有強大的可移植性,高效能的圖形渲染,越來越廣泛的應用。下面主要對opengl在vs2010中的配置做簡要的介紹。系統 windows 編譯環境 visual studio 2010 安裝glut工具包 windows環境下安裝opengl的步驟為 2 在 我...