나는 안드로이드 용 Rajawali 라이브러리를 사용하여 장면에 몇 가지 기본 3D 객체를 그리는 중입니다. 하나의 셰이더로 매우 많은 양의 정점을 매우 "저렴하게"렌더링하는 방법을 보여주는 샘플 2000 플레인이 있습니다. 꼭지점 배열을 셰이더에 전달하여 그릴 수 있습니다.OpenGL 셰이더 : 각 버텍스를 개별적으로 어떻게 이동합니까?
이 샘플을 업그레이드하고 일부 정점을 서로 독립적으로 이동시키고 싶습니다.
glBufferSubData를 시도했지만 장면에서 아무 것도 바꿀 수 없습니다. 내가 찾은 한 가지 방법은 데이터를 변경하고 버퍼를 다시 만드는 것이지만, 필요한 데이터 만 변경하는 간단한 방법이 있기를 바랍니다.
예를 들어, 나는 단지 이미 생성되고 바인드 된 버퍼에서 일부 위치 만 변경하려고합니다.
버퍼
mGeometry.createBuffer(mPlanePositionsBufferInfo, BufferType.FLOAT_BUFFER, mPlanePositions, GLES20.GL_ARRAY_BUFFER);
GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, 0);
세트 위치
GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, planePosBufferHandle);
GLES20.glEnableVertexAttribArray(maPlanePositionHandle);
fix.android.opengl.GLES20.glVertexAttribPointer(maPlanePositionHandle, 3, GLES20.GL_FLOAT,
false, 0, 0);
을 만들 위치
float[] planePositions = new float[numVertices * 3];
....
초기화 및 방법은 예를 들어 위치, 최초면의 제 정점을 수정할 수 있는가? (planePositions [0] = a; planePositions [1] = b; planePositions [1] = c ... 이제이 수정 된 배열을 opengl에 전달해야하지만 어떻게해야할지 모르겠다.
버퍼를 수정하기 전에 잠글 필요가 있습니까? 나는 C++과 함께 Ogre3d를 사용하는 것에 대해서도 매우 익숙하다. 그러나 원칙은 여전히 동일해야한다. 현재 정점 버퍼를 가져 와서 잠그고 수정 한 다음 잠금을 해제 할 수 있어야합니다. 나는 당신이 다른 것을해야한다고 생각하지 않지만 완전히 틀릴 수도 있습니다. 미안하지만별로 도움이 안돼. –
glBufferSubData가 정상적으로 작동해야합니다. 작동하지 않는 항목을 표시 할 수 있습니까? – Tim