- 浏览: 761408 次
- 性别:
- 来自: 天堂
文章分类
最新评论
-
xiaozhao-521:
呀呀呀呀呀呀呀
RequestTest222 -
Andy_hyh:
打扰了,问下openmeeting源码可以运行起来吗?
Openmeetings安装 详细步骤 -
qindongliang1922:
擦,现在还行么,厉害
北京免费吃饭的地方 -
minixx77:
...
Openmeetings安装 详细步骤 -
wwwqqqiang:
喜欢楼主分享问题的方式,有思想
UIView 和 CALayer的那点事
#import <OpenGLES/EAGL.h>
#import <OpenGLES/ES1/gl.h>
#import <OpenGLES/ES1/glext.h>和
#import <OpenGLES/EAGLDrawable.h>
#import <QuartzCore/QuartzCore.h>
然后必须重载以下函数:
+ (Class)layerClass;
- (void)layoutSubviews;
下面是函数内容:
// You must implement this另外还使用到了两重要函数:
+ (Class)layerClass {
return [CAEAGLLayer class];
}
- (void)layoutSubviews {
[EAGLContext setCurrentContext:context];
[self destroyFramebuffer];
[self createFramebuffer];
[self drawView];
}
- (BOOL) createFramebuffer;// 创建桢缓冲区
- (void) destroyFramebuffer;// 销毁桢缓冲区
- (BOOL)createFramebuffer {
glGenFramebuffersOES(1, &viewFramebuffer);
glGenRenderbuffersOES(1, &viewRenderbuffer);
glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
[context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:(CAEAGLLayer*)self.layer];
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, viewRenderbuffer);
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth);
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight);
if (USE_DEPTH_BUFFER) {
glGenRenderbuffersOES(1, &depthRenderbuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, depthRenderbuffer);
glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT16_OES, backingWidth, backingHeight);
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, depthRenderbuffer);
}
if(glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES) != GL_FRAMEBUFFER_COMPLETE_OES) {
NSLog(@"failed to make complete framebuffer object %x", glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES));
return NO;
}
return YES;
}
- (void)destroyFramebuffer {
glDeleteFramebuffersOES(1, &viewFramebuffer);
viewFramebuffer = 0;
glDeleteRenderbuffersOES(1, &viewRenderbuffer);
viewRenderbuffer = 0;
if(depthRenderbuffer) {
glDeleteRenderbuffersOES(1, &depthRenderbuffer);
depthRenderbuffer = 0;
}
}
另外,我们还忘了初始化是怎么弄的,EAGLView文件内容是存在了nib文件里面,所以我们用:initWithCode初始化如下:
//The GL view is stored in the nib file. When it's unarchived it's sent -initWithCoder:
- (id)initWithCoder:(NSCoder*)coder {
if ((self = [super initWithCoder:coder])) { // 重载
// Get the layer
CAEAGLLayer *eaglLayer = (CAEAGLLayer *)self.layer;
eaglLayer.opaque = YES; // 显示设置不透明
// 属性:(缓存颜色格式:kEAGLColorFormatRGBA8)
eaglLayer.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:NO], kEAGLDrawablePropertyRetainedBacking, kEAGLColorFormatRGBA8, kEAGLDrawablePropertyColorFormat, nil];
// 调用initWithAPI初始化 EAGLContext *context;
context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1];
// 设为当前画布
if (!context || ![EAGLContext setCurrentContext:context]) {
[self release];
return nil;
}
// 时间间隔
animationInterval = 1.0 / 60.0;
}
return self;
}
最终,我们要描绘一个彩色的方块:
使用到函数 : - (void)drawView;
- (void)drawView {
// Replace the implementation of this method to do your own custom drawing
const GLfloat squareVertices[] = { //顶点数据
-0.5f, -0.5f,
0.5f, -0.5f,
-0.5f, 0.5f,
0.5f, 0.5f,
};
const GLubyte squareColors[] = { // 颜色数据
255, 255, 0, 255,
0, 255, 255, 255,
0, 0, 0, 0,
255, 0, 255, 255,
};
// 设为当前画布
[EAGLContext setCurrentContext:context];
// 绑定桢缓冲区
glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
// 设置视图窗口大小
glViewport(0, 0, backingWidth, backingHeight);
// 投影变换
glMatrixMode(GL_PROJECTION);
glLoadIdentity(); // 设置为单位矩阵
glOrthof(-1.0f, 1.0f, -1.5f, 1.5f, -1.0f, 1.0f); //正投影,创建一个正交平行的可视空间
glMatrixMode(GL_MODELVIEW); // 模型变换
glRotatef(3.0f, 0.0f, 0.0f, 1.0f); // 围绕x轴旋转
glClearColor(0.5f, 0.5f, 0.5f, 1.0f); // 清屏颜色
glClear(GL_COLOR_BUFFER_BIT); // 清除颜色缓冲区
glVertexPointer(2, GL_FLOAT, 0, squareVertices); // 指定顶点数据指针
glEnableClientState(GL_VERTEX_ARRAY); // 开启顶点数组
glColorPointer(4, GL_UNSIGNED_BYTE, 0, squareColors); // 指定颜色数据数组指针
glEnableClientState(GL_COLOR_ARRAY); // 开启颜色数组
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); // 解引用一个数组元素序列,描绘
// 绑定到渲染缓冲区
glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
[context presentRenderbuffer:GL_RENDERBUFFER_OES]; // 渲染到设备
}
到此从建立接口到显示就这样完成了,另外在动态渲染的时候用到了一个定时器NSTimer,以下是它的方法:(这里不详细介绍)
- (void)startAnimation {
self.animationTimer = [NSTimer scheduledTimerWithTimeInterval:animationInterval target:self selector:@selector(drawView) userInfo:nil repeats:YES];
}
- (void)stopAnimation {
self.animationTimer = nil;
}
- (void)setAnimationTimer:(NSTimer *)newTimer {
[animationTimer invalidate];
animationTimer = newTimer;
}
- (void)setAnimationInterval:(NSTimeInterval)interval {
animationInterval = interval;
if (animationTimer) {
[self stopAnimation];
[self startAnimation];
}
}
在以后文章里面会建立一个EAGLView类,它的功能只是建立UIView到EAGL的接口,所以以后需要3D视图的类都可以通过继承它来完成,就像一个接口一样使用,这次就写到这.有的地方还不够详细,以后碰到了再介绍...(待续)
发表评论
-
iOS 自定义UIActionSheet
2012-12-18 16:07 16363一:模态视图 UIActi ... -
UIView 和 CALayer的那点事
2012-11-17 23:51 30586UIView 和 CALayer的那点事 (1 ... -
iOS Open Source : Popover API for iPhone
2012-01-20 15:02 1889http://iphonedevelopertips.com/ ... -
ios 任务、线程、定时器
2011-12-26 18:09 7964一:operations(任务) cocoa提供了三种 ... -
ios url缓存策略——NSURLCache、 NSURLRequest
2011-12-26 17:09 24300一:url 缓存策略 NSURLRequest ... -
ios NSInvocation简单使用
2011-12-22 16:39 6306在ios直接调用某个对象的消息是方法有两种: 一:perfo ... -
iphone 对Web Services的三种请求方式soap get post
2011-11-09 10:57 6358一:Using SO AP 1.1 POST / ... -
sdk3.2手势实例
2011-11-09 10:11 1697#import <UIKit/UIKit.h>@i ... -
关于iphone 利用hpple解析html的问题
2011-08-04 18:28 2161最近在用happe解析html中的图片。有个翻页操作,如果请 ... -
iphone hpple 解析html,xml
2011-07-19 16:21 2699使用Objective-C解析HTML或者XML,系统自带有两 ... -
激活 iPhone通过 GPRS 连接服务器功能的代码
2011-05-13 15:14 1602如果您的 iPhone 应用里含有连接服务器的功能,也许会遇到 ... -
address book api 图型
2011-04-28 15:51 1093最近要搞地址簿了,整理一下 -
[OmniGraffle]iPhone app原型制作工具
2011-04-06 17:35 3903在写程序之前,我们通常需要做一些mockup出来(不知道款爷有 ... -
自定义uislider 样式
2011-04-04 21:28 3780UIImage *stetchLeftTrack= [[UII ... -
iphone 下AsyncSocket网络库编程
2011-04-02 21:04 7581iphone的标准推荐CFNetwork ... -
进阶AlertView运用 - 登入设计
2011-04-01 17:52 2985说明:示范如何利用AlertView来制作系统登入的介面程式碼 ... -
iPad UIPopoverController弹出窗口的位置和坐标
2011-04-01 17:42 1950优化规则: TodoViewControlle ... -
iPhone系统自动化测试
2011-04-01 17:39 2566首先mac系统是必备的2 安装iPhone SD ... -
iphone上面编写具有root权限的程序
2011-04-01 17:31 6232正常途径下, 我们编写的程序发布在App store上, 使用 ... -
聊天。。。。。
2011-04-01 17:13 1045是得分手段
相关推荐
高度可定制的经典Unity检查器界面GO Map是最简单的地图插件。选择各种各样的例子,以充分了解GO地图功能,并建立每一个演示场景在您的智能手机上只要几次点击就可以使用真正的GPS位置.若要商用,请前往Unity官方资源...
IE3D注册机-IE3D是一个基于全波分析的矩量法电磁场仿真工具,可以解决多层介质环境下的三维金属结构的电流分布问题。它是通过各界面的边界条件和分层媒质中的并矢格林函数建立起积分方程,然后导出阻抗矩阵和激励矩阵...
unity3d界面教材:如果刚刚接触,这个将是你的一个启蒙教程。将讲解界面和如何在三维空间中创建基本的游戏对象。将建立一个角色在地面上行走的简单的场景。
3D Studio MAX(以下简称 MAX)是以 3DS 4.x为基础的升级版本,它以全新的 Windows界面及更强大的功能展示在我们面前。用MAX来制作三维动画就像是当一个大导演——一切的角色、道具、灯光、摄像机、场景(包括如云、...
全书以一个完整(基本)的3D游戏为主线,采用循序渐进的方法,从建立OpenGL图形环境入手,讲解3D基本图形、构图原理;从引入摄像机,建立天空、山地、树木,到3D模型使用和3D动画模型的显示。用鱼骨方式讲解相关知识...
此后出现的立体做图软件,把立体技术又向前推进了一大步,最早出现的立体软件是三立科技公司的3D系列软件,有3DI、3DII、3DIII、3DIV和光栅尺软件,有人修改界面后出现了形形色色的叫法,破解后又改成各家公司自己的...
针对二氧化碳注入地层过程,综述固井结构随流压增加完整性遭受破坏形成渗漏途径的力学影响因素,采用计算机软件FLAC和FLAC3D数值模拟的方法,建立套管-水泥环-地层及其间界面胶结良好情况下的三维模型.给出随孔底套管内...
学OpenGL编3D游戏目录下内容说明 目录 第1 章 OpenGL的程序框架__Windows、OpenGL程序框架的建立。 第2 章 OpenGL的基本图形__在OpenGL图形界面上作一些简单的图形。 第3 章 OpenGL的组合图形__用简单图形来构成两个...
Ignition GUI建立在之上,以提供在开发机器人应用程序(例如3D视图,绘图,仪表板等)时有用的小部件,并且可以在方便的统一界面中一起使用。 Ignition GUI附带了几个可供使用的小部件,并提供了一个可用于添加...
Blender是一款免费软件,可以创建电视广告,使技术的可视化,业务图形,做一些变形,或设计用户界面。您可以轻松建立和管理复杂的环境。 有了Blender后,喜欢3D绘图的玩家们不用花大钱,也可以制作出自己喜爱的...
SketchUp 2015是3d草图设计软件,使用SketchUp Pro,即可从头开始或藉由现有数据建立3D模型。汇入绘图、CAD设计图、照片、空照图像和其他信息,然后使用SketchUp Pro的建模工具,以3D模型展现您的想法。 产品特点 ...
SketchUp 2015是3d草图设计软件,使用SketchUp Pro,即可从头开始或藉由现有数据建立3D模型。汇入绘图、CAD设计图、照片、空照图像和其他信息,然后使用SketchUp Pro的建模工具,以3D模型展现您的想法。 产品特点 ...
IE3D是一个基于全波分析的矩量法电磁场仿真工具,可以解决多层介质环境下的三维金属结构的电流分布问题。它是通过各界面的边界条件和分层媒质中的并矢格林函数建立起积分方程,然后导出阻抗矩阵和激励矩阵,来求得...
matlab中inv的函数代码 这个库是我在学习UBC-GIF的重磁三维反演时候的一些笔记和代码 mark Introduction 整个GravForMedeling3D文件夹是...format_density.m调用了density_add_coordinate.m函数,并且不启动matlab界面
适用于3D打印机的ESP8266 / ESP8285和ESP32固件 请使用Arduino ide 1.8.9+与 要么 请使用Arduino ide 1.8.9+与 要么该固件不仅可以在Wifi和串行之间建立便宜的桥梁,而且还可以通过Web UI配置wifi,监视3D打印机甚至...
修改BUG:矢量动画支持库中的“矢量编辑框”组件在光标位于组件右下角时按右光标键进入下一行会导致显示错误。 10. 修改BUG:矢量动画支持库中的“矢量编辑框”组件在光标位于组件左上角时按左光标键进入前一行...
它只能在单台打印机上使用,并且不能与OctoPrint或Repetier Server等已建立产品的功能匹配。 实际上,这意味着没有用户管理,机载切片,gcode模拟,模型渲染或其他界面幻想。 主要功能是基本的远程文件管理,打印...
安装npm install用户界面运行ui sla npm run ui:start运行ui fdm npm run ui:start-mini建立开发npm run ui:dev建立用户界面rm -fr ./distnpm run ui:build更新翻译用户界面npm run ui:translations
实例98 建立自己的任务栏 实例99 隐藏任务条中的应用程序 实例100 检测cpu的时钟 附录a 窗口类与窗口样式 a.1 窗口类结构 a.2 窗口类样式 a.3 窗口样式分组 附录b mfc中windows公共控件的通知消息 b.1 ...