OpengGL中的數據類型,跟C中不少是類似的,看名字就能夠了,特殊的在下面
GLsizeiptr
GLintptr
GLsyn
GLclampf
GLbitfield 32位
GLshort shorts[10];//short數組
GLdouble *doubles[10];//10個指向double的指針
OpenGL中錯誤的種類:
GL_INVALID_ENUM The enum argument is out of range.
GL_INVALID_VALUE The numeric argument is out of range.
GL_INVALID_OPERATION The operation is illegal in its current state.
GL_OUT_OF_MEMORY Not enough memory is left to execute the command. No error has occurred.
GL_NO_ERROR
OpenGL中獲取錯誤的方法:
GLenum glGetError(void);
找呀找,找到一個小錯誤,getError,getError,直到返回GL_NO_ERROR
OpenGL中獲取版本的方法,直到該版本是什麼,能夠更好的作優化or編碼
const GLubyte *glGetString(GLenum name);
OpenGL中獲取參數
void glHint(GLenum target, GLenum mode);
OpenGL中狀態機
各類模式繪製都是狀態機在作,開和關兩個動做
void glEnable(GLenum capability);
void glDisable(GLenum capability);
glEnable(GL_DEPTH_TEST);
glDisable(GL_DEPTH_TEST);
你還能夠檢測是否是開的
GLboolean glIsEnabled(GLenum capability);
有些比開關量要複雜的
void glGetBooleanv(GLenum pname, GLboolean *params);
void glGetDoublev(GLenum pname, GLdouble *params);
void glGetFloatv(GLenum pname, GLfloat *params);
void glGetIntegerv(GLenum pname, GLint *params);
如下進入實戰,須要的靜態庫和代碼放在這裏啦。
https://code.google.com/p/oglsuperbible5/
如何在xcode中使用OpenGL,
1,新建一個Cocoa工程
2,添加OpenGL FrameWork,添加GLUT Framework
3,添加GLTools靜態庫的調用
按cmd+,鍵,到location底下創建通用變量$(GLTOOLS_INCLUDE)值爲$(SRCROOT)/include,這樣全部的項目均可以用這個變量
在工程屬性頁面,Building Settings底下的 Header Search Path 添加$(GLTOOLS_INCLUDE)目錄
把libGLTools.a拖入到工程中,便可
4,把appDelegate.* 及main.m三個文件刪除掉,添加一個實際操做的triangles.m,其內容見下面的代碼
#include <GLTools.h>
#include <GLShaderManager.h>
#ifdef __APPLE__
#include <glut/glut.h>
#else
#define FREEGLUT_STATIC
#endif
GLBatch triangleBatch;
GLShaderManager shaderManager;
//窗口大小改變時接受新的寬度和高度,其中0,0表明窗口中視口的左下角座標,w,h表明像素
void ChangeSize(int w,int h)
{
glViewport(0, 0, w, h);
}
//爲程序做一次性的設置
void SetupRC()
{
//設置背影顏色
glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
//初始化着色管理器
shaderManager.InitializeStockShaders();
//設置三角形,其中數組vVert包含全部3個頂點的x,y,笛卡爾座標對。
GLfloat vVerts[] = {
-0.5f,0.0f,0.0f,
0.5f,0.0f,0.0f,
0.0f,0.5f,0.0f,
};
//批次處理
triangleBatch.Begin(GL_TRIANGLES,3);
triangleBatch.CopyVertexData3f(vVerts);
triangleBatch.End();
}
//開始渲染
void RenderScene(void)
{
//清除一個或一組特定的緩衝區
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
//設置一組浮點數來表示紅色
GLfloat vRed[] = {1.0f,0.0f,0.0f,1.0f};
//傳遞到存儲着色器,即GLT_SHADER_IDENTITY着色器,這個着色器只是使用指定顏色以默認笛卡爾座標第在屏幕上渲染幾何圖形
shaderManager.UseStockShader(GLT_SHADER_IDENTITY,vRed);
//提交着色器
triangleBatch.Draw();
//將在後臺緩衝區進行渲染,而後在結束時交換到前臺
glutSwapBuffers();
}
int main(int argc,char* argv[])
{
//設置當前工做目錄,針對MAC OS X
gltSetWorkingDirectory(argv[0]);
//初始化GLUT庫
glutInit(&argc, argv);
/*初始化雙緩衝窗口,其中標誌GLUT_DOUBLE、GLUT_RGBA、GLUT_DEPTH、GLUT_STENCIL分別指
雙緩衝窗口、RGBA顏色模式、深度測試、模板緩衝區*/
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL);
//GLUT窗口大小,標題窗口
glutInitWindowSize(800, 600);
glutCreateWindow("Triangle");
//註冊回調函數
glutReshapeFunc(ChangeSize);
glutDisplayFunc(RenderScene);
//驅動程序的初始化中沒有出現任何問題。
GLenum err = glewInit();
if (GLEW_OK != err) {
fprintf(stderr, "glew error:%s\n",glewGetErrorString(err));
return 1;
}
//調用SetupRC
SetupRC();
glutMainLoop();
return 0;
} html
代碼地址:https://github.com/openlabb/openglsb git