пятница, 31 июля 2009 г.

Особенности вывода текста в OpenGL

Изобразить на экране красивые буковки в OpenGL не очень сложно. Для этого нужно:
  • создать шрифт: CreateFont(.....);
  • «привязать» контекст устройства: SelectObject(.....);
  • преобразовать шрифт в полигоны: wglUseFontOutlines(.....).
Теперь эти полигоны можно текстурировать и отображать - как и другие объекты сцены. Но, имеет эта простота одну особенность, из-за непонимания которой я долго не мог достичь поставленной цели: вместе с флагом отображать на экране текст.
Дело в том, что функция wglUseFontOutlines помещает шрифтовые полигоны в список отображения (для каждого символа получается как бы подпрограмма его вывода). По умолчанию OpenGL считает лицевыми те полигоны, рисование которых происходит ПО часовой стрелке — именно в таком порядке обходят вершины шрифтового полигона эти стандартные подпрограммки. А мне, рисуя флаг, было удобнее обходить прямоугольники, из которых он состоит, ПРОТИВ часовой стрелки. Чтобы OpenGL считал такие полигоны лицевыми, я при инициализации вызвал функцию glFrontFace(GL_CCW). Пока в сцене не было текста, она выглядела нормально, а когда направление рисования полигонов флага и текста не совпало, на изображении возникли серьезные артефакты. Стоило перед выводом текста поменять порядок обхода для лицевых полигонов: glFrontFace(GL_CW), а после — переназначить обратно: glFrontFace(GL_CCW), как изображение пришло в норму.

Вывод: не забывайте, что OpenGL очень чувствителен к порядку обхода вершин полигона.

четверг, 30 июля 2009 г.

P.S.№1..реклама двигатель торговли

Сегодня порадовал Джеки Чан (килотонны его фильмов были просмотрены в молодости).
... сейчас особый случай KasperskijLab
хотя мне больше понравился другой опыт сотрудничества буржуйских МЕГА-стар с нашими фирмачами VodkaAdd

P.S.

Под этим заголовком (... приставкой) я буду публиковать вещи не относящиеся к проекту, но, которые могут быть интересны НАМ (... и иже с ними))))

среда, 29 июля 2009 г.

Наглый nag

Речь, конечно, пойдет не о кобре из сказки Киплинга про храброго мангуста, не о маленькой лошади (пони) и, конечно, не о противотанковой ракете третьего поколения: эти значения слова "nag" можно посмотреть в Википедии.
Google переводчик предлагает несколько вариантов для глагола «nag»: надоедать, ныть, раздражать, изводить. Именно поэтому назойливое напоминание, которое программа показывает пользователю, назвали «nag screen».
Поскольку скринсейвер запускает не пользователь, а операционная система, отображение nag-а в начале работы было бы неудачной идеей. Другое дело — в конце, когда пользователь наверняка увидит его. А вот стоит ли показывать nag на фоне нашего развевающегося флага — вопрос, на который трудно дать однозначный ответ...
Для shareware-программ цель nag-а — стимулировать пользователя купить программу. Следовательно, слишком уж его «доставать» — нецелесообразно. В раздраженном состоянии, как мне кажется, с деньгами расстаются неохотно... Как добиться, чтобы nag не создавал пользователю дискомфорта ? Для этого nag, который показывается вместе с флагом, должен быть небольшим, находиться на периферии экрана, двигаться (неподвижный объект не характерен для скринсейвера), периодически исчезать с экрана и снова появляться. По окончании работы скринсейвера nag screen должен возникать не всегда, а с 30-40 процентной вероятностью, чтобы быть для пользователя сюрпризом... :-)

Без лишних формальностей

Предыдущее сообщение закончилось описанием тех сложностей, с которыми столкнется шароварщик, пытаясь протолкнуть свое творение на солидный сайт. Оказывается, для скринсейверов ситуация намного проще. Существуют сайты (например. screensaversplanet.com или desktopscreensaver.com), которые специализируются именно на этой разновидности программ. Будучи заинтересованными в пополнении своих баз данных, они позволяют, заполнив несложную форму, добавить информацию о своем скринсейвере в их коллекцию.
Образцом может служить 3dscreensaver.com На его главной странице легко обнаружить ссылку "Submit". На открывшейся страничке главное - не ошибиться, прописывая File Location(URL). Дело в том, что на подобных сайтах обычно хранятся не дистрибутивы, а только ссылки на них. Это освобождает владельцев сайта от ответственности, связанной с возможным нарушением авторских прав, о чем прямо сказано в условиях использования сайта. Такое посредничество облегчает пользователям поиск нужной им программы, а разработчикам - ее популяризацию.

понедельник, 27 июля 2009 г.

Джентльменский набор

Описанные в предыдущих сообщениях скринсейверы были найдены по критерию "размер дистрибутива". А какие еще характеристики программы обычно указывают сайты, с которых можно скачать разнообразный софт? Похоже, их минимальный джентльменский набор выглядит так: название: (как же без него :-); размер дистрибутива; дата добавления на сайт (или последнего обновления); модель лицензирования (freeware, shareware, ...); цена; платформа (т.е. операционная система и, возможно, системные требования); сведения об авторе (т.е. о том, кто прислал программу); сайт автора; авторское описание программы и ее скриншот(ы).
Чтобы отправить свой скринсейвер на солидный сайт, нам, похоже, понадобится выполнить ряд формальностей, первый из которых - регистрация. Вторым шагом, наверное будет подготовка стандартизованного описания программы в виде, например, PAD-файла. Третий и последующие шаги пока скрыты в тумане...

Супертяж

Мой коллега (killarama) прокомментировал предыдущее сообщение:

Представляю номинанта на место №0 DropClock Screensaver 136.97MB !!!!!!!!!!!!! живого весу
PS Чует мое сердце - это еще не предел :-)

Такой уникальный скринсейвер не должен затеряться в комментариях...

воскресенье, 26 июля 2009 г.

Три тяжеловеса

Я далек от мысли, что мой поиск определил абсолютных победителей в номинации «скринсейвер с самым большим дистрибутивом», но на фоне 8-12-18 мегабайтных собратьев, они выглядят как братья Кличко в компании легковесов :-)

Поклонникам классической живописи адресован Baroque Art Screensaver - 800 Paintings 2c. Размер дистрибутива легко объяснить количеством вошедших в него электронных репродукций работ Рубенса, Рембрандта, Вермеера и многих других мастеров. Сначала вы скачиваете миниатюрный (354 Кб) загрузчик, который загружает почти восьмидесятимегабайтный дистрибутив. Интересно, какие цели преследовали разработчики, применив такой подход ? Жаль, что бесплатно наслаждаться шедеврами эпохи барокко можно только два дня :-(

Любителям аквариумистики будет интересен Aquarium Real Life 6 Screensaver. В отличие от более «тощих» собратьев, он (как уверяют разработчики) использует не компьютерную анимацию, а видеосьемку реальных рыбок. Присутствием видео в дистрибутиве и обусловлен его немалый размер (61,14 Мб). Полноэкранные «портреты» рыб, похоже, главная особенность шестой версии этого программного продукта.

Пятьдесят три мегабайта третьего призера (Through the Eyes of Hubble: Screensaver 1.01) оставались для меня загадкой, пока я не прочитал повнимательнее его описание. Не каждый скринсейвер содержит «20 минут богатой стерео музыки». А что же мы видим на экране под ее аккомпанемент ? Любители астрономии уже догадались, что смогут наблюдать пейзажи Вселенной, сделанные космическим телескопом «Хаббл».

суббота, 25 июля 2009 г.

От и до. Две умных точки.

Я редко пользовался возможностью искать числа из указанного диапазона, которую имеет Google. Его справка поясняет, что два числа, разделенные двумя точками без пробелов в строке поиска интерпретируются как диапазон от..до. Можно искать даты, цены, вес в кг (или Мб :-). В англоязычном поисковом интерфейсе поля для ввода диапазона открываются после щелчка на "Date, usage rights, numeric range, and more". Жаль, что в русскоязычном их (пока ?) нет.
Когда пишешь программу (это я про наш скринсейвер :-), обычно интересуешься ее аналогами. Вот я и попытался диапазонным поиском выяснить, сколько стоит среднестатистический скринсейвер и размер его дистрибутива. Результаты поиска еще нужно обработать, но вот самые «тяжеловесные» скринсейверы уже определились.
Чемпион «весит» 78,2 Мб; серебряный призер - 61,14 Мб; бронзовый - 53,43 Мб. А, какие именно программы разместились на этом виртуальном «пьедестале почета» - об этом чуть позднее...

пятница, 24 июля 2009 г.

Блогописи не горят

В январе 2007 года решил я открыть свой блог. Не будучи знатоком английского языка, попытался найти удобный (и бесплатный :-) сервис, имеющий русский интерфейс. Смутно припоминаю, что, попробовав несколько вариантов, остановил свой выбор на Blog.com.
Вынашивая наполеоновские планы, я создал не один блог, а три, чтобы не смешивать рассказы о событиях моего родного города, страны, и планеты.
Энтузиазма хватило всего на несколько постов в каждом из блогов. Потом подвернулась какая-то срочная работа и вспоминал я об этой "пробе пера" все реже и реже.
В конце ноября 2008 года вдруг получаю от blog.com. сообщение, что к моему блогу о жизни города был добавлен комментарий. Я был тронут небезразличием неизвестного читателя к моим опусам.
Сегодня хотел похвастать своими литературными талантами, но прежде чем показать блог коллеге, сам попытался открыть его (вдруг не работает ?). И, действительно, вместо знакомых текстов увидел стартовую страницу blog.com с сообщением о том, что мой блог не найден. На ней же была информация о переходе сервиса на новый движок. Очевидно, переделывалась и структура сайта, что могло стать причиной недоступности блогов, зарегистрированных в региональных подразделах сервиса.
Будучи на 99,9% уверенным, что мои блоги скоро восстанут из временного небытия, я все-таки написал письмо в службу поддержки, кратенько изложив ситуацию. Тут же получил стандартный ответ, что заявка принята. Приятно удивило наличие в ответном письме адреса странички, на которой будет отражаться состояние именно моей проблемы. Буду наведываться...

четверг, 23 июля 2009 г.

Уроки чистописания

Кажется, лишь недавно XP начала сдавать свои позиции на рынке операционных систем под натиском Vista. А скоро выйдет и Windows 7, RC-версии которой - уже не экзотика. Неработоспособность или ограниченная функциональность своего продукта (в нашем случае - скринсейвера) под какой-либо из этих ОС - прямой удар по карману шароварщика. Не каждый пользователь захочет (а "чайник" - не сможет) настроить режим совместимости со своей операционкой - ему проще будет найти другой скринсейвер... :-(
Что делать ? Для начала - прочитать в журнале "Компьютер Пресс" статью "Создание приложений, корректно работающих под Windows XP, Windows Server 2003 и Windows Vista. Уроки чистописания" известного Microsoft-специалиста Алексея Федорова. Затем - заглянуть в блог группы российского представительства Microsoft по работе с компаниями-разработчиками, где публикуется информация о технологическиx новинках. А потом уже можно будет помечтать о логотипе "Compatible with Windows 7" для своего творения.

P.S. Еще советую два руководства "Обеспечение совместимости приложений в Microsoft Windows Vista и Windows 7", написанные тем же Алексеем Федоровым в 2009 году:
1) Руководство для разработчиков (pdf; 5,49 Мб; 96 стр.)
2) Руководство для IT-специалистов (pdf; 2,27 Мб; 64 стр.)

среда, 22 июля 2009 г.

Анатомия изменника

Сегодня зоркий взгляд моего коллеги подметил в присланном ему документе восхитительную фразу: "Каждому изменнику - подарок!". В абзаце, посвященном детским праздникам, она выглядела как пулемет в магазине игрушек.
Сразу стало ясно, что автор имел в виду именинников, но, какова по-вашему вероятность опечатки, одновременно добавившей "з" и убравшей "ин"?
Заподозрив вмешательство машинного разума, я открыл Open Office и на чистом листе набрал слово "именнику". Умная программа подчеркнула его красной волнистой линией и через контекстное меню предложила заменить любым из четырех найденных спеллчекером вариантов. "Изменнику" в этом списке стояло первым, а "имениннику" - вторым. Диагноз полностью подтвердился...
Вывод: когда проверка орфографии предлагает варианты исправлений, первый вариант - не обязательно правильный.

вторник, 21 июля 2009 г.

Поэтапная процедура

Сегодня обновил программу Mail.ru Agent, которая заменяет мне ICQ. Сначала в системном трее появилось уведомление о том, что доступна новая версия. Щелкнул по нему - открылось окно, в котором я прочитал о главных нововведениях новой версии. Нажал в этом окне на соответствующую кнопку - скачался инсталлятор, который и переустановил Mail.ru Agent.
Эта процедура напомнила мне эпизод старой чехословацкой кинокомедии "Призрак замка Моррисвилль". Главный злодей сидел в тюремной камере, которая находилась на вершине башни. Его сообщники привязали к арбалетной стреле прочную нитку. Не отягощенная грузом стрела долетела до окна камеры. Узник втянул метров 40-50 нитки - к ней была привязана такой же длины бечевка. А уже к бечевке прикрепили толстую веревку, которая выдержала вес не только снаряжения, необходимого для организации побега, но и самого преступника.
Думаю, автор этой идеи был бы неплохим программистом...

понедельник, 20 июля 2009 г.

Проверено ? Мин нет ?

Зашел я сегодня в банк, чтобы заплатить за квартиру, увидел простаивающий компьютер, и спросил себя: «Каковы шансы увидеть на его экране свой шароварный скринсейвер ?» Ответ очевиден: нулевые :-( И даже не потому, что скринсейвер не умеет вычислять сложные проценты, а потому, что у банка нет никакой гарантии, что внутри моей программы не заложен какой-нибудь вредоносный код.
Не все пользователи мыслят как специалисты по безопасности. Но, повысив доверие пользователя к своей программе, я могу косвенно стимулировать его к скачиванию и последующей покупке (как мне кажется).
Как повысить доверие ? Прямым текстом, думаю, бесполезно. А вот если рядом со ссылкой на свой скринсейвер будут ссылки на пару авторитетных антивирусов и программ, отлавливающих всякий шпионский софт, у пользователя должна промелькнуть мысль, что авторы ничего потенциально опасного в свой скринсейвер не заложили.

воскресенье, 19 июля 2009 г.

Гадкий гаджет

Поставил на свою iGoogle-страничку гаджет для быстрого добавления сообщений в этот blogger-блог. Оказалось, что кодировать русские буквы не получается у него, а кодировать свои мысли языком Шекспира - у меня. Как говорится, не сошлись характерами ... Придется удалить :-(
Вывод: прежде чем добавить гаджет, неплохо почитать комментарии к нему.

История первого скринсейвера

В студенческие годы я еще успел поработать на компьютерах, для которых программу набивали на перфокартах (это такие тонкие картонки с дырочками :-), а результаты ее выполнения можно было только напечатать. Для них скринсейверы не могли существовать в принципе.
С появлением ЭЛТ-дисплеев возникла такая проблема: если изображение на экране долго оставалось неизменным, электронная пушка бомбардировала одни и те же участки люминофора. Яркость экрана ЭЛТ-телевизора, для которого неподвижная "картинка" нехарактерна, равномерно снижается со временем ("садится трубка"). А на экране компьютерного монитора, выполненного по той же технологии, могли образовываться "выжженные" области, на которых уже ничего нельзя было разглядеть, при нормальной яркости остальных пикселов.
Говорят, первым одолел эту проблему знаменитый Питер Нортон. Его Norton Commander, зафиксировав отсутствие активности пользователя в течение заданного времени, запускал подпрограмму, имитировавшую полет в черноте космоса среди множества крохотных белых звездочек. Нажатие любой клавиши восстанавливало изображение файловых панелей (да, так выглядел во времена MS-DOS "рабочий стол" :-). Постоянное перемещение светящихся точек сохраняло (save) экран (screen) от неравномерного разрушения люминофора. Это и был первый скринсейвер (screen saver).

Выше только звезды

Когда комментируешь свой С++ код, точно знаешь, что пользователь текст комментария никогда не увидит. Когда комментарии находятся в шаблоне HTML, ситуация несколько иная...
Открыв исходный текст странички одного форума (http://не буду его рекламировать), я увидел, что web-кодер хотел отделить содержательную часть страницы (верхнюю) от малоинтересного ее окончания. No comment ...

суббота, 18 июля 2009 г.

Страна Советов

Когда начинаешь работать над чем-то новым (для авторов это - шароварный бизнес), часто хочется спросить совета у кого-то опытного и бывалого. Русскоязычные (ex-USSR) разработчики могут, посетив сайт http://swrus.com/ не только найти полезную информацию, но и присоединиться к сообществу независимых разработчиков shareware.