OpenGL學習筆記(十五)

2021-10-08 18:01:12 字數 1311 閱讀 4458

我們需要告知opengl如何取樣紋理,所以我們必須使用紋理座標更新頂點資料:

float vertices = ;

由於我們新增了乙個額外的頂點屬性,我們必須告訴opengl我們新的頂點格式:

glvertexattribpointer(2, 2, gl_float, gl_false, 8 * sizeof(float), (void*)(6 * sizeof(float)));

glenablevertexattribarray(2);

注意,我們同樣需要調整前面兩個頂點屬性的步長引數為8 * sizeof(float)。

接著我們需要調整頂點著色器使其能夠接受頂點座標為乙個頂點屬性,並把座標傳給片段著色器:

#version 330 core

layout (location = 0) in vec3 apos;

layout (location = 1) in vec3 acolor;

layout (location = 2) in vec2 atexcoord;

out vec3 ourcolor;

out vec2 texcoord;

void main()

片段著色器應該接下來會把輸出變數texcoord作為輸入變數。

片段著色器也應該能訪問紋理物件,但是我們怎樣能把紋理物件傳給片段著色器呢?glsl有乙個供紋理物件使用的內建資料型別,叫做取樣器(sampler),它以紋理型別作為字尾,比如sampler1d、sampler3d,或在我們的例子中的sampler2d。我們可以簡單宣告乙個uniform sampler2d把乙個紋理新增到片段著色器中,稍後我們會把紋理賦值給這個uniform。

#version 330 core

out vec4 fragcolor;

in vec3 ourcolor;

in vec2 texcoord;

uniform sampler2d ourtexture;

void main()

我們使用glsl內建的texture函式來取樣紋理的顏色,它第乙個引數是紋理取樣器,第二個引數是對應的紋理座標。texture函式會使用之前設定的紋理引數對相應的顏色值進行取樣。這個片段著色器的輸出就是紋理的(插值)紋理座標上的(過濾後的)顏色。

現在只剩下在呼叫gldrawelements之前繫結紋理了,它會自動把紋理賦值給片段著色器的取樣器:

glbindtexture(gl_texture_2d, texture);

glbindvertexarray(vao);

gldrawelements(gl_********s, 6, gl_unsigned_int, 0);

OpenGL學習筆記

我是一名ios開發者,opengl是乙個比較重要的技術。所以就此開啟我的菜鳥之路。opengl open graphics library 是乙個跨程式設計語 言 跨平台的程式設計圖形程式接 它將計算機的資源抽象稱為乙個個opengl的物件,對這些資源的操作抽象為乙個的opengl指令.direct...

OpenGL學習筆記

數學基礎 叉積mv矩陣 文章內容主要來自 計算機圖形學程式設計 使用opengl和c 光柵化過程確定了用以顯示3個頂點所確定的三角形的所有畫素需要繪製的位置 光柵化過程開始時先對三角形的每對頂點進行插值 如果光柵化過程到此為止,那麼呈現出的影象將會是線框模型 使用 glpolygonmode gl ...

OpenGL學習筆記

因工作需要,這些天要研究opengl。我給自己定的目標是 1.節前能熟悉opengl基礎知識 2.確定一款以opengl為基礎的gui 3.學習如何使用該gui的控制項繪製3d選單 今天找到幾個 嵌入式系統使用的是opengl es,是桌面opengl的乙個子集,定義了一系列靈活高效的圖形加速介面。...