입자의 움직임에 대한 3D 시뮬레이션을 만들고 있는데, 특정 위치에 전기장을 나타내는 화살표를 그려야합니다. 블렌더에서 화살표 메쉬를 만들고 .obj로 내 보낸 (코드 생성기에서 .obj 로더를 만들었습니다.)하지만 올바른 방향으로 가리 키도록 제대로 회전 할 수 없습니다. , 비록 전기장 벡터가 적절하게 계산되었는지를 점검했지만. 나는 이상한 결과를 얻고있다. 예를 들어, 벡터가 위쪽을 가리키는 경우 아래쪽을 가리키지 만 x 축에서 회전하는 코드를 주석 처리하면 화살표가 의도 한 것과 같이 아래쪽을 향하게됩니다. 그런 다음 오른쪽을 가리 키도록되어 있으면 안쪽으로 (음의 z 축으로) 향하고 있지만 y 축의 회전을 주석 처리하면 오른쪽을 가리 킵니다.OpenGL에서 3D 벡터를 그리는 방법은 무엇입니까?
다음은 화살표의 회전 및 렌더링 내 코드입니다 :
void Render(Vector3 cameraPos)
{
glScalef(field.length() * ArrowLength,1.0,1.0);
glTranslatef(0,0,_zdefault);
glRotatef(Entity::yangle,0,1,0);
glTranslatef(pos.getX() + cameraPos.getX(), pos.getY() + cameraPos.getY(), pos.getZ() + cameraPos.getZ() - _zdefault);
glRotatef(atan2(field.getZ(),field.getY()) * 180/M_PI, 1.0,0.0,0.0);
glRotatef(atan2(field.getX(),field.getZ()) * 180/M_PI, 0.0,1.0,0.0);
glRotatef(atan2(field.getY(),field.getX()) * 180/M_PI, 0.0,0.0,1.0);
glBindTexture(GL_TEXTURE_2D,arrowTexture);
glCallList(arrow);
glLoadIdentity();
};
필드는 전기장을 나타내는 벡터이다. 의 선
glTranslatef(0,0,_zdefault);
glRotatef(Entity::yangle,0,1,0);
내가 종류의 믹서에 주위를 공전하는 것처럼, 전체 화면이 회전 할 수 있도록되어있다. 또한 Vector3는 아주 기본적인 기능으로 작성한 단순한 Vector 클래스입니다. 제가 말했듯이, 벡터 계산에는 아무런 문제가 없습니다. 나는 벡터를 사용하여 올바르게 일을 할 수 없다는 것을 확인했습니다.
내 앵글이 내가 atan2를 사용하는 glRotatef에서 약간 망가 졌다고 느낀다.하지만 이전에 설명한 회전이 어떻게 영향을 미치는지 이해할 수 없다.
벡터 구성 요소만을 기반으로 무언가를 회전시킬 수있는 방법이 있습니까?
회전 각도를 처리하는 대신 회전 매트릭스를 직접 작성하는 것이 더 쉽습니다. 같은 종류의 문제에 대한 내 대답을보십시오. http://stackoverflow.com/questions/24705225/opengl-rotation-from-velocity-vector/24709587#24709587. –
당신의 변형되지 않은 화살표는 어떤 방향을 가리 킵니까? 위의 대답은 원래의 벡터가 양의 z 방향을 가리키는 것입니다. 원래의 화살표를 적용하기 쉽습니다. x 방향의 점. 필요한 경우 새 버전의 답을 쓸 수 있습니다. –