2012-08-16 2 views
3

내가 NDK (나는 ​​안드로이드에 대한 Vuforia's imagetarget 예를 사용하고 있습니다) 내 안드로이드 프로그램에 총알 물리 엔진을 구현하고, 설정하고 제대로 작동하지만 난/렌더링에 내 충돌 상자 /면을 그릴 싶습니다 내 강체 (btRigidBody)/충돌 셰이프 (btCollisionShape)를 참조하십시오, 나는 이것이 가능하지만, 그것을 할 수있는 방법에 대한 자습서를 찾을 수 없습니다!Bullet Physics 콜리 전 본문/모양을 그리거나 렌더링하는 방법은 무엇입니까?

나는 hello world Bullet physics tutorial on their wiki page 촬영 나는 충돌 몸을 볼 수있는 OpenGL을 ES 2.0에있는 3D 개체로 떨어지는 물리학의 몸에서 변환을 적용하여 수정 한, 여기에 내가 이의를 렌더링하는 데 사용하고있는 코드는 다음과 같습니다

void drawRigidBody(btRigidBody* body,QCAR::Matrix44F modelViewMatrix, unsigned int textureID) 
{ 
btTransform trans; 
body->getMotionState()->getWorldTransform(trans); 
    LOG("sphere pos: (x %f , y %f, z %f)",trans.getOrigin().getX(),trans.getOrigin().getY(),trans.getOrigin().getZ()); 


    float physicsMatrix[16]; 
    trans.getOpenGLMatrix(physicsMatrix); 

    SampleUtils::scalePoseMatrix(kObjectScale, kObjectScale, kObjectScale, 
      &modelViewMatrix.data[0]); 

    QCAR::Matrix44F modelViewProjection, objectMatrix; 
    SampleUtils::multiplyMatrix(&modelViewMatrix.data[0], physicsMatrix, &objectMatrix.data[0]); 
    SampleUtils::multiplyMatrix(&projectionMatrix.data[0], &objectMatrix.data[0], &modelViewProjection.data[0]); 



    glVertexAttribPointer(vertexHandle, 3, GL_FLOAT, GL_FALSE, 0, 
      (const GLvoid*) &signVerts[0]); 
    glVertexAttribPointer(normalHandle, 3, GL_FLOAT, GL_FALSE, 0, 
      (const GLvoid*) &signNormals[0]); 
    glVertexAttribPointer(textureCoordHandle, 2, GL_FLOAT, GL_FALSE, 0, 
      (const GLvoid*) &signTexCoords[0]); 

    glEnableVertexAttribArray(vertexHandle); 
    glEnableVertexAttribArray(normalHandle); 
    glEnableVertexAttribArray(textureCoordHandle); 

    glActiveTexture(GL_TEXTURE0); 
    glBindTexture(GL_TEXTURE_2D, textureID); 
    glUniformMatrix4fv(mvpMatrixHandle, 1, GL_FALSE, 
      (GLfloat*)&modelViewProjection.data[0]); 
    glDrawArrays(GL_TRIANGLES, 0, signNumVerts); 
} 

편집 : btBoxShape의 코드를 찾고 난 당신이 상자 정점 법선 잡아 수 있습니다주의 :

btVector3** vertices= wallShape->getVertices(); 
btVector3**normals = wallShape->getNormals(); 

을하지만 당신은 특정의 정점 포인트를 그릴 인덱스의 목록을 잡을 수 없습니다 주문! 내가 올바르게 기억

답변

10

,이 총알에 디버그 모양을 그릴 수있는 적절한 방법이 아니다. 16 페이지의 user manual (PDF)을 읽었습니까?

btIDebugDraw을 구현하는 사용자 고유의 디버그 드로어 클래스를 구현해야하는데이 클래스에서는 drawLine 메서드를 구현합니다.

당신은 world->debugDrawWorld() 전화 세계를 그리려면 world->getDebugDrawer->setDebugMode(debugMode);

으로 활성화 한 후 setDebugDrawer과 총알이 디버그 서랍을 전달하고;

물리 세계의 와이어 프레임 모델이 그려 때까지이 다음 사용자 정의 함수를 여러 번에 drawLine 호출합니다. 그것이 내가 포인터에 대한 감사를 필요한 것처럼

+0

이 보인다! 불행하게도 내 C++는 내가 NDK 물건에 대한 코드 조각에 의해 점점하지만 난 적절한 C++ 클래스를 작성하는 브러시해야 할거야처럼 보이는 봤는데 (내가 주로 자바 프로그래밍을 한 안드로이드 개발자 인) 녹슨입니다 – AndroidNoob

관련 문제