2012-06-17 5 views
0

나는 도니의 예와 비슷한 아주 간단한 OpenGL은 ES 예를 : http://nehe.gamedev.net/tutorial/ios_lesson_02__first_triangle/50001/ 세 가지 색상으로 가득 삼각형 위 그림과 같이잘못된 색상 구현의 OpenGL ES2 - IOS

- 그린, 블루, 레드. 대신 내 애플 리케이션에서 나는 항상 붉은 색으로 채워진 오른쪽 하단 주위에 녹색으로 채워진 상단 정점 주위의 작은 영역과 검은 색으로 채워진 거의 삼각형을 얻는다 ... 그리고 전혀 파란색이 없다.

첫 번째 질문은 다음과 같습니다. 왜 내 삼각형 중간에 색상이 보간되지 않으며 왜 파란색이 전혀 보이지 않습니까?

내 색상 배열을 변경하면 아무런 영향이 없습니다 (예 : 삼각형을 흰색으로 만들려고 할 때 색상이 변하지 않습니다 ... 그 동안 배열에서 Z 좌표를 변경하면 파랑 색을 볼 수 있습니다.

두 번째 질문은 다음과 같습니다. 색상이 변경되면 아무런 변화가없고 위치가 변경되면 색상이 변경되는 이유는 무엇입니까?

어딘가에 나는 어리석은 실수를 저질렀지 만 나는 그것을 잡지 못합니다.

const float colors[] = { // this does not work, triangle still black-green-red 
    1.0, 1.0, 1.0, 1.0, 
    1.0, 1.0, 1.0, 1.0, 
    1.0, 1.0, 1.0, 1.0 
}; 

const float positions[] = { // if i change 3rd index to 1.0 then i will see blue color 
    -0.5, -0.5, 0.0, 1.0, 
    0.0, 0.5, 0.0, 1.0, 
    0.5, -0.5, 0.0, 1.0 
}; 

이 VBO입니다 :

는 정점/색상 배열입니다

- (BOOL)setupVBO 
{ 
    BOOL success = YES; 

    glGenBuffers(1, &_positionBuffer); 
    glBindBuffer(GL_ARRAY_BUFFER, _positionBuffer); 
    glBufferData(
     GL_ARRAY_BUFFER, 
     sizeof(positions) * sizeof(float), 
     &positions[0], 
     GL_STATIC_DRAW); 

    glGenBuffers(1, &_colorBuffer); 
    glBindBuffer(GL_ARRAY_BUFFER, _colorBuffer); 
    glBufferData(
     GL_ARRAY_BUFFER, 
     sizeof(colors) * sizeof(float), 
     &colors[0], 
     GL_STATIC_DRAW); 

    return success; 
} 

렌더링 : 어떤 조언을

- (void)render:(CADisplayLink*)displayLink 
{ 
    glClearColor(0.5, 0.5, 0.5, 1.0); 
    glClear(GL_COLOR_BUFFER_BIT); 

    glBindBuffer(GL_ARRAY_BUFFER, _positionBuffer); 
    glVertexAttribPointer(_positionSlot, 4, GL_FLOAT, GL_FALSE, 0, NULL); 

    glBindBuffer(GL_ARRAY_BUFFER, _colorRenderBuffer); 
    glVertexAttribPointer(_colorSlot, 4, GL_FLOAT, GL_FALSE, 0, NULL); 

    glDrawArrays(GL_TRIANGLES, 0, 3); 

    [_glContext presentRenderbuffer:GL_RENDERBUFFER]; 
} 

감사합니다 ...

+0

내가 glColor3f 또는 glColor4f 또는 정말 다른 쉐이더 루틴 등의 호출을 볼 수 없습니다하지 않는다 희망 ... – trumpetlicks

+0

OpenGL ES1 기능을 사용하도록 권장하고 대신 ES2 API를 사용하고 있습니다. – Anonymous

답변

0

확인을 , 나는 문제가 어디 있는지 발견 :

Open GL에서 초보자인데 예제 코드를 복제하고 일부 변수의 이름을 바꿨습니다 ... 그리고 ColorBuffer (VBO 색상, 그리기 개체의 실제 색상 데이터)라는 이름을 ColorRenderBuffer 변수 (GL 실제 색상 데이터를 처리하는 메모리의 장소)

바보 같은 실수와 나는 아무도 같은 :