乙個基本的WebGL示例及注釋

2021-08-19 13:33:15 字數 1925 閱讀 8865

var canvas = document.getelementbyid("mycanvas");

// 獲取上下文並初始化畫布

var gl = canvas.getcontext("webgl");

// 定義清除顏色

gl.clearcolor(0.0, 0.0, 0.0, 1.0);

// 通過color_buffer_bit把顏色清除為gl.clearcolor()定義的顏色

gl.clear(gl.color_buffer_bit);

// 著色器原始碼

var vertexsource = `

// 宣告乙個屬性變數 a

attribute vec3 a;

void main()

`;var fragmentsource = `

// 精度限定符, 最小精度為float

precision mediump float;

void main()

`;// 建立定點和片段著色器

var vertexshader = gl.createshader(gl.vertex_shader);

var fragmentshader = gl.createshader(gl.fragment_shader);

// 將著色器原始碼附加到著色器上

gl.shadersource(vertexshader, vertexsource);

gl.shadersource(fragmentshader, fragmentsource);

// 編譯著色器

gl.compileshader(vertexshader);

gl.compileshader(fragmentshader);

// 建立乙個程式物件

var program = gl.createprogram();

// 將編譯好的著色器附加到程式物件上

gl.attachshader(program,vertexshader);

gl.attachshader(program,fragmentshader);

// 鏈結程式物件

gl.linkprogram(program);

// webgl引擎使用該程式物件

gl.useprogram(program);

// 建立乙個webglbuffer緩衝物件

var vertexbuffer = gl.createbuffer();

// 將該緩衝物件繫結為當前的陣列緩衝

gl.bindbuffer(gl.array_buffer, vertexbuffer);

// 緩衝資料

var data = [

0.0 , 0.5 , 0.0,

-0.5 , -0.5 , 0.0,

0.5 , -0.5 , 0.0

];// 將緩衝資料新增到當前的陣列緩衝中

gl.bufferdata(gl.array_buffer, new float32array(data), gl.static_draw);

// 獲取著色器原始碼中屬性的引用

var vertexattriblocation = gl.getattriblocation(program, "a");

// 設定屬性a接收gl.array_buffer的資料

gl.vertexattribpointer(vertexattriblocation, 3, gl.float, false, 0, 0);

// 設定通過頂點著色器將緩衝的輸入資料轉換為一系列頂點陣列

gl.enablevertexattribarray(vertexattriblocation);

// 繪製緩衝陣列

gl.drawarrays(gl.********s, 0, 3);

乙個簡單的makefile示例及其注釋

因為專案開發需要,要學會寫makefile,遂搗之,在網上看到一篇很不錯的makefile的入門文章,轉來和大家分享 相信在unix下程式設計的沒有不知道makefile的,剛開始學習unix平台 下的東西,了解了下makefile的製作,覺得有點東西可以記錄下。下面是乙個極其簡單的例子 現在我要編...

乙個簡單的makefile示例及其注釋

相信在unix下程式設計的沒有不知道makefile的,剛開始學習unix平台 下的東西,了解了下makefile的製作,覺得有點東西可以記錄下。下面是乙個極其簡單的例子 現在我要編譯乙個hello world,需要如下三個檔案 1.print.h include void printhello 2...

乙個簡單的makefile示例及其注釋

相信在unix下程式設計的沒有不知道makefile的,剛開始學習unix平台 下的東西,了解了下makefile的製作,覺得有點東西可以記錄下。下面是乙個極其簡單的例子 現在我要編譯乙個hello world,需要如下三個檔案 1.print.h include void printhello 2...