마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

openGL es2.0 객체 회전 관련 질문입니다.

0 추천
       private void getRevolution(){
	   		//set the Object's rotation
    	   this.getBasePoint();
   			Matrix.setIdentityM(mModelMatrix, 0);
   		//	Matrix.translateM(mModelMatrix, 0, Op.base_X, Op.base_Y, Op.base_Z);
   		//	Matrix.translateM(mModelMatrix, 0, 0, 0, 0);
   			
	   		setRotateEulerM(mModelMatrix, 0, 
	   				(x_Angle_Degree + x_Angle_Rotate), 
	   				(y_Angle_Degree + y_Angle_Rotate), 
	   				(z_Angle_Degree + z_Angle_Rotate)
	   				);

	   		Log.d("" + name + "'s RoateEulerM = ",
	   		"x- " +(x_Angle_Rotate) + "y- " + (y_Angle_Rotate) + "z- " + (z_Angle_Rotate));

	   		Matrix.multiplyMM(GLMatrix.mMVPMatrix, 0, GLMatrix.mVMatrix, 0, mModelMatrix, 0);
	   		Matrix.multiplyMM(GLMatrix.mMVPMatrix, 0, GLMatrix.mProjMatrix, 0, GLMatrix.mMVPMatrix, 0);
        }

 

	public void draw(){
		GLES20.glUseProgram(mProgram);
		//get Rotation
		Op.getRevolution();
		Op.getRotation();
		
		switch(mode){
			case TEXTURE_MODE:
			{
				GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
				GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextureData_Handle);
				
				GLES20.glVertexAttribPointer(mPosition_Handle, 3, GLES20.GL_FLOAT, false, 12, vertexBuffer);
				GLES20.glEnableVertexAttribArray(mPosition_Handle);
					
				GLES20.glVertexAttribPointer(mTexture_Handle, 2, GLES20.GL_FLOAT, false, 8, textureBuffer);
				GLES20.glEnableVertexAttribArray(mTexture_Handle);
			}
			break;
			case COLOR_MODE:
			{
				GLES20.glVertexAttribPointer(mPosition_Handle, 3, GLES20.GL_FLOAT, false, 12, vertexBuffer);
				GLES20.glEnableVertexAttribArray(mPosition_Handle);
				
				GLES20.glUniform4fv(mColor_Handle, 1, color, 0);
			}
			break;
		}

 

일단 객체를 자전시키려고 하는데, 이게 아무리해도 뷰의 원점을 중심으로 회전을 하네요.

객체 마다 별도의 모델메트릭스를 사용한다고 하길래 별도의 메트릭스를 정의 했는데 별 효과가 없네요..

MatrixMultiply 하는데 문제가 있나요?

GLMatrix.*Matrix 는 전체 프로그램에서 공유하는 메트릭스들입니다.

rhaps20 (6,010 포인트) 님이 2013년 7월 15일 질문

1개의 답변

0 추천
전체 소스가 없어서 ...

뷰의 원점이라고 하면 0,0,0을 말하는건가요?

 translate를 먼저한후에 rotate를 하세요..

만약 translate가 없는데도 그렇게 되었다면 object의 기준이 0,0,0이 아닌겁니다.

그런 경우에는 object의 중심을 바꾸어주시던지 object의 중심을 0,0,0으로 옮긴 이후에 하세요.
익명사용자 님이 2013년 7월 16일 답변
...