[C++]Требуется помощь с OpenGL Добрый день. Пытаюсь сделать внешний радар для одной популярной игры от Valve, но возникла проблема с поворотом камеры. Я хочу сделать так, чтобы линией показывало поворот головы игрока ( не локального ) на сервере, но когда игрок начинает перемещаться, эта самая линия начинает дико вращаться и вообще не понятно на что указывает... Вот проблемные места, как я полагаю. Code: glPushMatrix( ); glRotatef( -localPlayer.angles[1] + 90, 0, 0, 1 ); DrawPlayer( x, y, 2, curPlayer.angles, curPlayer.team ); glPopMatrix( ); Code: void DrawPlayer( float x, float y, int width, GLfloat* angles, int team ) { glBegin( GL_TRIANGLE_FAN ); if( team == CS_TEAM_T ) { glColor3f( 1, 0, 0 ); } else if( team == CS_TEAM_CT ) { glColor3f( 0, 0, 1 ); } else { glColor3f( 0, 1, 0 ); } glVertex2f( x, y ); for( GLfloat i = 0; i <= PI*2; i += PI*2/18 ) { glVertex2f( x + cos( i ) * width , y + sin( i ) * width ); } glEnd( ); glBegin( GL_LINES ); if( team == CS_TEAM_T ) { glColor3f( 1, 0, 0 ); } else if( team == CS_TEAM_CT ) { glColor3f( 0, 0, 1 ); } else { glColor3f( 0, 1, 0 ); } glVertex2f( x, y ); glVertex2f( x + cos( DegToRad( angles[1] ) ) * width * 2, y + sin( DegToRad( angles[1] ) ) * width * 2 ); glEnd( ); }
Что-то мне кажется что дело в glRotatef( -localPlayer.angles[1] + 90, 0, 0, 1 ); Не совсем понял зачем этот поворот. И glRotatef поворачивает текущую матрицу, и если ты повернул, то в след. раз уже будешь поворачивать в новых координатах. Попробуй использовать углы Эйлера, погугли как их преобразовать в поворот OpenGL
Спасибо за предложение, но проблема решена. Вместо углов, я считывал координаты Но появилась новая проблема: мне нужно, чтобы линия, отображающая хп, была чуть ниже кружочка и на нее не влияла смена координат, тобишь glRotate. Скрин как должно быть прилагается. Линия у синего кружочка (игрока) должна отображаться как у зеленого, то бишь горизонтально. Вот код, который рисует эту линию. Он расположен в функции DrawPlayer, которую я постил выше. Code: glLineWidth( 3 ); glBegin( GL_LINES ); glColor3f( 1 - (float)health / 100, (float)health / 100, 0 ); GLfloat fCoef = 1.2; GLfloat fHealthCoef = (float)health / 100 * ( width * (fCoef * 2) ); glVertex2f( x - fHealthCoef / 2, y - width * 2 ); glVertex2f( x + fHealthCoef / 2, y - width * 2 ); glEnd( ); glLineWidth( 1 );
В общем рисуй линию в матрице в которой ты поворот не делал, типа выгрузить текущую матрицу (в котороый ты поворот делал), glPopMatrix(), и рисовать линию, ну а потом (если нужно), то вернуться обратно. Или сделай поворот glRotatef обратный первому повороту, и рисуй линию.
Я уже рассматривал такой вариант. Линия просто будет находиться относительно дургой системы кординат. В общем, не под кружочком.. :\