OpenglES語法以及繪製三角形

2021-09-24 02:49:20 字數 2034 閱讀 1989

一、基本變數

glsl 的語法與 c 語言很類似,可以用變數、結構體、陣列(glsl 中沒有指標型別)

變數類別

變數型別描述空

void

用於無返回值的函式或空的引數列表

標量float, int, bool

浮點型,整型,布林型的標量資料型別

浮點型向量

float, vec2, vec3, vec4

包含1,2,3,4個元素的浮點型向量

整數型向量

int, ivec2, ivec3, ivec4

包含1,2,3,4個元素的整型向量

布林型向量

bool, bvec2, bvec3, bvec4

包含1,2,3,4個元素的布林型向量

矩陣mat2, mat3, mat4

尺寸為2x2,3x3,4x4的浮點型矩陣

紋理控制代碼

sampler2d, samplercube

表示2d,立方體紋理的控制代碼

二、限定符(只列出比較常用的儲存限定符和精度限定符)

1、儲存限定符

限定符描述

< none: default >

區域性可讀寫變數,或者函式的引數

const

編譯時常量,或唯讀的函式引數

attribute

用於頂點著色器中,儲存頂點著色器中每個頂點的輸入(位置座標、法向量、紋理座標和顏色等)

uniform

在圖元處理過程中其值保持不變,由應用程式傳輸給著色器

varying

由頂點著色器傳輸給片段著色器中的插值資料

2、精度限定符

opengl es 與 opengl 之間的乙個區別就是在 glsl 中引入了精度限定符。

限定符描述

highp

滿足頂點著色語言的最低要求。對片段著色語言是可選項

mediump

滿足片段著色語言的最低要求,其對於範圍和精度的要求必須不低於lowp並且不高於highp

lowp

範圍和精度可低於mediump,但仍可以表示所有顏色通道的所有顏色值

三、繪製三角形

opengl es2.0開始使用glsl語言來描述頂點著色器和片段著色器。

opengl渲染圖形需要著色器物件(頂點著色器和片段著色器)和程式物件,著色器物件和程式物件就相當於c語言的編譯器和連線程式,opengl先將源程式編譯為目標程式(.obj或.o),然後再將其鏈結為最後的可執行程式。大體步驟如下:

1、建立頂點著色器物件和片段著色器物件

int shaderobjectid = gles20.glcreateshader(type);
type型別可以是gles20.gl_vertex_shader或gles20.gl_fragment_shader

2、將源**鏈結到每個著色器

gles20.glshadersource(shaderobjectid, shadercode);
shadercode就是glsl編寫的源**

3、編譯著色器物件

gles20.glcompileshader(shaderobjectid);
4、建立乙個程式物件

mprogramobjectid = gles20.glcreateprogram();
5、將編譯後的著色器物件連線到程式物件

gles20.glattachshader(mprogramobjectid, vertexshaderobjectid);

gles20.glattachshader(mprogramobjectid, fragmentshaderobjectid);

6、鏈結程式物件

gles20.gllinkprogram(mprogramobjectid);

gles20.gluseprogram(mprogramobjectid);

繪製三角形四邊形demo

opengles繪製點精靈

什麼是點精靈 opengl圖形由頂點構成,所謂點精靈就是對點進行紋理對映,簡單說就是把一副紋理貼在乙個點上 原來4個頂點構成乙個矩形,現在乙個頂點就完成了,典型的如粒子效果,雲霧,水流火花都可以用點精靈來實現 這樣減少了3個頂點的計算,效率很高。下面看例子 我們把 shader實現 virtual ...

學習OpenGL ES之繪製地形

地形模型一般是由nxn的網格構成,網格的點在y軸上的座標由灰度地形圖上相應的顏色決定。顏色越亮,高度越高。顏色每個通道的取值範圍可以是0 255,通過公式轉換,可以很容易的控制生成模型的高度。上篇文章中,我們使用三角帶生成圓柱體的中間部分。現在我們要用多個三角帶來生成地形。如何生成單個三角帶我就不贅...

OPENGL ES之繪製金字塔

今天比照著教材畫了乙個金字塔,這個案例主要涉及到了圖形變換矩陣的使用。但是其中遇到了一些問題不甚明了,在我自己的 中,我設定了view.drawabledepth glkviewdrawabledepth16,結果繪製出來的圖案給人的感覺是從三角形底部看去的,把設定繪製深度的 注釋掉,則我的 的表現...