Логин: Пароль:    Регистрация Всеми возможностями сайта можно пользоваться
только после авторизации.
   Забыли пароль?

Поиск
L



Статистика
u
Пользователи онлайн: нет
Гостей онлайн: 7
Всего онлайн: 7
Зарегистрировано юзеров: 7879
Комментариев на сайте: 690
Новый юзер: Egen_M



Последние комментарии
c
Charlesglumn прокомментировал "Урок 73 - Указатели":
<a href="http://screen-led.ru">светодиодный экран</a> <a href="http://screen-led.ru">аренда светодиодного экрана</a> <a href="http://screen-led.ru">светодиодный экран купить</a> <a href="http://screen-led.ru">светодиодный экран цена</a> <a href="http://screen-led.ru">светодиодный экран led</a> <a href="http://screen-led.ru">разрешение светодиодных экранов</a> <a href="http://screen-led.ru">уличный светодиодный экран</a> <a href="http://screen-led.ru">светодиодные экраны москва</a> <a href="http://screen-led.ru">светодиодные экраны типы</a> <a href="http://screen-led.ru">светодиодный экран чтобы помещений</a> <a href="http://screen-led.ru">светодиодные экраны размеры</a> <a href="http://screen-led.ru">hd светодиодные экраны</a> светодиодный экран купить 8-800-550-2316 info@screen-led.ru 150003, РФ, г. ЯРОСЛАВЛЬ, ул. ПОЛУШКИНА РОЩА, д. 9, оф. 4
Arthurneime прокомментировал "Урок 3 - Конструкция IF...THEN...ELSE":
[img]https://avatars.mds.yandex.net/get-pdb/1708639/cc1462cd-ed78-4920-b735-46dd5c06d89d/s375[/img] [b]Как обыграть Казино??? Миф или трудная реальность?[/b] Если и есть что-то, что все знают об азартных играх, так это то, что дом всегда выигрывает. И хотя это правда, что казино всегда приносят прибыль, есть несколько способов обмануть систему – некоторые из которых на самом деле совершенно законны. Полвека назад математик Эдвард Торп опубликовал новаторскую книгу, в которой описал, как игрок может использовать “подсчет карт”, чтобы получить преимущество в игре Блэкджек, отслеживая карты, оставшиеся в колоде. С тех пор казино пытаются искоренить подсчет карт, а счетчики карт становятся все более искусными в том, чтобы не попасться. Так можно ли сегодня переиграть казино? И каково же будет в будущем? Выигрышная Рука В Блэкджеке. Викисклад Казино - это бизнес, и они работают, создавая маржу-часто называемую краем дома. Если вы играете в рулетку и делаете ставку на один номер, то вам будут платить с коэффициентом 35-1, когда истинные шансы составляют 36-1 в Европе и 37-1 в США. Тот факт, что вы получаете меньше, чем истинные шансы, является преимуществом дома и объясняет, почему казино зарабатывают деньги в долгосрочной перспективе. Конечно, некоторые люди должны выигрывать, иначе казино перестанут существовать. Source: https://vk.com/video-195820899_456239021 https://zen.yandex.ru/media/id/5ce017f600ad2100b3939f53/sluchai-v-kazino-5ed8b67b5db2e716a6031ac2 Tags: бит казино играть казино вулкан сайт казино фортуна плей

Урок 8 - Игровая камера

  В этом уроке я опишу, как сделать игровую камеру, т. е. камера, управляемая при помощи мышки и клавиатуры. Можно будет смотреть во все стороны и передвигаться.

Разбираем код программы:
В раздел Var заносим переменные:

MouseMove1: boolean;
  TempX1,TempY1,SingX,SingY,TempX2,TempY2 : integer;
  Point: Tpoint;
  Camera: TCamera;
В процедуре FormPaint:
try                                                      
if MouseMove1=false then                                 
begin                                                    
GetCursorPos(Point);                                     
TempX1:=point.X;                                         
TempY1:=point.Y;                                         
MouseMove1:=true;                                        
end;                                                     
finally                                                  
                                                         
SetCursorPos(screen.Width div 2,screen.Height div 2); //Центруем курсор
GetCursorPos(Point) ;  //получаем координаты и записываем их в переменную Point
 if MouseMove1=true then                                               
  begin                                                  
TempX2:=point.X;                                         
TempY2:=point.Y;                                         
SingX:=TempX1-TempX2;                                    
SingY:=TempY1-TempY2;                                    
if  (Camera.phiY<=90) and (Camera.phiY>=-90) then        
 begin                                                   
 Camera.phiY:=Camera.phiY+(-SingY/8);                    
 end                                                     
 else                                                    
 begin                                                   
   if Camera.phiY>=90 then  //Ограничения           
  Camera.phiY:=90;          //На 
  if Camera.phiY<=-90 then  //Угол обзора 
  Camera.phiY:=-90;         //По вертикали
  end;                                                 
Camera.phiX:=Camera.phiX+(-SingX/4);                     
TempX1:=0;                                               
TempY1:=0;                                               
TempX2:=0;                                               
TempY2:=0;                                               
SingX:=0;                                                
SingY:=0;                                                
MouseMove1:=false;                                       
 end;                                                    
end;                 

Конструкция try finally здесь обязательна т.к. сначала надо получить координаты курсора и только после этого позволить ему сместится и опять засечь его координаты.

Переменные TempX1 и TempY1 – координаты до смещения.
Переменные TempX2 и TempY2 – координаты после смещения.
Переменные SingX и SingY – разница между предыдущими и новыми координатами.

Для работы кода необходимо создать 2 составных типа переменных:
type

   TVector = record  //Вектор
   X,Y,Z:GLfloat;
   end;


   TCamera = record
   Pos: Tvector;       //Позиция камеры
   PhiY: single;         //вертикальный улол поворота камеры
   PhiX: single;         //горизонтальный
   Speed: glFloat;   //Скорость камеры
   end;
Коэффициенты смещения по горизонтали и вертикали делятся на 4 и 8 – это чувствительность мыши.

Мы будем поворачивать и двигать не камеру а МИР вокруг камеры. Самыми простыми функциями glRotatef и glTranslatef
ВАЖНО: Эти функции нужно вызывать в особом порядке!!!

Сначала повернем мир по вертикале, а потом по горизонтали и совершим перемещение.
glRotatef(-Camera.PhiY-90,1,0,0); //поворот по вертикали
glRotatef(-Camera.PhiX,0,0,1);     //поворот по горизонтали
glTranslatef(-Camera.Pos.X,-Camera.Pos.Y,-Camera.Pos.Z);  //смешение мира
Это нужно делать до отрисовки сцены, позиции источников света тоже надо задавать после. Теперь надо сделать обработку клавиатуры.

В раздел Const:
VK_W = $57;
VK_S = $53;
VK_D = $44;
VK_A = $41;
VK_SHIFT = $10;
VK_SPACE = $20;
В процедуре FormPaint после обработки мыши:
if (GetAsyncKeyState(VK_W)<>0) or (GetAsyncKeyState(VK_S)<>0) or
    (GetAsyncKeyState(VK_D)<>0) or (GetAsyncKeyState(VK_A)<>0)  then
  begin
   Camera.Speed:=0.005;

if (GetAsyncKeyState(VK_W)<>0) then
   begin
    Camera.Pos.X:=Camera.Pos.X+Camera.Speed*cos((Camera.phiX+90)*Pi/180);
    Camera.Pos.Y:=Camera.Pos.Y+Camera.Speed*sin((Camera.phiX+90)*Pi/180);
   end;
     //Назад
   if (GetAsyncKeyState(VK_S)<>0) then
   begin
    Camera.Pos.X:=Camera.Pos.X+Camera.Speed*cos((Camera.phiX-90)*Pi/180);
    Camera.Pos.Y:=Camera.Pos.Y+Camera.Speed*sin((Camera.phiX-90)*Pi/180);
   end;
     //Вправо
   if (GetAsyncKeyState(VK_D)<>0) then
   begin
    Camera.Pos.X:=Camera.Pos.X+Camera.Speed*cos((Camera.phiX)*Pi/180);
    Camera.Pos.Y:=Camera.Pos.Y+Camera.Speed*sin((Camera.phiX)*Pi/180);
   end;
     //Влево
   if (GetAsyncKeyState(VK_A)<>0) then
   begin
    Camera.Pos.X:=Camera.Pos.X+Camera.Speed*cos((Camera.phiX+180)*Pi/180);
    Camera.Pos.Y:=Camera.Pos.Y+Camera.Speed*sin((Camera.phiX+180)*Pi/180);
   end;
  end;
//Вниз
  if (GetAsyncKeyState(VK_SHIFT)<>0) then   Camera.Pos.Z:=Camera.Pos.Z-0.005;
//Вверх
  if (GetAsyncKeyState(VK_SPACE)<>0) then   Camera.Pos.Z:=Camera.Pos.Z+0.005;
Функция GetAsyncKeyState(индекс) отслеживает нажатия клавиш в системе независимо статуса активности приложения.

Управление:

W – Вперёд
S – Назад
A – Влево
D – Вправо
Shift – Вниз
Space – Вверх

И нарисуем сцену:
glBindTexture(GL_TEXTURE_2D,Glass);
RenderBox; //куб

glBindTexture(GL_TEXTURE_2D,Eart);
glBegin(GL_QUADS);
glNormal(0.5,0.5,1);
glTexCoord(0,1); glVertex3f(-10,10,-1.1);
glTexCoord(1,1); glVertex3f(10,10,-1.1);
glTexCoord(1,0); glVertex3f(10,-10,-1.1);
glTexCoord(0,0); glVertex3f(-10,-10,-1.1);
glEnd;
В этом примере появилась новая функция задания перспективы:
gluPerspective(Угол обзора, ClientWidth/ClientHeight,ближайшая точка, дальняя точка);



Осталось только сделать в ObjectIspector параметр Form1.BorderStyle = none и WindowState = maximize. Всё простенькая игра готова.

Зарегистрируйтесь или авторизуйтесь, чтобы скачать.


Источник: www.thedelphi.ru
Автор: Клящицкий Виталий
Опубликовано: 14 Июля 2012
Просмотров: 21043

Урок 7 - Туман Урок 9 - Экспорт .3DS модели из 3DS max 2009 в OpenGL

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



аватар Добавил: oktavius [Новичок] Дата: 2012-11-21
А как загрузить карту с 3dMax?




аватар Добавил: Klesh [Программист] Дата: 2012-11-21
Окей, в ближайшее время будет опубликован урок по экспорту модели в формате 3DS из 3ds max.




аватар Добавил: oktavius [Новичок] Дата: 2012-11-22
Отлично буду очень рад)




аватар Добавил: juzhnij [Новичок] Дата: 2013-05-20
У меня возникла проблема с которой я никак не могу справиться - когда я разворачиваюсь в виртуальном пространстве все текстуры начинают просвечиваться насквозь, мне набо накладывать на те же координаты текстуры в обратную сторону или есть проще решение?




аватар Добавил: juzhnij [Новичок] Дата: 2013-05-20
Ну и плюс к этому в движении иногда текстура на текстуру в какой то части накладывается, как будто они по многу раз за кадр прорисовываются.




аватар Добавил: juzhnij [Новичок] Дата: 2013-05-22
Спасибо за неучастие, проблему решил самостоятельно.




аватар Добавил(а): evgen8195 [Новичок] Дата: 2014-05-12
Вопрос: как сделать так чтобы отображался и двигался(!) курсор мыши?




аватар Добавил(а): mrcheat [Новичок] Дата: 2019-02-16
ЧЗХ: Клавиатурное управление не работает(( Чо делать?