0 / 0 / 0
Регистрация: 11.11.2014
Сообщений: 12
1

Как сделать, чтобы объекты не наезжали друг на друга?

06.11.2015, 11:56. Показов 1035. Ответов 2
Метки нет (Все метки)

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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
#include "stdafx.h"
#include "stdio.h"
#include <windows.h>
#include <glut.h>
 
float px = -1.0, py = -0.5, pz = 0.0;
float px1 = 0.5, py1 = -0.5, pz1 = 0.0;
float px2 = -1.0, py2 = 0.5, pz2 = 0.0;
float px3 = 0.5, py3 = 0.5, pz3 = 0.0;
float active = 1;
 
void resize(int w, int h)
{
    float ratio = w * 1.0 / h * 1.0;
    glViewport(0, 0, w, h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(50.0, ratio, 0.1, 100);
    glMatrixMode(GL_MODELVIEW);
}
 
void legoel(float lx, float ly, float lz, float sw, float sh, float sz)
{
    glColor3d(0.0, 1.0, 0.0);
    glBegin(GL_QUADS);
    glVertex3f(lx, ly, lz);
    glVertex3f(lx + sw, ly, lz);
    glVertex3f(lx + sw, ly + sh, lz);
    glVertex3f(lx, ly + sh, lz);
    glEnd();
    glColor3d(0.0, 1.0, 0.0);
    glBegin(GL_QUADS);
    glVertex3f(lx, ly, lz + sz);
    glVertex3f(lx + sw, ly, lz + sz);
    glVertex3f(lx + sw, ly + sh, lz + sz);
    glVertex3f(lx, ly + sh, lz + sz);
    glEnd();
    glColor3d(0.0, 1.0, 1.0);
    glBegin(GL_QUADS);
    glVertex3f(lx, ly + sh, lz);
    glVertex3f(lx, ly + sh, lz + sz);
    glVertex3f(lx + sw, ly + sh, lz + sz);
    glVertex3f(lx + sw, ly + sh, lz);
    glEnd();
    glColor3d(1.0, 0.0, 1.0);
    glBegin(GL_QUADS);
    glVertex3f(lx, ly, lz);
    glVertex3f(lx, ly, lz + sz);
    glVertex3f(lx + sw, ly, lz + sz);
    glVertex3f(lx + sw, ly, lz);
    glEnd();
    glColor3d(1.0, 0.0, 1.0);
    glBegin(GL_QUADS);
    glVertex3f(lx, ly, lz);
    glVertex3f(lx, ly, lz + sz);
    glVertex3f(lx, ly + sh, lz + sz);
    glVertex3f(lx, ly + sh, lz);
    glEnd();
    glColor3d(3.0, 0.0, 1.0);
    glBegin(GL_QUADS);
    glVertex3f(lx + sw, ly, lz);
    glVertex3f(lx + sw, ly, lz + sz);
    glVertex3f(lx + sw, ly + sh, lz + sz);
    glVertex3f(lx + sw, ly + sh, lz);
    glEnd();
}
 
 
void lego(float lx, float ly, float cr, float cg, float cb)
{
    glColor3d(cr, cg, cb);
    glBegin(GL_QUADS);
    glVertex3f(lx, ly, 0);
    glVertex3f(lx + 0.5, ly, 0);
    glVertex3f(lx + 0.5, ly + 0.3, 0);
    glVertex3f(lx, ly + 0.3, 0);
    glEnd();
    glColor3d(cr, cg, cb);
    glBegin(GL_QUADS);
    glVertex3f(lx, ly, 0.2);
    glVertex3f(lx + 0.5, ly, 0.2);
    glVertex3f(lx + 0.5, ly + 0.3, 0.2);
    glVertex3f(lx, ly + 0.3, 0.2);
    glEnd();
    glColor3d(1.0, 1.0, 1.0);
    glBegin(GL_QUADS);
    glVertex3f(lx, ly + 0.3, 0);
    glVertex3f(lx, ly + 0.3, 0.2);
    glVertex3f(lx + 0.5, ly + 0.3, 0.2);
    glVertex3f(lx + 0.5, ly + 0.3, 0);
    glEnd();
    glColor3d(1.0, 1.0, 1.0);
    glBegin(GL_QUADS);
    glVertex3f(lx, ly, 0);
    glVertex3f(lx, ly, 0.2);
    glVertex3f(lx + 0.5, ly, 0.2);
    glVertex3f(lx + 0.5, ly, 0);
    glEnd();
    glColor3d(0.0, 1.0, 1.0);
    glBegin(GL_QUADS);
    glVertex3f(lx, ly, 0);
    glVertex3f(lx, ly, 0.2);
    glVertex3f(lx, ly + 0.3, 0.2);
    glVertex3f(lx, ly + 0.3, 0);
    glEnd();
    glColor3d(0.0, 0.0, 1.0);
    glBegin(GL_QUADS);
    glVertex3f(lx + 0.5, ly, 0);
    glVertex3f(lx + 0.5, ly, 0.2);
    glVertex3f(lx + 0.5, ly + 0.3, 0.2);
    glVertex3f(lx + 0.5, ly + 0.3, 0);
    glEnd();
    legoel(lx + 0.05, ly + 0.3, 0.08, 0.05, 0.05, 0.05);
    legoel(lx + 0.40, ly + 0.3, 0.08, 0.05, 0.05, 0.05);
    legoel(lx + 0.23, ly + 0.3, 0.08, 0.05, 0.05, 0.05);
}
 
 
void light_and_material()
{
    float light0_diffuse[] = { 1.0, 1.0, 1.0, 1.0 };
    glLightfv(GL_LIGHT0, GL_DIFFUSE, light0_diffuse);
    float light0_position[] = { 0.0, 0.0, 10.0, 0.0 };
    glLightfv(GL_LIGHT0, GL_POSITION, light0_position);
    float light0_ambient[] = { 0.2, 0.2, 0.2, 0.3 };
    glLightfv(GL_LIGHT1, GL_AMBIENT, light0_ambient);
    float mat_amb_diff[] = { 1.0, 1.0, 1.0 ,1.0 };
    glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, mat_amb_diff);
    glMateriali(GL_FRONT, GL_SHININESS, 20);
}
 
void display(void)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_LIGHTING);
    glEnable(GL_COLOR_MATERIAL);
    glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
    glPushMatrix();
    gluLookAt(0, 0, 5, 0, 0, 0, 0, 1, 0);
    glEnable(GL_LIGHT0);
    lego(px, py, 1, 1, 0);
    lego(px1, py1, 0, 1, 0);
    lego(px2, py2, 1, 0, 1);
    lego(px3, py3, 0, 0, 1);
    glDisable(GL_LIGHT0);
    glPopMatrix();
    glDisable(GL_DEPTH_TEST);
    glDisable(GL_LIGHTING);
    glDisable(GL_COLOR_MATERIAL);
 
    glutSwapBuffers();
}
 
void keyboard(unsigned char key, int x, int y)
{
    switch (key) {
    case 'w':
        if (active == 1) { py = py + 0.1; }
        if (active == 2) { py1 = py1 + 0.1; }
        if (active == 3) { py2 = py2 + 0.1; }
        if (active == 4) { py3 = py3 + 0.1; }
        break;
    case 'a':
        if (active == 1) { px = px - 0.1; }
        if (active == 2) { px1 = px1 - 0.1; }
        if (active == 3) { px2 = px2 - 0.1; }
        if (active == 4) { px3 = px3 - 0.1; }
        break;
    case 's':
        if (active == 1) { py = py - 0.1; }
        if (active == 2) { py1 = py1 - 0.1; }
        if (active == 3) { py2 = py2 - 0.1; }
        if (active == 4) { py3 = py3 - 0.1; }
        break;
    case 'd':
        if (active == 1) { px = px + 0.1; }
        if (active == 2) { px1 = px1 + 0.1; }
        if (active == 3) { px2 = px2 + 0.1; }
        if (active == 4) { px3 = px3 + 0.1; }
        break;
    case 'q':
        if (!(active == 4)) { active = active + 1; }
        break;
    case 'e':
        if (!(active == 1)) { active = active - 1; }
        break;
    }
}
 
void arrow_keys(int keys, int x, int y)
{
    switch (keys) {
    case GLUT_KEY_UP:
        glutFullScreen();
        break;
    case GLUT_KEY_DOWN:
        glutReshapeWindow(500, 500);
        break;
    default:
        break;
    }
}
 
void main()
{
    glutInitWindowPosition(100, 100);
    glutInitWindowSize(500, 500);
    glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
    glutCreateWindow("LEGO");
    light_and_material();
    glutIdleFunc(display);
    glutDisplayFunc(display);
    glutReshapeFunc(resize);
    glutKeyboardFunc(keyboard);
    glutSpecialFunc(arrow_keys);
 
    glutMainLoop();
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.11.2015, 11:56
Ответы с готовыми решениями:

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

Сделать так, чтобы объекты по бокам экрана расставлялись рандомно, но на расстоянии друг от друга
Привет. Работаю в Unity. Мне нужно сделать так, чтобы объекты по бокам экрана расставлялись...

Как в PHP отделить элементы друг от друга, чтобы не ругались друг на друга?
&lt;?php $chitat = fopen('yoo.txt', 'r'); if (!$chitat) { echo 'Ошибка при открытии файла...

Как сделать чтобы 3 круга не находили друг на друга
if button=mbright then with Image1.Canvas do begin pen.Mode:=pmMask; ...

2
510 / 272 / 60
Регистрация: 14.12.2010
Сообщений: 548
06.11.2015, 18:51 2
Аквариум мы как-то тут делали с коллизиями.
0
5130 / 2743 / 463
Регистрация: 05.10.2013
Сообщений: 7,259
Записей в блоге: 193
07.11.2015, 12:44 3
Можно добавить коллайдеры с помощью: Bullet Physics Library (бесплатная) или PhysX (в составе бесплатных движков UE4 и Unity5)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.11.2015, 12:44
Помогаю со студенческими работами здесь

Как сделать чтобы блоки не видели друг друга?
Написал скрипт, который вставляет блоки разных размеров, цветов и с различными выравниваниями и...

Как сделать чтобы radiobutton'ы были независимы друг от друга?
как сделать чтобы radiobutton'ы были независимы друг от друга?не используя Groupbox

Как сделать так, чтобы 2 сервера друг друга видели
всем привет, уважаемые форумчане! ситуация такова: ранее 2 сервера стояли в одном офисе. где-то...

Как сделать чтобы объекты не спавнились друг в друге?
Стоит рандомный спавн объектов с определённой периодичностью. Как сделать так, чтобы эти объекты...

Как сделать, чтобы картинка и текст в Label не накладывались друг на друга
Добрый день! У меня есть label, включил для него иконку. Нужно, чтобы иконка показывалась слева...

Как сделать чтобы 2 персонажа могли раздавить друг друга по типу марио?
Во время вхождения в триггер уничтожается оба объекта. как это исправить? using UnityEngine;...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru