Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> OpenGL ViewPort изменение размеров окна, ViewPort, изменение размеров окна и сохр 
:(
    Опции темы
glDevAleksey001
  Дата 30.11.2014, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 7.8.2014

Репутация: нет
Всего: нет



Привет всем !
Прошу подсказки .
Нужно так, что бы изменение размеров окна не влияли на масштаб фигуры в окне вида.
Ну, допустим, размер окна  800x600 переходим на  1024х768  фигура остаётся в центре окна и одного фигура размера, что и при 800x600 и  1024х768  .
ICQ 684966146




Это сообщение отредактировал(а) glDevAleksey001 - 11.10.2015, 21:11

Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  256x128.jpg 25,41 Kb
PM MAIL   Вверх
baldina
Дата 1.12.2014, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



в общем случае примерно так
Код

void onResize (int newWidth, int newHeight) {
  if (newHeight==0) return;
  glViewport(0,0,newWidth,newHeight);
  double aspect=double(newWidth)/newHeight;
  if (aspect > 1)
    glOrtho(-sceneWidth/2*aspect, sceneWidth/2*aspect, -sceneHeight/2, sceneWidth/2, nearZ, farZ);
  else
    glOrtho(-sceneWidth/2, sceneWidth/2, -sceneHeight/2/aspect, sceneWidth/2/aspect, nearZ, farZ);
}

остальное сами добавите по вкусу
а как у вас сейчас делается?
PM MAIL   Вверх
glDevAleksey001
Дата 1.12.2014, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 7.8.2014

Репутация: нет
Всего: нет



Да, Спасибо большое оно и есть!
Его  искал я, помню, был такой пример в  Builder c++ 5.0. 
У себя его не я и не нашёл.
Я сделал по другому .
Сперва рабочая
Код

Matrix4.CreatePerspectiveFieldOfView((float)Math.PI / 4, aspect, 1, 1000, out projection_matrix);


потом
Код

Glu.Ortho2D(0, w, 0, h);  

И в шейдере 
Код

uniform vec4 vView; 

vec4 Vertex  ;

void main()
{

Vertex =gl_Vertex;

Vertex.x*= vView.z;
Vertex.y*= vView.z;


Vertex.z=0.0;
Vertex.x+= vView.x/2;
Vertex.y+= vView.y/2;

gl_FrontColor =gl_Color;
gl_Position = gl_ModelViewProjectionMatrix* vec4(Vertex.xyz, 1.0); 
}



 Да и вопрос что это за переменные?
sceneWidth, sceneHeight


Это сообщение отредактировал(а) glDevAleksey001 - 1.12.2014, 16:24
PM MAIL   Вверх
baldina
Дата 1.12.2014, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: нет
Всего: 101



размеры сцены, т.е. диапазоны координат вашей модели, в которых она должна быть видна в окне.
у вас эти координаты 0..w и 0..h

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

glOrtho(0,100,0,100);

но еще надо учесть соотношение сторон окна (оно в общем случае не совпадает с соотношением сторон вашей сцены, которая в данном случае квадрат), для этого используется переменная aspect.
допустим, окно имеет размеры w и h
aspect=w/h
если окно "шире" модели, то по размеру модели устанавливается высота 
Код

glOrtho(0,100*aspect,0,100);
а если "выше", то по размеру модели устанавливается ширина
Код

glOrtho(0,100,0,100/aspect);


PM MAIL   Вверх
glDevAleksey001
  Дата 1.12.2014, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 7.8.2014

Репутация: нет
Всего: нет



Да спасибо я, разобрался, так я мало-мальски понимаю в видовых преобразованиях.

Переписал немного 

Код

GL.Ortho(-w / 2.0, w / 2.0, -h / 2.0, h / 2.0, nearZ, farZ); 


А то фигура была сплющена по ширине. 

Замес-то квадрата прямоугольник получался.




Это сообщение отредактировал(а) glDevAleksey001 - 2.12.2014, 08:26
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0445 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.