2012-04-30 4 views
2

glTranslatef 대신에 객체 정점을 수정하는 경우 성능이 향상됩니까?Android OpenGL ES - glTranslatef를 사용하거나 정점을 직접 업데이트하십시오.

NPC 객체의 버텍스는 다음과 같이 설정됩니다. 그들은 X와 Y를 이동할 때이 그들 때문에 내가 화면에 그려집니다 NPC 개체의 컬렉션이 순간 gl.glScalef()

protected float[] vertices = { 
    0f, 0f, -1f, //Bottom Left 
    1f, 0f, -1f, //Bottom Right 
    0f, 1f, -1f, //Top Left 
    1f, 1f, -1f  //Top Right 
}; 

에 대한 이전 호출의 화면 폭의 1/10이 될 수 있습니다 값이 업데이트되어 정확한 숫자로 NPC를 그리기 위해 onDraw이 액세스합니다.

onDraw(GL10 gl){ 
    for(int i=0; i<npcs.size(); i++){ 
     NPC npc = npcs.get(i); 
     npc.move(); 
     translate(npc.x, npc.y); 
     npc.draw(gl); 
    } 
} 

translate(x,y)이 - 화면 크기 및 비율

npc.draw(gl)에 관련된 계산을 만드는 방법 gl.glTranslatef() 호출하면서 밀어 매트릭스 팝 - 클라이언트 상태 수와 배열

가 증가있을 것이다 무 이동 함수가 꼭지점과 NPC 객체를 변경하면 성능이 저하 될 수 있습니까? 예를 들면;

move(){ 
    // ... do normal movement calculations 
    float[] vewVertices = { 
    x, y, 0f, 
    x+npc.width, y, z, 
    x, y+npc.height, z, 
    x+npc.width, y+npc.height, z 
    } 
    vertexBuffer.put(newVertices); 
    vertexBuffer.position(0); 
} 

나는 내가 어떤 성능 향상을 볼 수 있는지 확인하기 위해 간단한 테스트를 만들려고 해요,하지만 난 사람이 어떤 이전의 경험이 있다면 물어보고 싶었다.

답변

2

변환하는 동안 모델 뷰 매트릭스의 변환은 3 개의 부동 소수점 값의 조작으로 이루어지기 때문에 가장 좋은 방법은 translate 함수를 사용하는 것입니다. 반면에 정점 정보의 변경은 보유한 정점 수에 직접 비례합니다 .

당신이 제안한 방식은 매우 불편하며 꼭지점 조작 대신 매트릭스 조작법을 고수해야합니다.

당신은 번역 작업 중에 매트릭스 변경 사항에 대한 자세한 내용은이 문서를 참조 할 수 있습니다 : 내 현재 오픈 GL 애플리케이션에서 테스트 상태를 만든 후

http://www.songho.ca/opengl/gl_transform.html

건배 마우리 치오

0

는 것 같다 오버 버텍스를 직접 변경했을 때 성능이 향상되지 않음 gl.glTranslatef()

0

Maurizio Benedetti와 마찬가지로, 꼭지점 수가 충분히 큰 경우에만 차이점을 보게됩니다.