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;
}
代码地址:https://github.com/openlabb/openglsb
下载 OpenGL Extension Viewer 来查看本机支持的OpenGL版本 https://itunes.apple.com/app/opengl-extensions-viewer/id444052073?mt=12
cocoachian上一哥们用cocoa重写了nehe得Tutorials for OpenGL 3.3 and later(http://www.opengl-tutorial.org/),看着不错,代码在下面
https://github.com/JulianAtGitHub/OpenGL-tutorial-for-Cocoa-master
这哥们写的tutors http://user.xmission.com/~nate/tutors.html
扩充阅读:
一张显卡的诞生之路:http://vga.yesky.com/xiankadansheng/