#include "stdafx.h"
#include
#include "esutil.h"
typedef struct
userdata;
///// create a shader object, load the shader source, and
// compile the shader.
//gluint loadshader ( glenum type, const char *shadersrc )
gldeleteshader ( shader ); //刪除著色器
return 0;
}return shader;
}///
// initialize the shader and program object
//int init ( escontext *escontext )
\n";
glbyte fshaderstr =
"precision mediump float;\n"
"varying vec4 v_col; \n"
"void main() \n"
" \n";
gluint vertexshader;
gluint fragmentshader;
gluint programobject;
glint linked;
// load the vertex/fragment shaders
vertexshader = loadshader ( gl_vertex_shader, (const char *)vshaderstr );
fragmentshader = loadshader ( gl_fragment_shader, (const char *)fshaderstr );
// create the program object
programobject = glcreateprogram ( ); //建立乙個渲染程式
if ( programobject == 0 )
return 0;
glattachshader ( programobject, vertexshader ); //將著色器新增到程式中
glattachshader ( programobject, fragmentshader );
glbindattriblocation ( programobject, 0, "vposition" );
glbindattriblocation ( programobject, 1, "vcolor" );
// bind vposition to attribute 0
// link the program
gllinkprogram ( programobject ); //你可能新增了多個著色器,鏈結程式
// check the link status
glgetprogramiv ( programobject, gl_link_status, &linked );
if ( !linked )
gldeleteprogram ( programobject );
return false;
}// store the program object
userdata->programobject = programobject;
glclearcolor ( 0.0f, 0.0f, 0.0f, 0.0f );
return true;
}///
// draw a ******** using the shader pair created in init()
//void draw ( escontext *escontext )
;glfloat vcolor =
;glubyte pos =
;// set the viewport
glviewport ( 0, 0, escontext->width, escontext->height ); //視窗繪製的區域(相對於escreatewindow建立的視窗), 此時表示opengl將把渲染結果繪製到整個視窗
// clear the color buffer
glclear ( gl_color_buffer_bit );
// use the program object
gluseprogram ( userdata->programobject ); //使用 shader program
// load the vertex data
glvertexattribpointer ( 0, 3, gl_float, gl_false, 0, vvertices );
glenablevertexattribarray ( 0 );
glvertexattrib4fv(1, vcolor);
gldrawelements(gl_********s, 3, gl_unsigned_byte, pos);
glvertexattrib4fv(1, vcolor + 3);
gldrawelements(gl_********s, 3, gl_unsigned_byte, pos + 1);
eglswapbuffers ( escontext->egldisplay, escontext->eglsu***ce );
}int main ( int argc, char *argv )
執行結果:
雜記 OpenGL例項化
例項化是因為每渲染一組頂點 模型的時候 我們就要繫結一次頂點屬性指標以及頂點資料。當我們繪製多個相同的頂點資料時,可以通過例項化來只繫結一次頂點,而通過傳遞不同的引數到著色器中來實現繪製多個模型。第乙個方法是 使用uniform,設定乙個浮點數vec2位置偏移陣列。而通過gl instanceid,...
OpenGL基礎2 OpenGL簡介
小朋友你是否有很多問號,不知道為什麼需要這麼多複雜的方法,也不知道為什麼要這麼設計,更不知道僅僅顯示乙個點都那麼複雜,後面3d遊戲中的那麼精美的表現是否離自己很遠很遠 要不,再來一起看看opengl?其實看到這裡,你應該也像我一樣,裝好了環境,並且成功開啟了第乙個視窗,又或者說已經可以開始繪製一些非...
OPENGL紋理基礎
對於vbo道理是一樣的 1.紋理座標 在繪製一條線段時,我們設定其中乙個端點為紅色,另乙個端點為綠色,則opengl會自動計算線段中其它各畫素的顏色,如果是使用glshademode gl smooth 則最終會形成一種漸變的效果 例如線段中點,就是紅色和綠色的中間色 類似的,在繪製一條線段時,我們...