三九宝宝网宝宝教育智力培养

怎么在ios开发中使用opengl

03月19日 编辑 39baobao.com

[ios开发中 block作为函数参数怎么使用]声明和使用Block: Apple文档中介绍了如何将一个Block声明为变量,并将其作为一个函数使用: int (^oneFrom)(int) = ^(int anInt) { return anInt - 1; }; // 创建了一个内联块^...+阅读

一、搭建开发环境 1. 打开Xcode, 新建一个工程 选择:IOS ->Application ->Single View Application模板 输入工程名称和基本信息,勾选“UseStoryboards”,然后创建 2. 添加必要的框架 在“Build Phases”中,添加三个框架 3. 修改viewController。h 添加 “#import”,并将它修改为继承"GLKViewController" 4. 修改“view”的类 双击“MainStoryboard.storyboard”展开,选择"view" 然后,在“Identity Inspector"中,将它的类改为”GLKView“ 好了,OpenGL的环境基本上搭建出来了。

二、增加自己代码 基本上,所有的代码都是加到ViewController.m文件中

1、添加全局属性声明 interface ViewController ()property(strong,nonatomic)EAGLContext* context;property(strong,nonatomic)GLKBaseEffect* effect;endimplementation ViewControllersynthesize context, effect;

2、 添加一组顶点数据 这是一个正方形顶点数组。实际上它是二个三角形接合而成的 GLfloat squareVertexData[48] ={ 0.5f, 0.5f, -0.9f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, -0.5f, 0.5f, -0.9f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 0.5f, -0.5f, -0.9f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 0.5f, -0.5f, -0.9f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, -0.5f, 0.5f, -0.9f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, -0.5f, -0.5f, -0.9f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f,}; 每行顶点数据的排列含义是: 顶点X、顶点Y,顶点Z、法线X、法线Y、法线Z、纹理S、纹理T。

在后面解析此数组时,将参考此规则。 顶点位置用于确定在什么地方显示,法线用于光照模型计算,纹理则用在贴图中。 一般约定为“顶点以逆时针次序出现在屏幕上的面”为“正面”。 世界坐标是OpenGL中用来描述场景的坐标,Z+轴垂直屏幕向外,X+从左到右,Y+轴从下到上,是右手笛卡尔坐标系统。我们用这个坐标系来描述物体及光源的位置。

三、初始化OpenGL环境

1、 基本的初始化代码 在ViewController.m中有个函数(void)viewDidLoad,它是程序运行时,初始化回调函数。在viewDidLoad函数内补充我们自己的初始化代码。 // 使用“ES2”创建一个“EAGLEContext”实例 self.context = [[[EAGLContext alloc]initWithAPI:kEAGLRenderingAPIOpenGLES2]autorelease]; // 将“view”的context设置为这个“EAGLContext”实例的引用。

并且设置颜色格式和深度格式。 GLKView* view = (GLKView*)self.view; view.context = self.context; view.drawableColorFormat = GLKViewDrawableColorFormatRGBA8888; view.drawableDepthFormat = GLKViewDrawableDepthFormat24; // 将此“EAGLContext”实例设置为OpenGL的“当前激活”的“Context”。这样,以后所有“GL”的指令均作用在这个“Context”上。随后,发送第一个“GL”指令:激活“深度检测”。

[EAGLContext setCurrentContext:context]; glEnable(GL_DEPTH_TEST); // 创建一个GLK内置的“着色效果”,并给它提供一个光源,光的颜色为绿色。 self.effect = [[[GLKBaseEffect alloc]init]autorelease]; self.effect.light0.enabled = GL_TRUE; self.effect.light0.diffuseColor = GLKVector4Make(0.0f, 1.0f, 0.0f, 1.0f);

2、 运行。现在应该是粉红色屏幕了(目前场景仍是空的),说明初始化过程没问题

四、 将项点数据写入能用的顶点属性存储区

1、 写入过程 首先将数据保存进GUP的一个缓冲区中,然后再按一定规则,将数据取出,复制到各个通用顶点属性中。

注:如果顶点数据只有一种类型(如单纯的位置坐标),换言之,在读数据时,不需要确定第一个数据的内存位置(总是从0开始),则不必事先保存进缓冲区。

2、 顶点数组保存进缓冲区 // 声明一个缓冲区的标识(GLuint类型)让OpenGL自动分配一个缓冲区并且返回这个标识的值.绑定这个缓冲区到当前“Context”.最后,将我们前面预先定义的顶点数据“squareVertexData”复制进这个缓冲区中。

// 注:参数“GL_STATIC_DRAW”,它表示此缓冲区内容只能被修改一次,但可以无限次读取。 GLuint buffer; glGenBuffers(1, &buffer); glBindBuffer(GL_ARRAY_BUFFER, buffer); glBufferData(GL_ARRAY_BUFFER, sizeof(squareVertexData), squareVertexData, GL_STATIC_DRAW);

3、将缓冲区的数据复制进能用顶点属性中 glEnableVertexAttribArray(GLKVertexAttribPosition); glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, 4*8, (char*)NULL + 0); 首先,激活顶点属性(默认它的关闭的)。

“GLKVertexAttribPosition”是顶点属性集中“位置Position”属性的索引。 顶点属性集中包含五种属性:位置、法线、颜色、纹理0,纹理1。 它们的索引值是0到4。 激活后,接下来使用“glVertexAttribPointer”方法填充数据。

如何在Linux下使用OpenGL

前提是:1.配置好了Ubuntu下的c++环境,gcc以及g++可用。2.使用eclipse for c+做OpenGL开发 步骤一:在ubuntu终端下运行以下命令,安装opengl所需要的库文件$ sudo apt-get install build-essential$ sudo apt-get install freeglut3-dev 步骤二: 运行一下opengl实例,测试配置的环境是否安装成功在eclipse下新建一个工程文件,假设我们命名为Test,在工程Test里面新建一个C++源代码文件,这里我们把它命名为main.cpp,在main.cpp文件中打入一下代码 #includevoid init();void display(); int main(int argc, char* argv[]){ glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB |GLUT_SINGLE); glutInitWindowPosition(0, 0); glutInitWindowSize(300, 300); glutCreateWindow("OpenGL 3D View"); init(); glutDisplayFunc(display); glutMainLoop(); return 0;} void init(){ glClearColor(0.0, 0.0, 0.0, 0.0); glMatrixMode(GL_PROJECTION); glOrtho(-5, 5, -5, 5, 5, 15); glMatrixMode(GL_MODELVIEW); gluLookAt(0, 0, 10, 0, 0, 0, 0, 1, 0);} void display(){ glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0, 0, 0); glutWireTeapot(3); glFlush();}右击工程文件名Test->点击属性(Properties)->C/C++Bulid->Settings->GCC C++Linker->Libraries,在这个窗口中添加几个个库,分别为GLU,glut,GL,点击OK。

如果还想使用opencv,在这里还加入cv,cxcore,highgui等库文件,根据自己的需要来定同时在GCC C++ Compiler->Includes下的incudepath中添加路径/usr/include/GL如果还想使用opencv中的库,那么加入opencv的路径,一般是/usr/include/opencv 运行以上程序,会显示一个茶壶形状的opengl运行结果

以下为关联文档:

C中如何调用第三方控件CsGL开发OpenGL(1) 链接OpenGL libraries:在Visual C++中先单击Project,再单击Settings,再找到Link单击,最后在Object/library modules 的最前面加上opengl32.lib Glut32.lib Glaux.lib glu32....

vc 6 0下 opengl系统开发环境文字嘿嘿,我帮你凑一章出来第三章 开发环境及相关技术的介绍3.1 C语言特点 1. C是中级语言。它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以像汇编语言一...

如何在Linux下使用OpenGL C开发前提是: 1.配置好了Ubuntu下的c++环境,gcc以及g++可用。 2.使用eclipse for c+做OpenGL开发 步骤一: 在ubuntu终端下运行以下命令,安装opengl所需要的库文件 $ sudo apt-get ins...

Opengl在C 6 0中怎么运行因为你的程序中用了“gl...”而你并没有使用#include <GL/glut.h&gt;如果哦你要使用#include <GL/glut.h&gt;就必须安装GLUT工具包。步骤如下: 1、下载GLUT工具包,将下载的压缩...

Android开发使用WebView组件显示网页在网中点击内容却打如果希望点击链接由自己处理,而不是新开Android的系统browser中响应该链接。给WebView加一个事件监听对象(WebViewClient)并重写其中的一些方法:shouldOverrideUrlLoading:对网页...

ios开发 uiwebview怎么清除内存AViewController中点击UITableViewCell推出BViewControllerBViewController 中有UIWebView希望在返回AViewController中的时候BViewController中的所有清空我试着在BViewCon...

iOS开发过程中怎么知道当前视图控制器是怎么来的在 iOS 5 的时候 UIViewController 就已经提供了四个方法来满足你的需求: /* These four methods can be used in a view controller's appearance callbacks to determine i...

Android开发中怎么使用自定义字体1、Android系统默认支持三种字体,,分别为:“sans”, “serif”, “monospace2、在Android中可以引入其他字体 。 Android:layout_width="fill_parent" Android:layout_height="fil...

ios app开发一般怎么传值ios app开发传值的方法很多,具体如下:1: 属性传值第一步需要用到什么类型就定义什么样的属性 从上一个页面到一个页面的选中方法里面将要传的值传到来(上一个页面)备注:这种方法只...

推荐阅读
图文推荐