ПРОГРАММИРОВАНИЕ И ДИЗАЙН
Выпуск #21 - 18 июля 2002 года (архив рассылки)
Всего подписчиков: 5981
В этом выпуске:
 > Новости
 > Вопросы читателей (7)
 > Ответы на предыдущие вопросы (8)
 > Пишем свою собственную 3D игру (часть 2)
 > Java скрипты
 > Ссылки
 > Авторам
Новости
18 июля 2002
 > Вышел 21й выпуск рассылки.
 > Добавлены ещё 2 игры на JavaScript: Шашки и Пятнашки

 > Исправлены некоторые ошибки, из-за которых рассылка некорректно выглядела в TheBat! Если Вы нашли какие-то ошибки, и Ваш почтовый клиент показывает рассылку не так, как Internet Explorer, то пишите на prs@narod.ru
Вопросы читателей
Вопрос 51
Задавал вопрос по обработке сканированного изображения...
Имелось ввиду решение в виде программы на VB !
Допускается обращение (программное!) к другим программам. Можно, например, в ACDSee изменить тип сохраняемого файла? Я уже справился с кодом преобразования размера (запускаю SHELL..., нажимаю CTRL+R c помощью keybd_event, там настройки не меняются и жму ОК с помощью PostMessageA), далее - тем же порядком CTRL+S - "сохранить как", а дальше - не могу изменить тип сохраняемого файла. Это из-за контрола ImgScan, который не даёт возможности сохранить JPG.
Буду презнателен за подсказки.
Сергей sima@ellink.ru

Ответить

Вопрос 52
Привет!
Установила у себя демо-версию Dreamweavwer'а. Не получается настроить русский шрифт. Выбираю Edit-> Preferences->Font, пыталась установить там шрифт Cyrillic либо Windows1252. Жму ОК, набираю текст - не то. Открываю вкладку - опять стоит Greek. И так пять раз...

Ответить

Вопрос 53
Доброго времени суток,
Пытаюсь создать элемент управления, в котором используется control Image. В готовый элемент управления должны будут вставлятся gif изображения с прозрачным фоном. Но весь фокус в том, что сделать прозрачным фон самого контейнера элемента управления у меня получилось (свойство BackStyle), а Image нет. И в результате при использовании у рисунков получается серый фон. Посоветуйте пожалуйста, что делать.

Ответить

Вопрос 54
Доброго времени суток!
Подскажите пожалуйста как средствами Visual Basic проиграть avi файл, но так чтобы размер окна, где происходит воспроизведение можно было масштабировать.

Ответить

Вопрос 55
Здраствуйте всем!!!

У меня 2 вопроса.

1). Tсти у когото електроная книга по ASP?
2). И какой сервер лутше для просмотра Perl скриптов если у меня стоит Windows 2000.

Ответить

Вопрос 56
plz пожалуйста подскажите код который при запуске будет копироваться в системную папку и при следующем запуске запускалась бы без глюков, (прога должна запускаться вместе с Windows....но код который я использовал чет глючит ) . Visual basic
Огромное СПАСИБО ЗАРАНИЕ
reebok100@mail.ru

Ответить

Вопрос 57
Как изменить иконку у страницы, добавленной в "Избранное" в IE?

Ответить

Вопросы задавайте на этой странице, на e-mail: prs@narod.ru, или заполнив эту форму (отправляется через почтовый клиент):
Вопрос:

(откроется в почтовом клиенте)
Ответы на предыдущие вопросы
Вопрос 45
Здравствуйте!

Подскажите, как перехватить нажатие клавиши НАЗАД (Back) на любом броузере? Я не хочу, что бы броузер выполнял команду "history.go(-1)", так как страничка полностью генерируется ***.asp-файлом за несколько шагов и поэтому операция "history.go(-1)" не приводит к ожидаемому результату. Отмена кэширования не помогает.

Надо выполнить несколько иные действия вместо возврата назад, например, "history.go(-4); refresh(); имитация нажатия клавиши "Повторить";... "

Если возможно, то ответ в кодах VBScript.

Ответ прислал Иван aka Atlanoff
Доброе время суток.
--
У меня была такая проблема. Решить не смог, хотя всё обыскал. Пробовал убрать изнутри кнопки и строку адреса но всё равно работает кнопка BackSpace Я у себя сделал так:
В таких критических страницах расставил флажки, и в начале страницы флажки проверял. Можно объект session использовать для флажков. При попытке шаг влево-вправо надо ругаться нехорошими словами и наставлять пользователя на путь истинный. (можно просто возвращать пользователя обратно и не ругаться) Кодов не даю - потому как всё это по обстоятельствам и не трудно. Но если ты отрубишь "history", то у пользователя всегда останется строка адреса.

А кеширование тут совсем не причём.
Но лучше оставь "no-cashe".
А то тебя чей-прокси закеширует - могут быть проблемы.
--
С наилучшими пожеланиями,
 Иван         mailto:atlanoff@pisem.net

Вопрос 48
Пожалуйста подскажите что делать.

Когда соединяюсь с провайдером по dial-up, связь рвется через одну-две минуты, а иногда и раньше. Уже замучился.

Виновата ли в этом только телефонная линия?
Уже перепробовал три разных номера.
Или причина может быть другой?

Спасибо,

Марат

Ответ прислал Gorky Jury
У меня похожая ситуация была, исправили корректом строки инициализации. У меня она такая:

AT+MS=11,1,19200,24000 S9=40 S10=150 S91=15

Первая часть устанавливает скорость, вторая – чувствительность. Значения в ней получены были простой подборкой, но могут и тебе подойти. Если нет – можешь попробовать покрутить.

Ответ прислал Алексей
Было такое.
Нет, телефонная линия не виновата.
Под Dimailw (есть такой почтовый клиент) удалось решить уменьшением скорости порта для модема.
Для Dial-up, покапайтесь в настройках соединения(биты чётности, скорость порта и т.п.). Возможно и поможет.

Алексей О.

Вопрос 49
Как на http://yandex.narod.ru разместить свой сайт. Он у меня уже готовый на жёском диске и мне хотелось бы разместить его там, но там выскакивают какие то помощники... И вообще как проходит эта процедура. В общем я не понял. Объясните, пожалуйста. Заранее благодарен.

Ответ прислал Иван aka Atlanoff
Доброе время суток.
--
http://narod.yandex.ru/help/_default.htm
Там всё есть. Регистрация, закачка по FTP, счётчики, почта ...
--
С наилучшими пожеланиями,
 Иван

Ответ прислал wba@ua.fm
Здравствуйте!

Проще всего, используя Ваш броузер, набрать в строке адреса:
ftp://ВашЛогин:ВашПароль@ftp.narod.ru
а затем, воспользовавшись технологией 'drag-and-drop', перетащить Ваши данные из Эксплорера в окно Броузера

Ответ прислал Spectrol
Все проще простого заходим http://yandex.narod.ru
Нажимаем кнопку регистрация. Заполняем анкетку. Отвечаем еще на пару вопросов и все.
Если у вас ничего так и не получится, то лучше размещайте свой сайт на http://by.ru хостинг тоже бесплатный, места unlimit, удобная статистика в общем все тоже что и на http://yandex.narod.ru. У меня там 2 сайта. Так что если будут еще проблемы, то пиши на
mailto:Spectrol@tut.by

Ответ прислал Виталик
Заходишь на www.narod.ru
Там у тебя будет форма и кнопка занять или что-то вроде этого ты
водишь название своего сайта и нажимаешь кнопку и потом вылазит
анкета. ну а дальше разберешься.

P.S.
Когда зальешь пришлешь ссылку. p_vs@beep.ru.

Вопрос 50
Задача: взять изображение со сканера, преобразовать в опред. размеры (пиксел х пиксел), сохранить на диск в формате JPEG.
Сергей. sima@ellink.ru

Ответ прислал Виталик
В Microsoft Photo Editor.

Пишем свою собственную 3D игру (часть 2)
OpenGL/DirectX для начинающих

Давайте разберемся с синтаксисом команд, используемых в OpenGL. Первое, что хочется сказать, это то, что в OpenGL названия типов данных отличаются от названий в Си++ (то есть эти типы переопределены). Например, тип Glint в OpenGL - это тип int в Си++. Зачем такое делать? Все это делалось по одной причине - для переносимости кода на другие платформы (операционные системы).

Итак, давайте рассмотрим основные типы данных:

GLint - int
GLuint - unsigned int
GLfloat - float
GLdouble - double
GLbyte - char

С этим я думаю все ясно (то есть, мы просто к типу добавляем две буквы - GL). Теперь разберем синтаксис всех команд. Для того, что бы все команды были понятны, они имеют следующий вид:

glCommand_name[n][type][v]

Таким образом имя любой команды состоит из нескольких частей:

gl - это имя библиотеки, в которой находиться данная функция. Мы можем использовать и другие библиотеки, а именно: glu - библиотека GLU, glut-функции из библиотеки GLUT, glaux - библиотека GLAUX.

Comand_name - это имя команды, например InitWindowSize (эта команда нам должна быть уже известна с прошлой статьи).

[n] - число аргументов.

[type] Тип аргумента. Возможные типы:
f GLfloat
d GLdouble
s GLshort
us GLushort
b GLbyte
ub GLubyte

[v] Если указан этот параметр, то это означает, что в качестве параметров функции используется указатель на массив.

Теперь давайте рассмотрим пару функций, чтобы закрепить то, что мы только что выучили:

Функция glColor3d(0.1,0.5,0.3); означает, что мы используем функцию, которая находиться в библиотеке GL (приставка gl). Эта функция состоит из трех параметров, типа GLdouble (3d).

Функция glVertex2f(1.5,0.9); 2f - два параметра, типа float (GLfloat).

Помимо основной библиотеки, существует и несколько других дополнительных библиотек, которые мы также будем использовать в нашей работе. Первая из таких библиотек - это GLU (GLU - graphics utility library). Все функции этой библиотеки обращаются к функциям из GL и в ее состав входят обычно функции для рисования сложных объектов, типа сфер, конуса, цилиндра, и т.д. Эта библиотека входит во все версии OpenGL.

Вторая дополнительная библиотека ответственная за взаимодействия с системой окон. Называется она GLUT (GL Utility Toolkit). Она содержит функции, которые могут понадобится при работе с окнами.

Существует еще такая библиотека, как GLAUX. Она предназначена для того, чтобы упростить себе жизнь. Например, с помощью этой библиотеки очень просто рисуются такие объекты, как сферы, кубы, и др. сложные объекты. Но, лучше для таких целей использовать библиотеку GLUT, так как в GLAUX есть некоторые ошибки (некоторые объекты не совсем правильно отображаются).

Наверное, пора уже приступать к рисованию. Для начала, мы научимся рисовать точки, линии, квадраты, треугольники, четырехугольники, и полигоны. Все это рисуется почти по одной же схеме. Для того чтобы научиться все это рисовать, мы должны разобраться с таким понятием, как примитив.

Что такое этот примитив? Это объединение вершин в одно целое. То есть, примитив задается набором вершин. Вершина (Vertex) - это просто-напросто координата точки на экране. Например, треугольник можно нарисовать с помощью 3-х вершин (в двухмерной системе координат), для рисования линии нам хватит и двух, и т.д.

Синтаксис задания вершин таков:

glBegin(тип);
glVertex*(:);
:
glVertex*(:);
glEnd();

Где, * может быть [2,3][i,d,f,b], в зависимости от количества точек, и от типа чисел, которые мы будет использовать при задании точки. Например, если мы будем рисовать в двухмерном пространстве, и при этом использовать тип double, тогда функция будет иметь вид: glVertex2d(x,y);
Я думаю с этим все ясно. А теперь займемся самим рисованием. Первое, что мы будем рисовать - это точки. Но, перед этим давайте настроим наше приложение. Вот код, который мы написали в 1 статье:

#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>
void Display(void)
{
}
void main(int argc,char **argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowSize(400,500);
glutInitWindowPosition(0,0);
glutCreateWindow("OpenGL Lesson2");
glutDisplayFunc(Display);
glutMainLoop();
}

Как вы помните, у нас создалось некрасивое, прозрачное окно. Давайте теперь зададим цвет окна. Для этого в функцию main() допишем одну строку: glClearColor(r,g,b,t); Где, r - красный цвет, g - зеленый, b - голубой, t - прозрачность. Значение цветов выставлять нужно в диапазоне от 0 до 1 (т.е. 0.01, 0.2, 0.5, 0.83 и т.д.). Итак, выставьте нужный вам цвет, например, поставим цвет фона белый.
glClearColor(1,1,1,1);
И теперь нужно в функцию Display(void) добавить еще одну строку:
glClear(GL_COLOR_BUFFER_BIT);
Этой командой мы закрашиваем цвет фона в тот цвет, который указали в функции glClearColor(r,g,b,t);

Давайте посмотрим на полный листинг нашей программы:

//подключаем библиотеки
#include <GL/gl.h>
#include <GL/glut.h>

//функция для рисования
void Display(void)
{
//закрасить фон
glClear(GL_COLOR_BUFFER_BIT);
}

//главная функция
void main(int argc,char **argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowSize(400,500);
glutInitWindowPosition(0,0);
glutCreateWindow("OpenGL Lesson2");
//задаем цвет фона, здесь - белый
glClearColor(1,1,1,1);
glutDisplayFunc(Display);
glutMainLoop();
}

Запустите это приложение теперь. И что мы видим? Правильно, красивое белое окно! :)

Теперь что ни будь нарисуем. Итак, для рисования фигуры нам одной вершины не достаточно. Для это нам нужно объединить несколько вершин. (то есть, как мы уже знаем - задать примитив). Задание примитива происходит внутри командных скобок:

void glBegin (GLenum mode);
void glEnd (void);

Параметр mode определяет тип примитива, который задается внутри и может принимать следующие значения:

GL_POINTS каждая вершина задает координаты некоторой точки.

GL_LINES каждая отдельная пара вершин определяет отрезок; если задано нечетное число вершин, то последняя вершина игно рируется.

GL_LINE_STRIP каждая следующая вершина задает отрезок вместе с предыдущей.

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

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

GL_TRIANGLE_STRIP каждая следующая вершина задает треугольник вместе с двумя предыдущими.

GL_TRIANGLE_FAN треугольники задаются первой и каждой следующей парой вершин (пары не пересекаются).

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

GL_POLYGON последовательно задаются вершины выпуклого многоугольника.

Теперь давайте разберем это на одном примере (нарисуем одну линию).

#include <GL/gl.h>
#include <GL/glut.h>

void Display(void)
{
//закрашиваем цветом
glClear(GL_COLOR_BUFFER_BIT);
//рисуем примитив - линию
glBegin(GL_LINES);
//цвет линии- черный
glColor3d(0,0,0);
//первая вершина
glVertex2d(-1,0);
//вторая вершина
glVertex2d(1,1);
//заканчиваем рисовать примитив
glEnd();
//выводим изображение на экран
glFlush();
}

void main(int argc,char **argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowSize(400,500);
glutInitWindowPosition(0,0);
glutCreateWindow("OpenGL Lesson2");
glClearColor(1,1,1,1);
glutDisplayFunc(Display);
glutMainLoop();
}

После запуска этого приложения мы с вами увидим окошко, в котором будет нарисована линия. В следующий раз мы научимся делать анимацию, и сделаем свою первую игру - <арканоидный теннис> (то есть, наша игра будет отличаться от арканоида тем, что в нее нужно будет играть двоим человекам, и стараться забить мячик друг другу).
До встречи.
Автор: Алексей (aka Virus) Сало
Сайт: OpenGL/DirectX для начинающих
Java скрипты
Игра "Пятнашки". Скачать архив с игрой и картинками можно с этой страницы.

Для зугрузки картинки откройте страницу в Online'е


Игра "Шашки". Скачать архив с игрой и картинками можно с этой страницы.

Для зугрузки картинки откройте страницу в Online'е


Ссылки
OpenGL/DirectX для начинающих
Сайт для тех, кто хочет научиться писать игры с использованием OpenGL и DirectX. Здесь вы сможете с нуля освоить 3D графику, и программирование с помощью OpenGL/DirectX на C++. На этом сайте вы найдете уроки, статьи, и многое другое...

Program Studio
Всё для программиста и WEB мастера.

Сайт Пахана
Техническая документация на Pascal и учебники по Delphi.
Авторам
Вы хотите, чтобы Ваши материалы были опубликованы в этой рассылке? Тогда пишите - prs@narod.ru. В качестве гонорара Вы получите от 100 до 10000 баннерных показов сети RLE (Gold), а также посетителей, которые зайдут к Вам на сайт со ссылок после статьи и в разделе "Ссылки". Давайте делать рассылку вместе!
Все выпуски рассылки, начиная с первого, Вы можете прочитать в архиве рассылки.

Сайт рассылки: Program Studio - всё для программиста и WEB мастера
Автор рассылки: Павел Николаевич

Ваши предложения, жалобы и рекомендации можете присылать на prs@narod.ru
Hosted by uCoz