本章节主要教大家使用opengl绘制基本图元
先看效果图:
:
图一.普通三角形(锯齿明显)
图二. 多重采样三角形(线条平滑)
一.Opengl简单的介绍
答:首先你要对OpenGL感兴趣,其次掌握一个平台对界面开发,如osx 、ios、 windows 、安卓等平台,liux平台也可以。
对于新手我会推荐以下参考书籍或网络资源:
先读:蓝宝书《OpenGL超级宝典》
其次:红宝书 《OpenGL编程指南》
再次:橙宝书 《OpenGL Shading Language》 GLSL着色语言
网络教程推荐:http://www.yakergong.net/nehe/ (windows下opengl开发教程,例子很多,重在理解)
二.Cocoa 建立opengl工程
2.在MainMenu.xib文件中拖入一个OpenglView
3.添加一个类OpenGLDrawView, 该类必须继承于NSOpenGLView。
OpenGLDrawView.h
#import <Cocoa/Cocoa.h>
@interface OpenGLDrawView : NSOpenGLView
@end
OpenGLDrawView.m
#import <OpenGL/gl.h> ///加入opengl文件头
#import <OpenGL/gl3.h> //
#import "OpenGLDrawView.h"
@implementation OpenGLDrawView
//重写prepareOpenGL方法
- (void)prepareOpenGL
{
}
- (void)drawRect:(NSRect)dirtyRect {
[super drawRect:dirtyRect];
}
4.OpenGLDrawView关联到xib中到的OpenglView
5.添加OpenGL.framework
"项目"->"build phases"->"Link Binary With Libraries",添加OpenGL.framework.
6.工程配置完毕。
三.代码讲解
//重写prepareOpenGL方法
- (void)prepareOpenGL
{
glClearColor(0.0, 0.0, 0.0, 1.0);
}
- (void)drawRect:(NSRect)dirtyRect {
[super drawRect:dirtyRect];
glClear(GL_COLOR_BUFFER_BIT);
//定义三角形坐标点
static GLfloat vectexs[]={
-0.5,0,0,
0.5,0,0,
0,0.5,0
};
//定义颜色
static GLfloat colors[]={
1.0,0,0,
0,1.0,0,
0,0,1.0
};
//开启客户端顶点数组绘制功能
glEnableClientState(GL_VERTEX_ARRAY);
//开启客户端颜色数组绘制功能
glEnableClientState(GL_COLOR_ARRAY);
//指定顶点数组指针
glVertexPointer(3, GL_FLOAT, 0, vectexs);
//指定颜色数组指针
glColorPointer(3, GL_FLOAT, 0, colors);
//开始绘制
glDrawArrays(GL_TRIANGLE_STRIP, 0, 3);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
glFlush();
// Drawing code here.
}
这里只讲解
glDrawArrays(GL_TRIANGLE_STRIP, 0, 3)的含义,
GL_TRIANGLE_STRIP指的是绘制图形的方式,
0指从顶点数组的0索引开始
3为要绘制的顶点个数。
下面给出GL_TRIANGLE_STRIP等绘制方式等图形表达方式: