0
OpenGL ES 2에서 텍스처가있는 오브젝트 (입방체)를 그려보고 싶지만 이상한 결과가 나옵니다. 내가 그리려는glDrawElements 디스플레이 문제
의 Obj - FBX 파일에서 추출 등의 데이터가 (또한 내가 법선 추출 할 수 있습니다하지만 난 그래서 그냥 건너을 사용하지 않음) :
----Indices----24
0
1
2
3
4
7
6
5
0
4
5
1
1
5
6
2
2
6
7
3
4
0
3
7
----Coordinates(Vertises)----72
1 1 -1
1 -1 -1
-1 -1 -1
-1 1 -1
1 0.999999 1
-1 1 1
-1 -1 1
0.999999 -1 1
1 1 -1
1 0.999999 1
0.999999 -1 1
1 -1 -1
1 -1 -1
0.999999 -1 1
-1 -1 1
-1 -1 -1
-1 -1 -1
-1 -1 1
-1 1 1
-1 1 -1
1 0.999999 1
1 1 -1
-1 1 -1
-1 1 1
----Texture UV----48
0.499999 9.7692e-05
0.499999 0.333364
0.250049 0.333364
0.250049 9.78112e-05
0.250049 0.666633
0.499999 0.666633
0.499999 0.9999
0.250049 0.9999
0.74995 0.333366
0.74995 0.666633
0.5 0.666633
0.5 0.333367
0.499998 0.333366
0.499998 0.666632
0.250048 0.666633
0.250048 0.333366
0.25005 0.333367
0.25005 0.666633
0.000100091 0.666633
0.000100024 0.333367
0.749953 0.666639
0.749953 0.333373
0.999903 0.333373
0.999903 0.666639
그래서 내가 버퍼를 와이탄 :
- (void)bindBuffer
{
glGenVertexArraysOES(1, &_vertextArray);
glBindVertexArrayOES(_vertextArray);
//vertises
glGenBuffers(1, &_vertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * _drawModel.numberOfVertices, _drawModel.vertices, GL_STATIC_DRAW);
glEnableVertexAttribArray(GLKVertexAttribPosition);
glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, sizeof(GLfloat) * 3, NULL);
//textures
glGenBuffers(1, &_indexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, _indexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * _drawModel.numberOfTextCoords, _drawModel.texCoords, GL_STATIC_DRAW);
glEnableVertexAttribArray(attributes[ATTRIBUTES_TEXTURE_COORDINATE]);
glVertexAttribPointer(attributes[ATTRIBUTES_TEXTURE_COORDINATE], 2, GL_FLOAT, GL_FALSE, sizeof(GLfloat) * 2, NULL);
//indises
glGenBuffers(1, &_indisesBuffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _indisesBuffer);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(GLuint) * _drawModel.numberOfIndises, _drawModel.indises, GL_STATIC_DRAW);
glBindVertexArrayOES(0);
}
하고 결과적으로 그들에게
- (void)draw
{
glDisable(GL_DEPTH_TEST);
glDepthMask(GL_FALSE);
glDisable(GL_CULL_FACE);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glClearColor(0.65f, 0.65f, 0.65f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glUseProgram(_programm);
glBindVertexArrayOES(_vertextArray);
glUniformMatrix4fv(uniforms[UNIFORM_MODELVIEWPROJECTION_MATRIX], 1, 0, _mvpMatrix.m);
glUniform1i(uniforms[UNIFORM_TEXTURE], 0);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, _texture.name);
glDrawElements(GL_TRIANGLES, _drawModel.numberOfIndises, GL_UNSIGNED_INT, 0);
}
을 그릴 내가 옆에있어 :
,515,난 (단지 참조) GL_LINES
모드를 사용하는 경우 :
하고 난 GL_TRIANGLES
사용하는 경우 :
텍스처
그래서 gl machine
같은 추가 삼각형을 그릴 수 없지만, 내가 왜 그것을 어떻게 해결하고 그것을 해결 스택 ... 어떤 제안?
---- 업데이트 -----
내가
( @ codetiger 덕분에) 가지고 보정 후 문제는 잘못된 인덱스 지수와 그들의 된 부분에 있었다
나는 또한 유 (1 ~ 23) 제안으로 인덱스와 테스트를 수행하려고 - 결과 그것을 조금 더 나은하지만 아니에요 난 ..., 예상대로 8 인덱스 인덱스 (큐브 8 verises 있기 때문에), 그래서 이것이 0에서 8 범위에서 삼각형에 대한 조합이 있어야합니다, 맞아? – gbk
@gbk 버텍스의 순서를 수정했는데, 이것이 효과가 있습니다. – codetiger
고마워요, 맞아요, 그 indicess 삼각형에 대한, vertises에 대한 생각 - 내 가을, 조언을 많이 주셔서 감사합니다, 제발 업데이 트를 참조하십시오 – gbk