Как мы назначаем значения GLFloat, чтобы нарисовать линию в приложении iPhone? - PullRequest
1 голос
/ 24 марта 2012

Наконец, Mr.Chris помог мне нарисовать линию, используя GLKview и drawInRect: метод. Работает нормально. Но мне нужны пояснения,

  1. Как мы присваиваем значения GLFloat?

    const GLfloat line[] = 
    {
        -1.0f, -1.5f, //point A : What is -1.0f and -1.5f ? These are x and y or something.
        1.5f, -1.0f, //point B : What is 1.5f and -1.0f ? These are x and y or something. 
    };
    

Потому что я путаю, чтобы установить значения здесь. Как это взять х, у или длина? Если это глупый вопрос, примите мои извинения. Пожалуйста, проясните мои сомнения по этому поводу.

  1. Как установить фоновое изображение для GLKViewController? У меня есть изображение для установки фона, но я не знаю, где мне нужно это установить?

Пример кода ViewDidLoad

    - (void)viewDidLoad
        {
            [super viewDidLoad];
            self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"GameDesign03.png"]];

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

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

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

        [self setupGL]; 
    }

- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect
{
    glClearColor(0.65f, 0.65f, 0.65f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    [self.effect prepareToDraw];  // Prepare the effect for rendering

    const GLfloat line[]=
    {
        -1.0f, -1.5f, 
         1.5f, -1.0f
    };


    GLuint bufferObjectNameArray; //Create an handle for a buffer object array

    glGenBuffers(1, &bufferObjectNameArray); //Have OpenGL generate a buffer name and store it in the buffer object array

    glBindBuffer(GL_ARRAY_BUFFER, bufferObjectNameArray); //Bind the buffer object array to the GL_ARRAY_BUFFER target buffer

    //Send the line data over to the target buffer in GPU RAM
    glBufferData(GL_ARRAY_BUFFER, sizeof(line), line, GL_STATIC_DRAW);

    glEnableVertexAttribArray(GLKVertexAttribPosition); //Enable vertex data to be fed down the graphics pipeline to be drawn

    glVertexAttribPointer(GLKVertexAttribPosition, 2, GL_FLOAT, GL_FALSE, 2, NULL); //Specify how the GPU looks up the data 

    glDrawArrays(GL_LINES, 0, 2); // render 

 }

Пожалуйста, помогите в этом. Заранее спасибо.

1 Ответ

0 голосов
/ 24 марта 2012

Итак, чтобы ответить на ваш первый вопрос, в этой строке:

glVertexAttribPointer(GLKVertexAttribPosition, 2, GL_FLOAT, GL_FALSE, 2, NULL); //Specify how the GPU looks up the data 

вы устанавливаете аргумент size равным 2, который сообщает OpenGL, что на атрибут вершины приходится 2 компонента.Они являются конечными точками линий.

И чтобы ответить на ваш второй вопрос, вам нужно нарисовать фоновое изображение, прежде чем рисовать линии, как упоминалось в моем комментарии выше.

...