opengl 基礎code例項

2021-08-13 08:44:41 字數 2938 閱讀 1358

#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 則最終會形成一種漸變的效果 例如線段中點,就是紅色和綠色的中間色 類似的,在繪製一條線段時,我們...