PMG

Форумы по созданию игр
Текущее время: 21 сен 2021 05:34

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 64 ]  На страницу Пред.  1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения: Re: glCopyTexImage2D: востановление поврежденных участков экрана
СообщениеДобавлено: 20 июн 2009 17:05 
Не в сети
Опытный
Аватара пользователя

Зарегистрирован: 04 июл 2008 10:11
Сообщения: 144
Откуда: Питер
Vitone, а у тебя точно вьюпорт настроен под твою текстуру 2048 на 2048?
Код:
glViewport(0, 0, 2048, 2048);


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: glCopyTexImage2D: востановление поврежденных участков экрана
СообщениеДобавлено: 21 июн 2009 21:50 
Не в сети
Любитель

Зарегистрирован: 02 июн 2009 15:53
Сообщения: 27
Нет, вьюпорт у меня настроен под размер окна и это логично, иначе картинка искривляется (вытягивается\сжимается). Но все же, даже если выставить 2048, проблему это не решает - текстура содержит мусор.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: glCopyTexImage2D: востановление поврежденных участков экрана
СообщениеДобавлено: 21 июн 2009 22:43 
Не в сети
Любитель

Зарегистрирован: 02 июн 2009 15:53
Сообщения: 27
Закоментил условие if (needTexInit) - заработало, но текстура почему-то перевернутая. Попытался перевернуть ее и в результате получил черный фон. Видимо, это неиспользуемая часть текстуры отображается:
Код:
                 if (startMouseMove)
                 {
                     Gl.glMatrixMode(Gl.GL_PROJECTION);
                     Gl.glPushMatrix();
                     Gl.glMatrixMode(Gl.GL_MODELVIEW);
                     Gl.glPushMatrix();
                     Gl.glScalef(1, -1, 1);

                     Gl.glEnable(Gl.GL_TEXTURE_2D);
                     Gl.glBindTexture(Gl.GL_TEXTURE_2D, RenderTex);
                     Gl.glBegin(Gl.GL_QUADS);
                     Gl.glTexCoord2dv(new double[] { 0.0, 0.0 });
                     Gl.glVertex2d(0, 0);
                     Gl.glTexCoord2dv(new double[] { 1.0, 0.0 });
                     Gl.glVertex2d(size, 0);
                     Gl.glTexCoord2dv(new double[] { 1.0, 1.0 });
                     Gl.glVertex2d(size, size);
                     Gl.glTexCoord2dv(new double[] { 0.0, 1.0 });
                     Gl.glVertex2d(0, size);
                     Gl.glEnd();
                     Gl.glDisable(Gl.GL_TEXTURE_2D);

                     Gl.glMatrixMode(Gl.GL_PROJECTION);
                     Gl.glPopMatrix();
                     Gl.glMatrixMode(Gl.GL_MODELVIEW);
                     Gl.glPopMatrix();
                 }


Что ж я делаю не так?
Думаю стоит привести функцию изменения размера окна:
Код:
            private void Resize(int width, int height)
            {
                if (height == 0)
                {
                    height = 1;
                }
                Gl.glMatrixMode(Gl.GL_PROJECTION);
                Gl.glLoadIdentity();
                Glu.gluOrtho2D(0, width, height, 0); // Top-left corner pixel has coordinate (0, 0)
                Gl.glViewport(0, 0, width, height);
                Gl.glMatrixMode(Gl.GL_MODELVIEW);
                Gl.glLoadIdentity();

                BuildLists();
                InitTexture();
                Draw();
            }


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: glCopyTexImage2D: востановление поврежденных участков экрана
СообщениеДобавлено: 21 июн 2009 23:05 
Не в сети
Любитель

Зарегистрирован: 02 июн 2009 15:53
Сообщения: 27
Как я и догадался, все проблемы из-за перевернутой системы координат. Сделал ее нормальной относительно ОЖЛ - все работает правильно, только отсчитывать снизу вверх ох как не удобно.

Скорость работы меня радует, и процессор грузится на 10-15% при интенсивном перемещении.
В GDI+ это бы загрузило на процентов 50, если не больше и заметно как дергаются перемещаемые объекты.

Но вот еще масштабирование не правильно работает - текстура также масштабируется, но мне нужно сделать скрин отмасштабированого рисунка. Придется реализовать его мат. средствами, а не ОЖЛ?
private void glControl_KeyDown(object sender, KeyEventArgs e)
{
double scale = 0.9;
if (e.KeyCode == Keys.Z)
{
Gl.glScaled(1.0 / scale, 1.0 / scale, 1.0 / scale);
glControl.Invalidate();
}
else if (e.KeyCode == Keys.X)
{
Gl.glScaled(scale, scale, scale);
glControl.Invalidate();
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: glCopyTexImage2D: востановление поврежденных участков экрана
СообщениеДобавлено: 22 июн 2009 10:09 
Не в сети
Опытный
Аватара пользователя

Зарегистрирован: 04 июл 2008 10:11
Сообщения: 144
Откуда: Питер
Ну да, комп все правильно делает. Ты использовал Gl.glScaled для блоков, а для скрина нужно вернуть матрицу в начальное положение домножив на противоположенное Gl.glScaled.
Вот поэтому вместо
Код:
if (startMouseMove)
                 {
                     Gl.glMatrixMode(Gl.GL_PROJECTION);
                     Gl.glPushMatrix();
                     Gl.glMatrixMode(Gl.GL_MODELVIEW);
                     Gl.glPushMatrix();
                     Gl.glScalef(1, -1, 1);
                         ...

я использую этот код для отрисовки скрина
Код:
glViewport(0, 0, WindowW, WindowH);
      glMatrixMode(GL_PROJECTION);
      glLoadIdentity();
      glOrtho(0.0, 1.0, 1.0, 0.0, -1.0, 1.0);   
      glMatrixMode(GL_MODELVIEW);
      glLoadIdentity();

      glBindTexture(GL_TEXTURE_2D, pass_texture0);
      glBegin(GL_QUADS);
         glTexCoord2i(0, 0); glVertex2i(0, 1);
         glTexCoord2i(1, 0); glVertex2i(1, 1);
         glTexCoord2i(1, 1); glVertex2i(1, 0);
         glTexCoord2i(0, 1); glVertex2i(0, 0);
      glEnd();

Тут загружается пустая матрица и нет никаких проблем с преобразованиями


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: glCopyTexImage2D: востановление поврежденных участков экрана
СообщениеДобавлено: 22 июн 2009 13:05 
Не в сети
Любитель

Зарегистрирован: 02 июн 2009 15:53
Сообщения: 27
Ребята, всем большое спасибо, задача практически решена, остались только мелочи жизни :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: glCopyTexImage2D: востановление поврежденных участков экрана
СообщениеДобавлено: 25 июн 2009 12:14 
Не в сети
Любитель

Зарегистрирован: 02 июн 2009 15:53
Сообщения: 27
Написал класс слоя, который исходя из размеров окна и максимально возможного размера текстуры, поддерживаемого системой, формирует 2х мерный массив текстур, в который копируется\восстанавливается экран. Если экран помещается в несколько текстур (в подавляющем количестве случаев - достаточно одной), то работает просто замечательно. Если кому нужно, могу поделится, правда код еще совсем сырой. Использовал C#+Tao.Framework.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: glCopyTexImage2D: востановление поврежденных участков экрана
СообщениеДобавлено: 25 июн 2009 14:40 
Не в сети
Опытный
Аватара пользователя

Зарегистрирован: 04 июл 2008 10:11
Сообщения: 144
Откуда: Питер
Vitone, ты можешь выложить на файлообменник ехе того что ты сделал. Интересно что получилось.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: glCopyTexImage2D: востановление поврежденных участков экрана
СообщениеДобавлено: 25 июн 2009 16:43 
Не в сети
Любитель

Зарегистрирован: 02 июн 2009 15:53
Сообщения: 27
Знаю вас, декомпилеров))))
Предупреждаю сразу - это тестовая прога.
Блоки могут выделятся. Ни в коем случае не делайте дабл клик, а то офигеете!
http://upload.com.ua/get/900926003/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: glCopyTexImage2D: востановление поврежденных участков экрана
СообщениеДобавлено: 25 июн 2009 18:51 
Не в сети
Опытный
Аватара пользователя

Зарегистрирован: 04 июл 2008 10:11
Сообщения: 144
Откуда: Питер
ахаха :post:
Работает нормально, а после двойного щелчка мыши ничего страшного не случилось - просто цвета меняются в зависимости от положения мыши. А что ты вообще хочешь сделать то в итоге. Микроплату какую-то?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: glCopyTexImage2D: востановление поврежденных участков экрана
СообщениеДобавлено: 26 июн 2009 09:03 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Все работает. Очень напоминает среду для программирования контроллеров.

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: glCopyTexImage2D: востановление поврежденных участков экрана
СообщениеДобавлено: 26 июн 2009 10:20 
Не в сети
Любитель

Зарегистрирован: 02 июн 2009 15:53
Сообщения: 27
MagicWolf писал(а):
Очень напоминает среду для программирования контроллеров.

Ну дык так оно и есть)))
Это будущий редактор FBD-программ, который зачастую используется для программирования контроллеров. Только в моем случае он будет использоваться в SCADA-системе.

Протестируйте, пожалуйста, приложения с большим разрешением экрана, если это возможно, мне интересно знать насколько хорошо работает с другими характеристиками системы. Попробовал на 17" мониторе с более слабым процессором - немного огорчился, хотя все равно значительно лучше работает чем в GDI+.

bad_duck писал(а):
после двойного щелчка мыши ничего страшного не случилось - просто цвета меняются в зависимости от положения мыши

Таким образом я хотел найти оптимальный цвет =)
Бредовая идея была =)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: glCopyTexImage2D: востановление поврежденных участков экрана
СообщениеДобавлено: 26 июн 2009 11:00 
Не в сети
Опытный
Аватара пользователя

Зарегистрирован: 04 июл 2008 10:11
Сообщения: 144
Откуда: Питер
Цитата:
Протестируйте, пожалуйста, приложения с большим разрешением экрана, если это возможно, мне интересно знать насколько хорошо работает с другими характеристиками системы

у меня разрешение 1440х900, всё пашет


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: glCopyTexImage2D: востановление поврежденных участков экрана
СообщениеДобавлено: 26 июн 2009 11:05 
Не в сети
Любитель

Зарегистрирован: 02 июн 2009 15:53
Сообщения: 27
bad_duck писал(а):
у меня разрешение 1440х900, всё пашет

Та пахать то оно будет.
Сильно заметно как мерцает прямоугольник?
Какие проц и видяха?
Спасибо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: glCopyTexImage2D: востановление поврежденных участков экрана
СообщениеДобавлено: 26 июн 2009 12:18 
Не в сети
Опытный
Аватара пользователя

Зарегистрирован: 04 июл 2008 10:11
Сообщения: 144
Откуда: Питер
ничего вообще не мерцает. Только постоянно синий прямоуголдьник к мышке прикреплен.
Проц 3,9 ГГц, память 2 ГБ, видяха GeForce 6800 GS. Ну собственно с моим компом твой старый вариант наверно тоже не тормозил бы 8-)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 64 ]  На страницу Пред.  1, 2, 3, 4, 5  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB