标签: glkit

在GLKit中使用GL_POINTS(iOS 5)

使用OpenGL的新功能,我使用GL_LINE_LOOP在iOS 5上使用GLKit成功显示行,但使用GL_POINTS显示点给我带来了麻烦.具体来说,除了单个像素,我无法显示任何内容.我在网上搜索没有成功,所以我希望有人可以指出我缺少的东西.

这是我的测试代码......

//positions and colors, vertices and indices...
typedef struct {
    float Position[2];
    float Color[4];
} Vertex;

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

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


@interface AppViewController() {
    GLuint _vertexBuffer;
    GLuint _indexBuffer;
}

...
//some unrelated properties, the @implementation and other methods
...

- (void)viewDidLoad {
    [super …
Run Code Online (Sandbox Code Playgroud)

ios opengl-es-2.0 glkit

2
推荐指数
1
解决办法
3650
查看次数

在UIViewController中集成UIView和GLKView

我在iOS SDK 5.1中使用Xcode 4.3.2.

我想在我的故事板中创建一个视图控制器,它在半屏幕上包含GLKView,在另一半包含Buttons + Text.

我在UIViewController中尝试了put,但是可以让它工作.

有任何想法吗?文章?教程?

iphone uiviewcontroller ios glkit

2
推荐指数
1
解决办法
2787
查看次数

将GLKView与UIViewController一起使用

我想用OpenGL做一些简单的图像处理,所以我开始使用GLKView.由于我不需要每隔几秒刷新一次视图,我没有使用GLKViewController和而是使用普通的UIViewController子类.

我的问题是,我只是将viewController的视图作为一个GLKView或者GLKView作为视图控制器视图的子视图添加.由于我UISlider也在视图中添加了一个,我认为后者似乎更好,但我不确定.我还需要setNeedsDisplay在某些情况下调用GLKView.

iphone opengl-es ios glkit

2
推荐指数
1
解决办法
6904
查看次数

glDrawElements没有显示任何内容

我正在尝试在iOS上学习OpenGL.我正在学习本教程.

http://www.raywenderlich.com/5235/beginning-opengl-es-2-0-with-glkit-part-2

我确定我会仔细按照步骤操作,但是当我走到尽头时,屏幕上看不到任何形状.

https://gist.github.com/seanhess/5356598

我确实看到背景颜色在变化,所以OpenGL一般都在工作.只是对glDrawElements的调用似乎没有做任何事情.

glDrawElements(GL_TRIANGLES, sizeof(Indices)/sizeof(Indices[0]), GL_UNSIGNED_BYTE, 0);
Run Code Online (Sandbox Code Playgroud)

他有一些演示代码,但它与你在教程中编写的代码不一样,我想了解为什么在粘贴之前这不起作用.

应该在哪里绘制GLKBaseEffect?我看不出我们是如何使用它的.

opengl-es objective-c ios opengl-es-2.0 glkit

2
推荐指数
1
解决办法
1228
查看次数

将C++ OpenGL从Windows移植到mac.如何处理GLKMatrix4MakePerspective?

我正在尝试移植一个使用SFML和OpenGL的c ++程序,我将其从Windows写入Mac OS X.我正在使用g ++在两个平台上进行编译.

这是我目前用于计算投影矩阵的代码:

void perspectiveCalculate (int width, int height) {
    // Prevent A Divide By Zero
    if (height<1) height=1;
    if (width<1)  width=1;
    glViewport(0, 0, width, height); // Reset The Current Viewport
    glMatrixMode(GL_PROJECTION);    // Select The Projection Matrix
    glLoadIdentity();               // Reset The Projection Matrix
    //field of vision , width , height , near clipping , far clipping
    //and calculate The Aspect Ratio Of The Window
    gluPerspective(45.0f, (GLfloat)width/(GLfloat)height, 0.1f, 1000.0f);
    glMatrixMode(GL_MODELVIEW);     // Select The Modelview Matrix
    glLoadIdentity();               // Reset …
Run Code Online (Sandbox Code Playgroud)

c++ opengl glkit

2
推荐指数
1
解决办法
1234
查看次数

裁剪UIImage以与GLKTextureLoader一起使用

我试图从UIImage中裁剪一个区域以与GLKTextureLoader一起使用.我可以使用UIImage直接设置纹理,如下所示:

- (void)setTextureImage:(UIImage *)image
{
    NSError *error;

    texture = [GLKTextureLoader textureWithCGImage:image.CGImage options:nil error:&error];

    if(error)
    {
        NSLog(@"Texture Error:%@", error);
    } else {
        self.textureCoordinates[0] = GLKVector2Make(1.0f, 1.0f);
        self.textureCoordinates[1] = GLKVector2Make(1.0f, 0);
        self.textureCoordinates[2] = GLKVector2Make(0, 0);
        self.textureCoordinates[3] = GLKVector2Make(0, 1.0f);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试以这种方式裁剪图像:

- (void)setTextureImage:(UIImage *)image
{
    NSError *error;

    CGImageRef imageRef = CGImageCreateWithImageInRect(image.CGImage, CGRectMake(0.0, 64.0f, 64.0f, 64.0f));
    texture = [GLKTextureLoader textureWithCGImage:imageRef options:nil error:&error];

    if(error)
    {
        NSLog(@"[SF] Texture Error:%@", error);
    } else {
        self.textureCoordinates[0] = GLKVector2Make(1.0f, 1.0f);
        self.textureCoordinates[1] = GLKVector2Make(1.0f, 0);
        self.textureCoordinates[2] = GLKVector2Make(0, …
Run Code Online (Sandbox Code Playgroud)

uiimage cgimage ios cgimageref glkit

1
推荐指数
1
解决办法
3414
查看次数

OpenGL ES 2.0 GLKit画一条线

我试图用OpenGL ES 2.0 GLKit绘制一条线.当我运行以下代码并使用OpenGL ES Analyzer时,我收到以下错误:

"使用不存在的程序"glDrawArrays(GL_LINE_STRIP,0,4)

"GL错误:无效操作"GL_INVALID_OPERATION < - glVertexPointer(2,GL_FLOAT,0,NULL)GL_INVALID_OPERATION < - glEnableClientState(GL_VERTEX_ARRAY)

这是我的代码:

#import "GLDrawingView.h"


const float data[] = {0.0f, 1.0f, 0.0f, 0.0f, 1.0f, -0.0f, 0.0f, 1.0f};



@interface GLDrawingView () {
    GLuint lineVBO;
}

@end

@implementation GLDrawingView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        [EAGLContext setCurrentContext:self.context];           
        glGenBuffers(1, &lineVBO);
        glBindBuffer(GL_ARRAY_BUFFER, lineVBO);
        glBufferData(GL_ARRAY_BUFFER, sizeof(data), data, GL_STATIC_DRAW);
    }
    return self;
}

- (void)drawRect:(CGRect)rect
{
    glVertexPointer(2, GL_FLOAT, 0, NULL);   
    glEnableClientState(GL_VERTEX_ARRAY);
    glDrawArrays(GL_LINE_STRIP, 0, sizeof(data) / sizeof(float) / 2);
}

@end
Run Code Online (Sandbox Code Playgroud)

vertex-buffer ios opengl-es-2.0 glkit

1
推荐指数
1
解决办法
2556
查看次数

GLKit/OpenGLES 2.0:如何排序基元?

我想用 GLKit 绘制半透明图元。我已经通过禁用深度测试glDisable(GL_DEPTH_TEST)并通过启用混合

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
Run Code Online (Sandbox Code Playgroud)

现在,对于较大的 alpha 值(例如 0.9),我需要首先绘制最远的三角形,这样它们就不会出现在较近的三角形上方glBlendFunc 的文档中也说明了这一点:

透明度最好使用混合函数(GL_SRC_ALPHA、GL_ONE_MINUS_SRC_ALPHA)来实现,其中图元从最远到最近排序。请注意,此透明度计算不需要帧缓冲区中存在 alpha 位平面

在OpenGL 透明度常见问题解答中:

在应用程序中使用深度缓冲时,您需要注意渲染图元的顺序。需要首先渲染完全不透明的图元,然后按从后到前的顺序渲染部分不透明的图元。如果不按此顺序渲染图元,则通过部分不透明图元可见的图元可能会完全失去深度测试。

但由于视角可以改变(当我改变渲染效果时modelViewMatrix),从远到近的顺序取决于当前的视角。

有没有办法让 OpenGL 以正确的顺序自动渲染我的图元,如果没有,最好的方法是什么?我认为计算 z 位置(取决于当前视角)并为每帧订购几千个三角形(或者更准确地说,每次视角变化时,可以是每帧)的成本太高,特别是当我需要为每一帧将此订单推送到 GPU 时。

请注意,我不关心使用纹理(只是彩色顶点)。

geometry transparency opengl-es opengl-es-2.0 glkit

1
推荐指数
1
解决办法
781
查看次数

没有GLKit的OpenGL ES 2

我想制作一个使用OpenGL ES 2.0的应用程序.我可以在不使用GLKit的情况下执行此操作,因为我想将其部署到iOS 4.3吗?我找不到任何关于此的参考.是否可以在没有GLKit的情况下使用着色器等?

谢谢

opengl-es ios opengl-es-2.0 glkit

1
推荐指数
1
解决办法
1903
查看次数

为什么我需要在 drawInRect 中调用 glClear?

我有一个简单的 GLKViewController,我将屏幕设为白色:

- (void)viewDidLoad {
    [super viewDidLoad];

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

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

    [EAGLContext setCurrentContext:self.context];

    glClearColor(1, 1, 1, 1);
    glClear(GL_COLOR_BUFFER_BIT);
}

- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect {
}
Run Code Online (Sandbox Code Playgroud)

然而,这不起作用。

但是,如果我将 glClear 调用移动到 drawInRect,则它可以工作:

- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect {
    glClear(GL_COLOR_BUFFER_BIT);
}
Run Code Online (Sandbox Code Playgroud)

这是为什么?为什么必须在 drawInRect 中调用 glClear 而不是 glClearColor ?

iphone opengl-es ios glkit

1
推荐指数
1
解决办法
1198
查看次数

OpenGL ES透明度不起作用,而是只是与背景混合

所以我在手机上设置了一个简单的模拟.目标是在屏幕上显示带有各种透明度的红色,白色和蓝色圆圈.我有大部分工作,除了一件事,而透明度的工作,唯一的混合发生在黑色背景.结果,中心的圆圈显示为深红色,而不是在其下方显示白色圆圈.我究竟做错了什么?

注意我正在使用正交2d投影矩阵.所有对象z位置都相同,并以特定顺序呈现.

UH OH

以下是我如何设置透明度的方法:

glEnable(GLenum(GL_DEPTH_TEST))
glEnable(GLenum(GL_POINT_SIZE));
glEnable(GLenum(GL_BLEND))
glBlendFunc(GLenum(GL_SRC_ALPHA), GLenum(GL_ONE_MINUS_SRC_ALPHA))
glEnable(GLenum(GL_POINT_SMOOTH))
//Note some of these things aren't compatible with OpenGL-es but they can hurt right?
Run Code Online (Sandbox Code Playgroud)

这是片段着色器:

precision mediump float;
varying vec4 outColor;
varying vec3 center;
varying float o_width;
varying float o_height;
varying float o_pointSize;
void main()
{
    vec4 fc = gl_FragCoord;
    vec3 fp = vec3(fc);


    vec2 circCoord = 2.0 * gl_PointCoord - 1.0;


    if (dot(circCoord, circCoord) > 1.0) {
        discard;
    }

    gl_FragColor = outColor;//colorOut;
}
Run Code Online (Sandbox Code Playgroud)

以下是我将每个圆圈传递给着色器的方法:

func drawParticle(part: Particle,color_loc: GLint, size_loc: GLint) …
Run Code Online (Sandbox Code Playgroud)

opengl-es opengl-es-2.0 glkit swift

0
推荐指数
1
解决办法
347
查看次数