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
| using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Tao.OpenGl;
// для работы с библиотекой FreeGLUT
using Tao.FreeGlut;
// для работы с элементом управления SimpleOpenGLControl
using Tao.Platform.Windows;
namespace TestOpenGL
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
AnT.InitializeContexts();
}
private void Form1_Load(object sender, EventArgs e)
{
// инициализация Glut
Glut.glutInit();
Glut.glutInitDisplayMode(Glut.GLUT_RGB | Glut.GLUT_DOUBLE | Glut.GLUT_DEPTH);
// очитка окна
Gl.glClearColor(255, 255, 255, 1);
// установка порта вывода в соотвествии с размерами элемента anT
Gl.glViewport(0, 0, AnT.Width, AnT.Height);
// настройка проекции
Gl.glMatrixMode(Gl.GL_PROJECTION);
Gl.glLoadIdentity();
Glu.gluPerspective(100, (float)AnT.Width / (float)AnT.Height, 0.1, 200);
Gl.glMatrixMode(Gl.GL_MODELVIEW);
Gl.glLoadIdentity();
Gl.glEnable(Gl.GL_DEPTH_TEST);
Gl.glEnable(Gl.GL_COLOR_MATERIAL);//включаем отбражения материалов
Gl.glEnable(Gl.GL_LIGHTING);// включаем свет
Gl.glEnable(Gl.GL_LIGHT0);
// настройка параметров OpenGL для визуализации
timer1.Start();
}
double ox = 360;
private void timer1_Tick(object sender, EventArgs e)
{
Gl.glEnable(Gl.GL_DEPTH_TEST);
Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);
Gl.glLoadIdentity();
Gl.glColor3f(0, 1.0f, 0);
Gl.glPushMatrix();
Gl.glTranslated(0, 0, -15);
Gl.glRotated(45-ox, 1, 1, 0);
Glut.glutSolidCube(2);
Gl.glColor3f(0,0, 1.0f);
Glut.glutWireCube(2.05);
for (int i = 0; i < 10; i++)
{
Gl.glTranslated(0, 1, 5);
Gl.glRotated(45 - ox, 1, 1, 0);
Gl.glColor3f(1.0f, 1.0f, 0);
Glut.glutSolidCube(2);
Gl.glColor3f(0, 0, 1.0f);
Glut.glutWireCube(2.05);
}
Gl.glPopMatrix();
Gl.glFlush();
AnT.Invalidate();
if (ox > 0)
{
ox -= 0.1;
}
else
{
ox = 360;
}
}
}
} |