Урок 45 C Волны
YOUR LINK HERE:
http://youtube.com/watch?v=Rwn__pIvVeI
На этом уроке мы нарисуем волны в 3D. • • Все уроки: http://www.youtube.com/view_play_list... • • Исходный код: http://code.google.com/p/cplusplus-le... • • ЧаВо: http://code.google.com/p/cplusplus-le... • • Уроки также можно скачать с торрентов: • http://rutracker.org/forum/viewtopic.... • http://nnm-club.ru/forum/viewtopic.ph... • Файлы подготовил greggh. Респект и уважуха. • • Ссылка на видео, как собирать OpenGL программы: • How to build C++/OpenGL/GLUT project ... • • // ---------------------- • • // Урок 45 • // Волны • #include lt;GL/glut.h gt; • #include lt;cmath gt; • • const float K = 40; • const float DT = 0.03; • • float sqr(float x) • { • ensp; ensp; ensp;return x * x; • } • • struct P • { • ensp; ensp; ensp;P(): z(0), vz(0) {} • ensp; ensp; ensp;float x; • ensp; ensp; ensp;float y; • ensp; ensp; ensp;float z; • ensp; ensp; ensp;float vz; • }; • • const int N = 48; • • P p[N][N]; • • void display() • { • ensp; ensp; ensp;glClear(GL_COLOR_BUFFER_BIT); • ensp; ensp; ensp;for (int x = 0; x lt; N; ++x) • ensp; ensp; ensp;{ • ensp; ensp; ensp; ensp; ensp; ensp;glBegin(GL_LINE_STRIP); • ensp; ensp; ensp; ensp; ensp; ensp;for (int y = 0; y lt; N; ++y) • ensp; ensp; ensp; ensp; ensp; ensp; ensp; ensp; glVertex3f(p[x][y].x, p[x][y].y, p[x][y].z * 10); • ensp; ensp; ensp; ensp; ensp; ensp;glEnd(); • ensp; ensp; ensp;} • ensp; ensp; ensp;for (int y = 0; y lt; N; ++y) • ensp; ensp; ensp;{ • ensp; ensp; ensp; ensp; ensp; ensp;glBegin(GL_LINE_STRIP); • ensp; ensp; ensp; ensp; ensp; ensp;for (int x = 0; x lt; N; ++x) • ensp; ensp; ensp; ensp; ensp; ensp; ensp; ensp; glVertex3f(p[x][y].x, p[x][y].y, p[x][y].z * 10); • ensp; ensp; ensp; ensp; ensp; ensp;glEnd(); • ensp; ensp; ensp;} • ensp; ensp; ensp;glutSwapBuffers(); • } • • void timer(int = 0) • { • ensp; ensp; ensp;const int dx[] = {-1, 0, 1, 0}; • ensp; ensp; ensp;const int dy[] = {0, 1, 0, -1}; • ensp; ensp; ensp;if (rand() % 500 == 0) • ensp; ensp; ensp; ensp; ensp; ensp;p[rand() % (N - 2) + 1][rand() % (N - 2) + 1].vz += 150; • ensp; ensp; ensp;for (int y = 1; y lt; N - 1; ++y) • ensp; ensp; ensp; ensp; ensp; ensp;for (int x = 1; x lt; N - 1; ++x) • ensp; ensp; ensp; ensp; ensp; ensp;{ • ensp; ensp; ensp; ensp; ensp; ensp; ensp; ensp; P amp;p0 = p[x][y]; • ensp; ensp; ensp; ensp; ensp; ensp; ensp; ensp; for (int i = 0; i lt; 4; ++i) • ensp; ensp; ensp; ensp; ensp; ensp; ensp; ensp; { • ensp; ensp; ensp; ensp; ensp; ensp; ensp; ensp; ensp; ensp; ensp;P amp;p1 = p[x + dx[i]][y + dy[i]]; • ensp; ensp; ensp; ensp; ensp; ensp; ensp; ensp; ensp; ensp; ensp;const float d = sqrt(sqr(p0.x - p1.x) + sqr(p0.y - p1.y) + sqr(p0.z - p1.z)); • ensp; ensp; ensp; ensp; ensp; ensp; ensp; ensp; ensp; ensp; ensp;p0.vz += K * (p1.z - p0.z) / d * DT; • ensp; ensp; ensp; ensp; ensp; ensp; ensp; ensp; ensp; ensp; ensp;p0.vz *= 0.999; • ensp; ensp; ensp; ensp; ensp; ensp; ensp; ensp; } • • ensp; ensp; ensp; ensp; ensp; ensp;} • ensp; ensp; ensp;for (int y = 1; y lt; N - 1; ++y) • ensp; ensp; ensp; ensp; ensp; ensp;for (int x = 1; x lt; N - 1; ++x) • ensp; ensp; ensp; ensp; ensp; ensp;{ • ensp; ensp; ensp; ensp; ensp; ensp; ensp; ensp; P amp;p0 = p[x][y]; • ensp; ensp; ensp; ensp; ensp; ensp; ensp; ensp; p0.z += p0.vz * DT; • ensp; ensp; ensp; ensp; ensp; ensp;} • ensp; ensp; ensp;display(); • ensp; ensp; ensp;glutTimerFunc(1, timer, 0); • } • • int main(int argc, char **argv) • { • ensp; ensp; ensp;for (int x = 0; x lt; N; ++x) • ensp; ensp; ensp; ensp; ensp; ensp;for (int y = 0; y lt; N; ++y) • ensp; ensp; ensp; ensp; ensp; ensp;{ • ensp; ensp; ensp; ensp; ensp; ensp; ensp; ensp; p[x][y].x = x * 480 / N; • ensp; ensp; ensp; ensp; ensp; ensp; ensp; ensp; p[x][y].y = y * 480 / N; • ensp; ensp; ensp; ensp; ensp; ensp;} • ensp; ensp; ensp;glutInit( amp;argc, argv); • ensp; ensp; ensp;glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); • ensp; ensp; ensp;glutInitWindowSize(852, 480); • ensp; ensp; ensp;glutInitWindowPosition(0, 86); • ensp; ensp; ensp;glutCreateWindow( 3d plot ); • ensp; ensp; ensp;glClearColor(0, 0, 0, 1.0); • • ensp; ensp; ensp;glMatrixMode(GL_PROJECTION); • ensp; ensp; ensp;glLoadIdentity(); • ensp; ensp; ensp;glFrustum(-100, 100, -100, 100, 100, 2000); • ensp; ensp; ensp;glMatrixMode(GL_MODELVIEW); • ensp; ensp; ensp;glTranslatef(-240, -240, -200); • ensp; ensp; ensp;glRotatef(-30, 1, 0, 0); • ensp; ensp; ensp;glutDisplayFunc(display); • ensp; ensp; ensp;timer(); • ensp; ensp; ensp;glutMainLoop(); • }
#############################
