Форум программистов, компьютерный форум, киберфорум
OpenGL
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 19.05.2014
Сообщений: 8
1

Лазерный луч, который падает на зеркало и отражается

04.05.2015, 21:06. Показов 1981. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
народ прошу помощи, потому что не изучал OpenGL! мне нужно зделать лазерный луч который падает на зеркало и отбивается! может видео больше скажет https://www.youtube.com/watch?v=ixP10R07FU8
делал наброски на основе арканоида ток ничего не виходит) сложно делать игру когда не учил OpenGL а здать надо быстро) если кто делал что подобное помогите буду благодарен) код могу кинуть если надо ток не уверен что тот дерьмокод понравится) физика отражения вроде работает)
работаю в VS c++ 12) спасибо
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.05.2015, 21:06
Ответы с готовыми решениями:

Световой луч падает на плоское зеркало
2. Световой луч падает на плоское зеркало. Насколько увеличиться угол между падающим и отражённым...

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

Найти точку оси ординат, в которой луч падает на эту ось
Дано действительное число * (0 < * < *). Из точки (1, 1) под углом * к прямой x=1 выпущен световой...

Луч света падает под углом 45 градусов на стопку стеклянных плоскопараллельных пластинок
Луч света падает под углом 45 градусов на стопку стеклянных плоскопараллельных пластинок показатель...

3
1862 / 763 / 104
Регистрация: 01.10.2012
Сообщений: 4,115
05.05.2015, 09:57 2
Псевдокод, берете бумажку и рисуете чертеж, тогда все станет ясно
C++
1
2
3
4
5
6
7
Vec3D ReflectedRay( const Vec3D & ray,   // исходный луч, может быть нормирован или нет
              const Vec3D & N )    // нормаль к поверхности, должна быть нормирована
{
  Vec3D v = N * dot(ray, N);     // проекция луча на нормаль
  Vec3D h = ray - v;             // вторая компонента луча
  return h - v;                
}
Ну или короче
C++
1
Vec3D reflected = ray - N * dot(ray, N) * 2;
Луч раскладывается на 2 ортогональных вектора (v и h). При отражении одна компонента инвертируется а другая не меняется.
1
0 / 0 / 0
Регистрация: 19.05.2014
Сообщений: 8
06.05.2015, 02:15  [ТС] 3
я понимаю что такое нормаль и как должен отбиться луч и примерно догадываюсь как записать код для отбития, но я не понимаю что ты имел ввиду здесь dot(ray, N) ?и я не знаю как рисовать луч!) с помощью GL Lines ? я использовал мячик вместо луча) и пробовал зеркало сделать но толком ничего не получилось) Rotate - вращает все поле а не зеркало) я ток начал в openGL и ничего не понятно)
вот что я делал) код для игры арканоид
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
void Ball::move() 
{                             //поле 300х300
    x+=dx;          
    y+=dy;          
    if(x-r<=0)      //проверка находится ли мяч возле стенки
    {
        x=r;        //координата х - стенка) r-радиус мяча   
        dx*=-1; //после удара меняет направление на обратное       
    }
    else if(y-r<=0)
    {
        y=r;
        dy*=-1;
    }
    else if(x+r>=300)
    {
        x=300-r;
        dx*=-1;
    }
    else if(y+r>=300)
    {
        y=300-r;
        dy*=-1;
    }
    else if(y+r>=r_y1 && y+r<=r_y1+r_h1 && x>r_x1 && x<r_x1+r_w1)   
    {
        y=r_y1-r;
        dy*=-1;
    }
    else if(y+r>=r_y && y+r<=r_y+r_h && x>r_x && x<r_x+r_w) 
    {
        y=r_y-r;
        dy*=-1;
    }
        else if(y>300)      //випадает за нижнюю стенку)  
        {
        active=false;      //неактивен) а значит возвращается на площадку 
        }   
}
void MousePress(int button, int state, int x, int y)
{
    if(button==GLUT_LEFT_BUTTON && !ball.active)
    {
        ball.active=true;
        ball.dx=2;          //скорость перемещения по х
        ball.dy=-4;         //по у
    }
}
void Mouse(int ax, int ay)  
{
    r_x=ax-r_w/2;           //середина ракетки 
    if(!ball.active)        //мячик на ракетке?
    {
        ball.x=r_x+r_w/2;   
        ball.y=r_y-ball.r;  
    }
}
0
1862 / 763 / 104
Регистрация: 01.10.2012
Сообщений: 4,115
07.05.2015, 08:39 4
Цитата Сообщение от Vovochka Посмотреть сообщение
..как должен отбиться луч
"Отразиться"
Цитата Сообщение от Vovochka Посмотреть сообщение
..но я не понимаю что ты имел ввиду здесь dot(ray, N) ?
Скалярное произведение двух векторов
Цитата Сообщение от Vovochka Посмотреть сообщение
..я ток начал в openGL и ничего не понятно
А зачем Вы упорно сообщаете об этом миру? Это и так видно по Вашим вопросам.
Цитата Сообщение от Vovochka Посмотреть сообщение
вот что я делал) код для игры арканоид
Для начинающего не так уж плохо. Только если dx/dy могут быть только +/- 1, то и лучи могут идти только по осям и диагоналям, какой-то неуклюжий арканоид получается. Если нормально делать то есть позиция (структура float x, y), вектор скорости (тоже структура). А с разбросанными x, dх и др можно долго пыль глотать, но без толку
0
07.05.2015, 08:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.05.2015, 08:39
Помогаю со студенческими работами здесь

Изобразить луч, который двигается по кругу
Выдает ошибку &quot;Встречено 'end', а ожидалось ';'&quot; uses graphabc; var...

Как обратиться к объекту в который бьет луч?
Как обратиться к объекту в который бьет луч? То есть, есть такая запись: private RaycastHit...

Под каким углом к оси Ох надо направить луч из точки A(2;4), чтобы отраженный луч прошел через точку В(-5;3) ?
Под каким углом к оси Ох надо направить луч из точки A(2;4), чтобы отраженный луч прошел через...

Sony vaio sve1711q1rw - на экране появился полупрозрачный луч который исчезает только при выключении
Вчера заметила на экране луч. Один конец его светился очень ярко, дальше он был полупрозрачный....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru