OpenGL: ES на iPhone - Размеры Texture2D и вопросы по отображению - PullRequest
1 голос
/ 14 апреля 2011

У меня проблемы с Texture2D, и я хотел бы понять, как его лучше использовать.

Я взял класс Crashlander Texture2D из здесь и проект OpenGL по умолчанию в XCode 4, заставив его загрузить OpenGL ES1.1

Во-первых, концептуальный вопрос. Размер метода инициализации Texture2D явно равен размеру OpenGL, но какое отношение к миру OpenGL имеет параметр fontSize?

Во-вторых, отладка. Результат, который я получаю из приведенного ниже кода, это черный (или любой другой цвет, который я установил в glColor) квадрат, где должен быть текст.

Вот изменения, которые я сделал в своем коде:

- (void)awakeFromNib
{
    EAGLContext *aContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1];

    if (!aContext) {
        aContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1];
    }

    self.labelAtTheTop = [[[Texture2D alloc] initWithString:@"Some Text" dimensions:CGSizeMake(1, 1) alignment:UITextAlignmentLeft fontName:@"Helvetica" fontSize:14.0f] autorelease];

    if (!aContext)
        NSLog(@"Failed to create ES context");
    else if (![EAGLContext setCurrentContext:aContext])
        NSLog(@"Failed to set ES context current");

    self.context = aContext;
    [aContext release];

    [(EAGLView *)self.view setContext:context];
    [(EAGLView *)self.view setFramebuffer];

    animating = FALSE;
    animationFrameInterval = 1;
    self.displayLink = nil;
}

- (void)drawFrame
{
    [(EAGLView *)self.view setFramebuffer];

    // Replace the implementation of this method to do your own custom drawing.

    glClearColor(0.5f, 0.5f, 0.5f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    glEnableClientState(GL_TEXTURE_COORD_ARRAY);
    glEnableClientState(GL_VERTEX_ARRAY);
    glEnable(GL_TEXTURE_2D);
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    glColor4f(0.0f, 0.0f, 0.0f, 1.0f);
    glPushMatrix();
    glLoadIdentity();
    [self.labelAtTheTop drawAtPoint:CGPointMake(0, 0)];
    glPopMatrix();
    glDisable(GL_COLOR_MATERIAL);
    // Disable modes so they don't interfere with other parts of the program
    glDisableClientState(GL_TEXTURE_COORD_ARRAY);
    glDisableClientState(GL_VERTEX_ARRAY);
    glDisable(GL_TEXTURE_2D);
    glDisable(GL_BLEND);                


    [(EAGLView *)self.view presentFramebuffer];


}

1 Ответ

1 голос
/ 14 апреля 2011

Crashlander - это действительно старая кодовая база, поэтому я бы посоветовал ее избегать.Для iPhone есть отличный 2D движок под названием Cocos2D http://www.cocos2d -iphone.org / .Что касается кода, попробуйте комментировать glDisable(GL_COLOR_MATERIAL); плюс glColor4f(0,0,0,1); на самом деле представляет черный цвет, попробуйте комментировать это тоже.Я думаю, fontSize - это размер шрифта в точках экрана.

[EDIT]

Если вы хотите узнать что-нибудь об OpenGLES, вот хорошее вступительное руководство http://iphonedevelopment.blogspot.com/2009/05/opengl-es-from-ground-up-table-of.html

...