iOS에서 OpenGL을 사용하여 삼각형을 렌더링하려고합니다. 내 환경 설정이 있습니다. 화면의 배경색을 변경할 수 있습니다. 나는 컴파일과 프로그램에 성공적으로 링크 된 기본적인 버텍스와 프래그먼트 쉐이더를 가지고있다. glError()도 오류를보고하지 않습니다.기본 삼각형 셰이더가 렌더링되지 않습니다.
내 삼각형이 렌더링되지 않습니다. 이 같은
I 설정 내 프레임 버퍼와 렌더링 버퍼 :
glGenRenderbuffers(1, &_colorRenderBuffer);
glBindRenderbuffer(GL_RENDERBUFFER, _colorRenderBuffer);
[_context renderbufferStorage:GL_RENDERBUFFER fromDrawable:drawable];
GLuint framebuffer;
glGenFramebuffers(1, &framebuffer);
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
GL_RENDERBUFFER, _colorRenderBuffer);
가 그럼 난 내 삼각형의 세 꼭지점을 정의
_triangleMatrix[0] = -1.0; _triangleMatrix[1] = 0.0;
_triangleMatrix[2] = 0.0; _triangleMatrix[3] = 1.0;
_triangleMatrix[4] = 1.0; _triangleMatrix[5] = 0.0;
내가 만들고 내 쉐이더를 연결합니다. 그런 다음
[self createVertexShader];
[self createFragmentShader];
[self linkProgram];
내가 프로그램을 사용하여 속성 "위치"슬롯을 얻고 활성화 : 나는 어떤 컴파일 또는 링크 오류를 얻을 수 없기 때문에 여기에 전체 코드를 보여 않을거야
glUseProgram(_program);
_position_slot = glGetAttribLocation(_program, "position");
glEnableVertexAttribArray(_position_slot);
이제 VBO를 설치해야합니다. 이것은 내가 가장 확신 할 수없는 부분입니다.
NSString* vshader = \
@"attribute vec2 position; \
void main()\
{\
gl_Position = vec4(position.x, position.y, 0.0, 1.0);\
}";
그리고 조각 쉐이더 :
NSString* fshader = \
@"void main()\
{\
gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\
}";
다음
glClear(GL_COLOR_BUFFER_BIT);
// 1rst attribute buffer : vertices
glVertexAttribPointer(
_position_slot,
2, // size
GL_FLOAT, // type
GL_FALSE, // normalized?
0, // stride
(void*)0 // array buffer offset
);
// Draw the triangle !
glDrawArrays(GL_TRIANGLES, 0, 3); // Starting from vertex 0; 3 vertices total -> 1 triangle
glDisableVertexAttribArray(0);
[_context presentRenderbuffer:GL_RENDERBUFFER];
컴파일 된 버텍스 쉐이더에 대한 코드입니다 : 여기에
glGenBuffers(1, &_vertex_buffer);
glBindBuffer(GL_ARRAY_BUFFER, _vertex_buffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(_triangleMatrix), _triangleMatrix, GL_STATIC_DRAW);
그리고 내 렌더링() 메소드의
그건 기본적으로, 전체 파일에 대한 https://gist.github.com/anonymous/6ed3f8231e76db35921ef260bfa6bf43
내 버텍스 쉐이더가 _triangleMatrix 멤버의 "위치"데이터를받지 못한다는 것을 알 수 있습니다. 따라서 속성이 올바르게 설정되지 않았거나 _triangleMatrix의 데이터 자체가 OpenGL에 의해 읽히지 않습니다. 어쨌든, 내가 본 모든 개인지도 및 가이드에서, 나는 올바르게 설정하고 나는 손실에 있다고 믿습니다.
또한 glError()는 오류를 반환하지 않으며 오류를 검사 할 수있는 모든 셰이더 컴파일 또는 링크 프로세스는 오류를보고하지 않습니다.
아이디어가 있으십니까?
glViewport() 호출이 필요한 것입니다. 웬일인지 나는 이것을 간과했고, 여러 가지 튜토리얼에서 그것을 결코 보지 못했다. 정말 고마워. – sugarmuff