Компьютерная графика

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Класс Camera

Сообщений 1 страница 4 из 4

1

Не могу понять как управлять камерой. Использую Borland Builder 6 C++.

Код:
void __fastcall TForm1::FormMouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{

	static	int	lastX = -1;
	static	int	lastY = -1;

	if ( lastX == -1 )        // not initialized
	{
    lastX = X;
    lastY = Y;
	}

    if( Shift.Contains(ssLeft) )
    {
	yaw  -= (Y - lastY) * 0.02;
	roll  += (X - lastX) * 0.02;
     }

	lastX = X;
	lastY = Y;
    
	camera.setEulerAngles ( yaw, pitch, roll );

Не понятно, почему roll  += (X - lastX) * 0.02;, это же вроде z координата?
Подскажите как нужно передавать в таком случае z координату, ну например при вращении колеса мыши?

Код:
void __fastcall TForm1::FormMouseWheel(TObject *Sender, TShiftState Shift,
      int WheelDelta, TPoint &MousePos, bool &Handled)
{
 zZoom += WheelDelta*0.01;
}

zZoom  как использовать?
А если сцену нужно наклонить, а не повернуть, или отодвинуть по какой нибудь оси? (типа glTranslatef и glRotatef)

0

2

Я обычно подобрал для себя какие именно углы меняет передвижение мыши и мне этот выбор кажется логичным - два направления движения мыши соответствуют двум углам, т.е. смещения мыши переводятся в измнения этих двух углов.
Для работы с колесиком мыши я просто свдигаю камеру вдоль направления взгляда, т.е. у меня колесико мыши отвечает за приближение/удаление камеры.

0

3

Спасибо что ответили.
С этим разобралась.

Steps3D написал(а):

Для работы с колесиком мыши я просто свдигаю камеру вдоль направления взгляда, т.е. у меня колесико мыши отвечает за приближение/удаление камеры.

Да,получилось сдвигать камеру куда нужно. А если нужно, чтобы объект удалялся от камеры? Чтобы он удалялся,а камера оставалась на месте? (glTranslatef(0.0, 0.0, zZoom );)

И еще вопрос. В примере про рендеринг травы в 3-м и 4-м примерах в процедуре drawGrass (),если в glAlphaFunc указать значение 0.5 - то трава выводиться по центру площадки (в виде не ровного круга) и по мере удаления камеры ее положение смещается. Если,например, значение 0.3 - трава выводится по всей поверхности. Все это,если поднять камеру над поверхностью. В статье прочитала, что вывод блока ландшафта должен  производиться, только если он (блок) попадает в область видимости. Но в случае с "зависанием" камеры над поверхность эта зона увеличивается, и по идее весь видимый ландшафт должен быть заполнен травой. Может я что не правильно поняла?  И почему при glAlphaFunc ( GL_GEQUAL , 0.3); вся поверхность заполнена травой,а при glAlphaFunc  ( GL_GEQUAL , 0.5); - нет?

Отредактировано Lio (2013-04-11 09:44:21)

0

4

Если нужно чтобы объект удалялся от камеры - просто сдвигайте объект.
Насчет травы - отсечение по alpha - это просто вариант оптимизации.
Отсечение невидимых блоков сделано только в 2D

0



создать форум