OpenGL 프로젝트에서 GLKit을 사용하고 있습니다. 모든 것은 GLKView와 GLKBaseEffect (사용자 정의 쉐이더 없음)를 기반으로합니다. 내 프로젝트에서 나는 3D 객체를 보여주기 위해 GLKViews를 가지고있는 여러 개의 뷰를 가지고 있으며 때때로 그러한 뷰 중 일부는 한 번에 (예 : 모달 뷰 스택에) "열어"있을 수 있습니다.텍스처를로드하지 않는 GLKBaseEffect (텍스처가 텍스처에 검은 색으로 표시됨)
지금까지 모든 것이 훌륭하게 작동했지만, 새로운 관점에서 필자는 내 앱의 3D 세계를위한 측정 테이프를 시뮬레이션하기 위해 텍스처가있는 사각형이 필요했습니다. GLKTextureLoader에 의해 텍스처가 오른쪽으로로드되지만, 사각형을 그릴 때 검은 색으로 표시되고 디버그에서 OpenGL 프레임을 볼 때 알 수있는 것처럼 볼 수있는 이유는이 뷰에서만 텍스처가 OpenGL 컨텍스트에로드되지 않습니다. 빈 텍스처가로드됩니다 (텍스처에 대한 참조가 있지만 모두 0이나 null입니다). (원래 삼각형 스트립했지만, 나는 그것이 문제가 아니다 확인하기 위해 삼각형에 대한 전환) 나는 같은 효과 변수를 설정
static const GLfloat initTape[] = {
-TAPE_WIDTH/2.0f, 0, 0,
TAPE_WIDTH/2.0f, 0, 0,
-TAPE_WIDTH/2.0f, TAPE_INIT_LENGTH, 0,
TAPE_WIDTH/2.0f, 0, 0,
TAPE_WIDTH/2.0f, TAPE_INIT_LENGTH, 0,
-TAPE_WIDTH/2.0f, TAPE_INIT_LENGTH, 0,
};
static const GLfloat initTapeTex[] = {
0, 0,
1, 0,
0, 1.0,
1, 0,
1, 1,
0, 1,
};
:
내가 그리는거야 모양은에 의해 정의됩니다
effect.transform.modelviewMatrix = modelview;
effect.light0.enabled = GL_FALSE;
// Projection setup
GLfloat ratio = self.view.bounds.size.width/self.view.bounds.size.height;
GLKMatrix4 projection = GLKMatrix4MakePerspective(GLKMathDegreesToRadians(self.fov), ratio, 0.1f, 1000.0f);
effect.transform.projectionMatrix = projection;
// Set the color of the wireframe.
if (tapeTex == nil) {
NSError* error;
tapeTex = [GLKTextureLoader textureWithContentsOfFile:[[[NSBundle mainBundle] URLForResource:@"ruler_texture" withExtension:@"png"] path] options:nil error:&error];
}
effect.texture2d0.enabled = GL_TRUE;
effect.texture2d0.target = GLKTextureTarget2D;
effect.texture2d0.envMode = GLKTextureEnvModeReplace;
effect.texture2d0.name = tapeTex.name;
그리고 렌더링 루프는 다음과 같습니다
[effect prepareToDraw];
glDisable(GL_DEPTH_TEST);
glDisable(GL_CULL_FACE);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
glEnableVertexAttribArray(GLKVertexAttribPosition);
glEnableVertexAttribArray(GLKVertexAttribTexCoord0);
glVertexAttribPointer(GLKVertexAttribPosition, COORDS, GL_FLOAT, GL_FALSE, 0, tapeVerts);
glVertexAttribPointer(GLKVertexAttribTexCoord0, 2, GL_FLOAT, GL_FALSE, 0, tapeTexCoord);
glDrawArrays(GL_TRIANGLES, 0, TAPE_VERTS);
glDisableVertexAttribArray(GLKVertexAttribPosition);
glDisableVertexAttribArray(GLKVertexAttribTexCoord0);
가 나는 또한 항문 텍스처 자체를 테스트 한 다른 개체와 함께보기 및 그것은 잘 작동하므로 텍스처 파일 오류가 아니에요.
3 일 동안이 문제에 봉착 했으므로 도움을 주시면 대단히 감사하겠습니다.
업데이트 : 또한 렌더링 루프 중에 glErrors가 없습니다.
사람들이 답변 할 수 있도록 다른 질문을 추가 할 수 있습니까? –