내 목표는 텍스처를 그리고 GlKViewController의 상단에 색상 선을 그립니다. 두 부분은 모두 개별적으로 작동하지만 두 그림을 동일한 그리기 기능에 결합하면 텍스처가 손실됩니다. 선과 같은 색으로 채색됩니다. 내 무승부에GLKit에서 색상이있는 텍스처와 선을 모두 그리는 것 사이의 충돌
는
을 방법 -첫째, 내 질감 삼각형의 코드 :
- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect {
[EAGLContext setCurrentContext:self.context];
[self.effect prepareToDraw];
self.effect.texture2d0.enabled = YES;
glClearColor(0.5, 0.5, 0.5, 1.0);
glClear(GL_COLOR_BUFFER_BIT);
glEnable(GL_BLEND);
glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _indexBuffer);
glEnableVertexAttribArray(GLKVertexAttribPosition);
glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (const GLvoid *) offsetof(Vertex, Position));
glEnableVertexAttribArray(GLKVertexAttribTexCoord0);
glVertexAttribPointer(GLKVertexAttribTexCoord0, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (const GLvoid *) offsetof(Vertex, TexCoord));
glDrawElements(GL_TRIANGLES, nLiveSquares*6, GL_UNSIGNED_SHORT, 0);
내 라인의 코드 얹는 :
self.effect.texture2d0.enabled = NO;
glDisable(GL_BLEND);
glBindBuffer(GL_ARRAY_BUFFER, _lineBuffer);
glEnableVertexAttribArray(GLKVertexAttribPosition);
glVertexAttribPointer(GLKVertexAttribPosition,2,GL_FLOAT,GL_FALSE,sizeof(LinePoint),(const GLvoid *) offsetof(LinePoint, Position));
glEnableVertexAttribArray(GLKVertexAttribColor);
glVertexAttribPointer(GLKVertexAttribColor,4,GL_FLOAT,GL_FALSE,sizeof(LinePoint),(const GLvoid *) offsetof(LinePoint, Color));
// Set the line width
glLineWidth(50.0);
// Render the line
glDrawArrays(GL_LINE_STRIP, 0, 2);
문제가 발생할 것으로 보인다 GLKVertexAttribColor를 사용합니다. 선에 color 속성을 적용하자마자 텍스쳐는 모두 선과 같은 색으로 채색됩니다.
편집 : 문제의 일부는 위의 마지막 줄에 glDrawArrays 후
glDisableVertexAttribArray(GLKVertexAttribColor);
을 사용하여 해결 될 것으로 보인다.
내 텍스처가 더 이상 선과 같은 색상으로 표시되지 않지만 이제는 흰색 직사각형으로 표시됩니다. 이는 실제로 개선되지 않습니다.
또한 'self.effect.texture2d0.enabled = YES'및 'self.effect.texture2d0.enabled = NO'를 주석 처리하면 텍스처가 제대로 표시되지만 줄이 검은 색으로 표시됩니다. 녹색).
편집 II : 실제로 찾고있는 것은 한 블록 (선 그리기)의 텍스처를 해제 한 다음 다시 삼각형을 그리기 위해 다시 전환하는 것입니다. 그리고 잘못된 것은 self.effect.texture2d0.enabled가 그려지는 모든 것에 대한 상태를 설정한다는 것입니다.