我正在尝试绘制多个2D对象,并能够在iOS的OpenGL ES中通过触摸移动它们。 我开始了一个关于绘制正方形的教程,但是我不知道如何添加触摸来移动它。 我希望能够加载多个对象并通过触摸在屏幕上移动它们。

#import "HelloGLKitViewController.h"
typedef struct {
float Position[3];
float Color[4];
} Vertex;

const Vertex Vertices[] = {
{{1, -1, 0}, {1, 0, 0, 1}},
{{1, 1, 0}, {0, 1, 0, 1}},
{{-1, 1, 0}, {0, 0, 1, 1}},
{{-1, -1, 0}, {0, 0, 0, 1}}
};

const GLubyte Indices[] = {
0, 1, 2,
2, 3, 0
};

GLuint _vertexBuffer;
GLuint _indexBuffer;


@interface HelloGLKitViewController ()

@property (strong, nonatomic) EAGLContext *context;
@property (strong, nonatomic) GLKBaseEffect *effect;



@end

@implementation HelloGLKitViewController



- (void)viewDidLoad {
[super viewDidLoad];

self.context = [[EAGLContext alloc]     initWithAPI:kEAGLRenderingAPIOpenGLES2];

if (!self.context) {
    NSLog(@"Failed to create ES context");
}

GLKView *view = (GLKView *)self.view;
view.context = self.context;

[self setupGL];
}

- (void)viewDidUnload
{
[super viewDidUnload];

if ([EAGLContext currentContext] == self.context) {
    [EAGLContext setCurrentContext:nil];
}
self.context = nil;

[self tearDownGL];
}

#pragma mark - GLKViewDelegate

- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect {

glClearColor(1.0, 1.0, 1.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT);
[self.effect prepareToDraw];

glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _indexBuffer);

glEnableVertexAttribArray(GLKVertexAttribPosition);
glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (const GLvoid *) offsetof(Vertex, Position));
glEnableVertexAttribArray(GLKVertexAttribColor);
glVertexAttribPointer(GLKVertexAttribColor, 4, GL_FLOAT, GL_FALSE, sizeof(Vertex), (const GLvoid *) offsetof(Vertex, Color));

glDrawElements(GL_TRIANGLES, sizeof(Indices)/sizeof(Indices[0]), GL_UNSIGNED_BYTE, 0);
}

#pragma mark - GLKViewControllerDelegate

- (void)update {


float aspect = fabsf(self.view.bounds.size.width / self.view.bounds.size.height);
GLKMatrix4 projectionMatrix = GLKMatrix4MakePerspective(GLKMathDegreesToRadians(65.0f), aspect, 4.0f, 10.0f);
self.effect.transform.projectionMatrix = projectionMatrix;

GLKMatrix4 modelViewMatrix = GLKMatrix4MakeTranslation(0.0f, 0.0f, -6.0f);
self.effect.transform.modelviewMatrix = modelViewMatrix;
}



- (void)setupGL {

[EAGLContext setCurrentContext:self.context];
self.effect = [[GLKBaseEffect alloc] init];

glGenBuffers(1, &_vertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(Vertices), Vertices, GL_STATIC_DRAW);

glGenBuffers(1, &_indexBuffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _indexBuffer);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(Indices), Indices, GL_STATIC_DRAW);

}

- (void)tearDownGL {

[EAGLContext setCurrentContext:self.context];

glDeleteBuffers(1, &_vertexBuffer);
glDeleteBuffers(1, &_indexBuffer);
self.effect = nil;


}

@end

===============>>#1 票数:0

对于您发布的代码,您需要创建另一个GLKBaseEffect ,并根据收到的触摸独立更新每个矩阵的modelviewMatrix属性。

  ask by iamarnold translate from so

未解决问题?本站智能推荐:

1回复

如何在iPhone Game应用程序中使用OpenGL ES与Animation画一条直线?

iPhone中的OpenGL ES framework非常新。 我开始研究iPhone中的OpenGL ES。 我想在demo iPhone game app draw a straight line with animation 。 用户在屏幕上触摸的地方,我要画线,以动画触碰该方向。
1回复

iOS-如何在限制范围内绘画

我使用扫描线种子填充算法来实现颜色填充功能。 但我不知道该怎么做。 当我的笔落在花中时,我只需画花内的黑色边缘,不要画在头发上。 我试过用: CALayer *layer = [CALayer layer]; layer.contents = (__bridge id)(image
1回复

iOS CGContextDrawImage缩放图像,效率很低

我使用CGContextDrawImage缩放图像,但是当我缩小图像时,效率很低,有什么办法或改变来提高效率。
1回复

我们如何为GLFloat分配值以在iPhone应用程序中画一条线?

最后,克里斯先生帮助我使用GLKview和drawInRect:方法画了一条线。 一切正常。 但是,我需要澄清一下, 我们如何为GLFloat分配值? 因为,我很困惑在这里设置一个值。 如何计算x,y或长度? 如果是愚蠢的问题,请接受我的歉意。 请澄清我对此的疑问。
1回复

如何在iOS中以角度和距离绘制线条

我有一个应用程序,在其中进行一些计算,并基于此应用程序绘制如下所示的导线。 这是导线的图像。 我有AB,BC等距离。 基于此值,我需要绘制上面显示的图像。 我知道如何使用UIBezierPath并使用以下代码画一条线。 但是如何用这种计算得出这一点。 我对此感
1回复

在iOS中绘制加载的UIImage

我有一些问题。 我有一个加载的UIImage,我想: 1 - 在我加载的UIImage上绘制另一张图像 第二步 - 在我加载的UIImage上画一条线(有颜色和粗细) 如果你能想出一些基本的东西,我会非常感激,我还是一个菜鸟:)
1回复

iOS如何在运动的大圆圈中绘制小圆圈限制

我想实现此github项目中所示的效果,但我不想使用SpriteKit来实现这一目的。 因此,我尝试在CircleViiew.m中绘制一个关于Objective-C中CGContextRef的大圆圈。 然后在ViewController中使用圆圈。 但是我不知道如何在大圆
1回复

iOS:使用核心图形绘制“可移动多边形”

我想在Core Graphics中绘制一个UIBerzierPath(例如,具有4个CGPoints的矩形),并更改其位置,也可能更改其大小(例如,较大的宽度,较小的高度),这意味着UIBerzierPath的四个点将更改。 如何获得动画形式的外观变化(使点和边移动到新位置),而不仅仅是绘
1回复

如何使用OpenGL ES在iOS SDK中绘制黑色边缘?

请参阅下面附图,如何在不使用遮蔽的情况下在黑色边缘内进行涂漆[例如 - 如果我们想要在盖子内部绘制,我们需要使用刷子工具填充盖子]。 我们已经使用泛洪填充算法实现了桶工具。 参考[图4]这种类型的图纸是错误的,所以我们只需要在黑色边缘内绘制参考[图像2]和[图像3]。 我们需要
1回复

如何在iOS中实现部分透视效果?

基本上,我想将图像放置在UIView上,而不是用半透明的视图覆盖该图像以使图像模糊,最终将UIButton放置在半透明的视图上,现在我希望图像仅在按钮的框架中清晰显示 。 我怎样才能做到这一点? 谢谢。 一张图片值一千字。