Opengl鼠标旋转问题
Opengl mouse rotation issue
当我点击鼠标时,我的图形可以旋转,但是当我用鼠标将图形转回初始位置时,我不知道为什么这是我的事件
这是关于我的问题的插图
我觉得跟在图片框上移动完全不一样
Mouse_up 事件
private void simpleOpenGlControl1_MouseUp(object sender, MouseEventArgs e)
{
Dragging2 = false;
}
private void simpleOpenGlControl1_MouseMove(object sender, MouseEventArgs e)
{
xrot -= 0.5;
simpleOpenGlControl1.Refresh();
}
Mouse_down 事件
{
if (e.Button == MouseButtons.Left)
{
Dragging2 = true;
}
}
double olcek3d_gen1 = obj.genislikDeger1 / pictureBox1.Width;
double olcek3d_gen2 = obj.genislikDeger2 / pictureBox1.Width;
double olcek3d_gen3 = obj.genislikDeger3 / pictureBox1.Width;
double olcek3d_gen4 = obj.genislikDeger4 / pictureBox1.Width;
double olcek3d_yuk1 = obj.yukselikDeger1 / pictureBox1.Width;
double olcek3d_yuk2 = obj.yukselikDeger2 / pictureBox1.Width;
double olcek3d_yuk3 = obj.yukselikDeger3 / pictureBox1.Width;
double olcek3d_yuk4 = obj.yukselikDeger4 / pictureBox1.Width;
double olcek_derinlik = obj.L / pictureBox1.Width;
//Gl.glColorMask(1,1,1,1);
Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT | Gl.GL_ACCUM_BUFFER_BIT);
Gl.glEnable(Gl.GL_DEPTH_TEST); //clear buffers to preset values
Gl.glClearColor(0, 0, 0, 0);
/* Gl.glEnable(Gl.GL_COLOR_MATERIAL);
Gl.glEnable(Gl.GL_LIGHTING);
Gl.glEnable(Gl.GL_LIGHT0);*/
Gl.glBlendFunc(Gl.GL_ONE, Gl.GL_ONE_MINUS_SRC_ALPHA);
Gl.glMatrixMode(Gl.GL_MODELVIEW);
Gl.glLoadIdentity(); // load the identity matrix
// load the identity
Gl.glTranslated(left_right, up_down, sabit3D);
//Gl.glEnable(Gl.GL_TEXTURE_2D);
if (Dragging2)
{
Gl.glRotated(xrot, xRotate, yRotate, zRotate);
listBox1.Items.Add("angle " + xrot.ToString() +" xrot "+ xRotate+" yrot "+ yRotate+" zrot "+zRotate+" left_right "+left_right+" up_Down "+ up_down);
}
//rotate on y
//Gl.glRotated(zrot += 0.5, 0, 0, 1); //rotate on z
//face 1.0
//face 2.0 görünen açıdan sağdaki
Gl.glBegin(Gl.GL_QUADS);
Gl.glColor3ub(90, 90, 90);
Gl.glVertex3d(olcek3d_gen1, 0, 0);
Gl.glVertex3d(olcek3d_gen1, 0, olcek_derinlik);
Gl.glVertex3d(olcek3d_gen1, olcek3d_yuk1, olcek_derinlik);
Gl.glVertex3d(olcek3d_gen1, olcek3d_yuk1, 0);
Gl.glEnd();
//face 3.0 ön yüzey
Gl.glBegin(Gl.GL_QUADS);
Gl.glColor3ub(100, 100, 100);
Gl.glVertex3d(0, 0, olcek_derinlik);
Gl.glVertex3d(olcek3d_gen1, 0, olcek_derinlik);
Gl.glVertex3d(olcek3d_gen1, olcek3d_yuk1, olcek_derinlik);
Gl.glVertex3d(0, olcek3d_yuk1, olcek_derinlik);
Gl.glEnd();
//face 4.0 arka yüzey
Gl.glBegin(Gl.GL_QUADS);
Gl.glColor3ub(110, 110, 110);
Gl.glVertex3d(0, 0, 0);
Gl.glVertex3d(0, 0, olcek_derinlik);
Gl.glVertex3d(0, olcek3d_yuk1, olcek_derinlik);
Gl.glVertex3d(0, olcek3d_yuk1, 0);
Gl.glEnd();
//face 5.0 üst yüzey
Gl.glBegin(Gl.GL_QUADS);
Gl.glColor3ub(100, 100, 100);
Gl.glVertex3d(0, olcek3d_yuk1, 0);
Gl.glVertex3d(olcek3d_gen1, olcek3d_yuk1, 0);
Gl.glVertex3d(olcek3d_gen1, olcek3d_yuk1, olcek_derinlik);
Gl.glVertex3d(0, olcek3d_yuk1, olcek_derinlik);
Gl.glEnd();
//face 6.0 // sorun olan bölge başlangıc en zıt arkası
Gl.glBegin(Gl.GL_QUADS);
Gl.glColor3ub(100, 100, 100);
Gl.glVertex3d(0, 0, 0);
Gl.glVertex3d(olcek3d_gen1, 0, 0);
Gl.glVertex3d(olcek3d_gen1, olcek3d_yuk1, 0);
Gl.glVertex3d(0, olcek3d_yuk1, 0);
Gl.glEnd();
//face 1.1
Gl.glBegin(Gl.GL_QUADS); //start drawing GL_QUADSis the connection mode
Gl.glColor3ub(90, 90, 90);
Gl.glVertex3d(0, -1 * olcek3d_yuk2, 0);
Gl.glVertex3d(olcek3d_gen2, -1 * olcek3d_yuk2, 0);
Gl.glVertex3d(olcek3d_gen2, 0, 0);
Gl.glVertex3d(0, 0, 0);
Gl.glEnd();
//face 2.1
Gl.glBegin(Gl.GL_QUADS);
Gl.glColor3ub(70, 70, 70);
Gl.glVertex3d(olcek3d_gen2, -1 * olcek3d_yuk2, 0);
Gl.glVertex3d(olcek3d_gen2, -1 * olcek3d_yuk2, olcek_derinlik);
Gl.glVertex3d(olcek3d_gen2, 0, olcek_derinlik);
Gl.glVertex3d(olcek3d_gen2, 0, 0);
Gl.glEnd();
//face 3.1
Gl.glBegin(Gl.GL_QUADS);
Gl.glColor3ub(80, 80, 80);
Gl.glVertex3d(0, -1 * olcek3d_yuk2, olcek_derinlik);
Gl.glVertex3d(olcek3d_gen2, -1 * olcek3d_yuk2, olcek_derinlik);
Gl.glVertex3d(olcek3d_gen2, 0, olcek_derinlik);
Gl.glVertex3d(0, 0, olcek_derinlik);
Gl.glEnd();
//face 4.1
Gl.glBegin(Gl.GL_QUADS);
Gl.glColor3ub(90, 90, 90);
Gl.glVertex3d(0, -1 * olcek3d_yuk2, 0);
Gl.glVertex3d(0, -1 * olcek3d_yuk2, olcek_derinlik);
Gl.glVertex3d(0, 0, olcek_derinlik);
Gl.glVertex3d(0, 0, 0);
Gl.glEnd();
//face cover.1 çizgi level
Gl.glBegin(Gl.GL_QUADS);
Gl.glColor3ub(80, 80, 80);
Gl.glVertex3d(olcek3d_gen1, 0, 0);
Gl.glVertex3d(olcek3d_gen2, 0, 0);
Gl.glVertex3d(olcek3d_gen2, 0, olcek_derinlik);
Gl.glVertex3d(olcek3d_gen1, 0, olcek_derinlik);
Gl.glEnd();
if (sev.Value == 2)
{
//face 5.1
Gl.glBegin(Gl.GL_QUADS);
Gl.glColor3ub(85, 85, 85);
Gl.glVertex3d(0, -1 * olcek3d_yuk2, 0);
Gl.glVertex3d(olcek3d_gen2, -1 * olcek3d_yuk2, 0);
Gl.glVertex3d(olcek3d_gen2, -1 * olcek3d_yuk2, olcek_derinlik);
Gl.glVertex3d(0, -1 * olcek3d_yuk2, olcek_derinlik);
Gl.glEnd();
}
if (sev.Value >= 3)
{
//face 1.2
Gl.glBegin(Gl.GL_QUADS); //start drawing GL_QUADSis the connection mode
Gl.glColor3ub(85, 85, 85);
Gl.glVertex3d(0, -1 * (olcek3d_yuk2 + olcek3d_yuk3), 0);
Gl.glVertex3d(olcek3d_gen3, -1 * (olcek3d_yuk2 + olcek3d_yuk3), 0);
Gl.glVertex3d(olcek3d_gen3, -1 * olcek3d_yuk2, 0);
Gl.glVertex3d(0, -1 * olcek3d_yuk2, 0);
Gl.glEnd();
//face 2.2
Gl.glBegin(Gl.GL_QUADS);
Gl.glColor3ub(70, 70, 70);
Gl.glVertex3d(olcek3d_gen3, -1 * (olcek3d_yuk2 + olcek3d_yuk3), 0);
Gl.glVertex3d(olcek3d_gen3, -1 * (olcek3d_yuk2 + olcek3d_yuk3), olcek_derinlik);
Gl.glVertex3d(olcek3d_gen3, -1 * olcek3d_yuk2, olcek_derinlik);
Gl.glVertex3d(olcek3d_gen3, -1 * olcek3d_yuk2, 0);
Gl.glEnd();
//face 3.2
Gl.glBegin(Gl.GL_QUADS);
Gl.glColor3ub(90, 90, 90);
Gl.glVertex3d(0, -1 * (olcek3d_yuk2 + olcek3d_yuk3), olcek_derinlik);
Gl.glVertex3d(olcek3d_gen3, -1 * (olcek3d_yuk2 + olcek3d_yuk3), olcek_derinlik);
Gl.glVertex3d(olcek3d_gen3, -1 * olcek3d_yuk2, olcek_derinlik);
Gl.glVertex3d(0, -1 * olcek3d_yuk2, olcek_derinlik);
Gl.glEnd();
//face 4.2
Gl.glBegin(Gl.GL_QUADS);
Gl.glColor3ub(85, 85, 85);
Gl.glVertex3d(0, -1 * (olcek3d_yuk2 + olcek3d_yuk3), 0);
Gl.glVertex3d(0, -1 * (olcek3d_yuk2 + olcek3d_yuk3), olcek_derinlik);
Gl.glVertex3d(0, -1 * olcek3d_yuk2, olcek_derinlik);
Gl.glVertex3d(0, -1 * olcek3d_yuk2, 0);
Gl.glEnd();
//face kapak.2
Gl.glBegin(Gl.GL_QUADS);
Gl.glColor3ub(80, 80, 80);
Gl.glVertex3d(olcek3d_gen2, -1 * (olcek3d_yuk1), 0);
Gl.glVertex3d(olcek3d_gen3, -1 * (olcek3d_yuk1), 0);
Gl.glVertex3d(olcek3d_gen3, -1 * (olcek3d_yuk1), olcek_derinlik);
Gl.glVertex3d(olcek3d_gen2, -1 * (olcek3d_yuk1), olcek_derinlik);
Gl.glEnd();
if (sev.Value == 3)
{
//face 5.2
Gl.glBegin(Gl.GL_QUADS);
Gl.glColor3ub(85, 85, 85);
Gl.glVertex3d(0, -1 * (olcek3d_yuk2 + olcek3d_yuk3), 0);
Gl.glVertex3d(olcek3d_gen3, -1 * (olcek3d_yuk2 + olcek3d_yuk3), 0);
Gl.glVertex3d(olcek3d_gen3, -1 * (olcek3d_yuk2 + olcek3d_yuk3), olcek_derinlik);
Gl.glVertex3d(0, -1 * (olcek3d_yuk2 + olcek3d_yuk3), olcek_derinlik);
Gl.glEnd();
}
}
if (sev.Value == 4)
{
//face 1.3
Gl.glBegin(Gl.GL_QUADS); //start drawing GL_QUADSis the connection mode
Gl.glColor3ub(85, 85, 85);
Gl.glVertex3d(0, -1 * (olcek3d_yuk2 + olcek3d_yuk3 + olcek3d_yuk4), 0);
Gl.glVertex3d(olcek3d_gen4, -1 * (olcek3d_yuk2 + olcek3d_yuk3 + olcek3d_yuk4), 0);
Gl.glVertex3d(olcek3d_gen4, -1 * (olcek3d_yuk2 + olcek3d_yuk3), 0);
Gl.glVertex3d(0, -1 * (olcek3d_yuk2 + olcek3d_yuk3), 0);
Gl.glEnd();
//face 2.3
Gl.glBegin(Gl.GL_QUADS);
Gl.glColor3ub(70, 70, 70);
Gl.glVertex3d(olcek3d_gen4, -1 * (olcek3d_yuk2 + olcek3d_yuk3 + olcek3d_yuk4), 0);
Gl.glVertex3d(olcek3d_gen4, -1 * (olcek3d_yuk2 + olcek3d_yuk3 + olcek3d_yuk4), olcek_derinlik);
Gl.glVertex3d(olcek3d_gen4, -1 * (olcek3d_yuk2 + olcek3d_yuk3), olcek_derinlik);
Gl.glVertex3d(olcek3d_gen4, -1 * (olcek3d_yuk2 + olcek3d_yuk3), 0);
Gl.glEnd();
//face 3.3
Gl.glBegin(Gl.GL_QUADS);
Gl.glColor3ub(90, 90, 90);
Gl.glVertex3d(0, -1 * (olcek3d_yuk2 + olcek3d_yuk3 + olcek3d_yuk4), olcek_derinlik);
Gl.glVertex3d(olcek3d_gen4, -1 * (olcek3d_yuk2 + olcek3d_yuk3 + olcek3d_yuk4), olcek_derinlik);
Gl.glVertex3d(olcek3d_gen4, -1 * (olcek3d_yuk2 + olcek3d_yuk3), olcek_derinlik);
Gl.glVertex3d(0, -1 * (olcek3d_yuk2 + olcek3d_yuk3), olcek_derinlik);
Gl.glEnd();
//face 4.3
Gl.glBegin(Gl.GL_QUADS);
Gl.glColor3ub(85, 85, 85);
Gl.glVertex3d(0, -1 * (olcek3d_yuk2 + olcek3d_yuk3 + olcek3d_yuk4), 0);
Gl.glVertex3d(0, -1 * (olcek3d_yuk2 + olcek3d_yuk3 + olcek3d_yuk4), olcek_derinlik);
Gl.glVertex3d(0, -1 * (olcek3d_yuk2 + olcek3d_yuk3), olcek_derinlik);
Gl.glVertex3d(0, -1 * (olcek3d_yuk2 + olcek3d_yuk3), 0);
Gl.glEnd();
//face 5.3
Gl.glBegin(Gl.GL_QUADS);
Gl.glColor3ub(85, 85, 85);
Gl.glVertex3d(0, -1 * (olcek3d_yuk2 + olcek3d_yuk3 + olcek3d_yuk4), 0);
Gl.glVertex3d(olcek3d_gen4, -1 * (olcek3d_yuk2 + olcek3d_yuk3 + olcek3d_yuk4), 0);
Gl.glVertex3d(olcek3d_gen4, -1 * (olcek3d_yuk2 + olcek3d_yuk3 + olcek3d_yuk4), olcek_derinlik);
Gl.glVertex3d(0, -1 * (olcek3d_yuk2 + olcek3d_yuk3 + olcek3d_yuk4), olcek_derinlik);
Gl.glEnd();
//face kapak.2
Gl.glBegin(Gl.GL_QUADS);
Gl.glColor3ub(80, 80, 80);
Gl.glVertex3d(olcek3d_gen3, -1 * (olcek3d_yuk1 + olcek3d_yuk2), 0);
Gl.glVertex3d(olcek3d_gen4, -1 * (olcek3d_yuk1 + olcek3d_yuk2), 0);
Gl.glVertex3d(olcek3d_gen4, -1 * (olcek3d_yuk1 + olcek3d_yuk2), olcek_derinlik);
Gl.glVertex3d(olcek3d_gen3, -1 * (olcek3d_yuk1 + olcek3d_yuk2), olcek_derinlik);
Gl.glEnd();
}
因为您仅在 Dragging2
处于活动状态时才应用 xrot
旋转...您应该在每一帧执行此操作,或者在鼠标向上时将最终旋转应用于用于初始化的某些初始矩阵框架开始时的模型视图而不是标识
所以最简单的就是改:
if (Dragging2)
{
Gl.glRotated(xrot, xRotate, yRotate, zRotate);
listBox1.Items.Add("angle " + xrot.ToString() +" xrot "+ xRotate+" yrot "+ yRotate+" zrot "+zRotate+" left_right "+left_right+" up_Down "+ up_down);
}
进入:
Gl.glRotated(xrot, xRotate, yRotate, zRotate);
if (Dragging2)
{
listBox1.Items.Add("angle " + xrot.ToString() +" xrot "+ xRotate+" yrot "+ yRotate+" zrot "+zRotate+" left_right "+left_right+" up_Down "+ up_down);
}
不确定列表框的用途(或者它是否没有内存泄漏...)。但是,如果您的 xRotate, yRotate, zRotate
发生变化,那么您需要实施初始累积矩阵 ...
当我点击鼠标时,我的图形可以旋转,但是当我用鼠标将图形转回初始位置时,我不知道为什么这是我的事件
这是关于我的问题的插图
我觉得跟在图片框上移动完全不一样
Mouse_up 事件
private void simpleOpenGlControl1_MouseUp(object sender, MouseEventArgs e)
{
Dragging2 = false;
}
private void simpleOpenGlControl1_MouseMove(object sender, MouseEventArgs e)
{
xrot -= 0.5;
simpleOpenGlControl1.Refresh();
}
Mouse_down 事件
{
if (e.Button == MouseButtons.Left)
{
Dragging2 = true;
}
}
double olcek3d_gen1 = obj.genislikDeger1 / pictureBox1.Width;
double olcek3d_gen2 = obj.genislikDeger2 / pictureBox1.Width;
double olcek3d_gen3 = obj.genislikDeger3 / pictureBox1.Width;
double olcek3d_gen4 = obj.genislikDeger4 / pictureBox1.Width;
double olcek3d_yuk1 = obj.yukselikDeger1 / pictureBox1.Width;
double olcek3d_yuk2 = obj.yukselikDeger2 / pictureBox1.Width;
double olcek3d_yuk3 = obj.yukselikDeger3 / pictureBox1.Width;
double olcek3d_yuk4 = obj.yukselikDeger4 / pictureBox1.Width;
double olcek_derinlik = obj.L / pictureBox1.Width;
//Gl.glColorMask(1,1,1,1);
Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT | Gl.GL_ACCUM_BUFFER_BIT);
Gl.glEnable(Gl.GL_DEPTH_TEST); //clear buffers to preset values
Gl.glClearColor(0, 0, 0, 0);
/* Gl.glEnable(Gl.GL_COLOR_MATERIAL);
Gl.glEnable(Gl.GL_LIGHTING);
Gl.glEnable(Gl.GL_LIGHT0);*/
Gl.glBlendFunc(Gl.GL_ONE, Gl.GL_ONE_MINUS_SRC_ALPHA);
Gl.glMatrixMode(Gl.GL_MODELVIEW);
Gl.glLoadIdentity(); // load the identity matrix
// load the identity
Gl.glTranslated(left_right, up_down, sabit3D);
//Gl.glEnable(Gl.GL_TEXTURE_2D);
if (Dragging2)
{
Gl.glRotated(xrot, xRotate, yRotate, zRotate);
listBox1.Items.Add("angle " + xrot.ToString() +" xrot "+ xRotate+" yrot "+ yRotate+" zrot "+zRotate+" left_right "+left_right+" up_Down "+ up_down);
}
//rotate on y
//Gl.glRotated(zrot += 0.5, 0, 0, 1); //rotate on z
//face 1.0
//face 2.0 görünen açıdan sağdaki
Gl.glBegin(Gl.GL_QUADS);
Gl.glColor3ub(90, 90, 90);
Gl.glVertex3d(olcek3d_gen1, 0, 0);
Gl.glVertex3d(olcek3d_gen1, 0, olcek_derinlik);
Gl.glVertex3d(olcek3d_gen1, olcek3d_yuk1, olcek_derinlik);
Gl.glVertex3d(olcek3d_gen1, olcek3d_yuk1, 0);
Gl.glEnd();
//face 3.0 ön yüzey
Gl.glBegin(Gl.GL_QUADS);
Gl.glColor3ub(100, 100, 100);
Gl.glVertex3d(0, 0, olcek_derinlik);
Gl.glVertex3d(olcek3d_gen1, 0, olcek_derinlik);
Gl.glVertex3d(olcek3d_gen1, olcek3d_yuk1, olcek_derinlik);
Gl.glVertex3d(0, olcek3d_yuk1, olcek_derinlik);
Gl.glEnd();
//face 4.0 arka yüzey
Gl.glBegin(Gl.GL_QUADS);
Gl.glColor3ub(110, 110, 110);
Gl.glVertex3d(0, 0, 0);
Gl.glVertex3d(0, 0, olcek_derinlik);
Gl.glVertex3d(0, olcek3d_yuk1, olcek_derinlik);
Gl.glVertex3d(0, olcek3d_yuk1, 0);
Gl.glEnd();
//face 5.0 üst yüzey
Gl.glBegin(Gl.GL_QUADS);
Gl.glColor3ub(100, 100, 100);
Gl.glVertex3d(0, olcek3d_yuk1, 0);
Gl.glVertex3d(olcek3d_gen1, olcek3d_yuk1, 0);
Gl.glVertex3d(olcek3d_gen1, olcek3d_yuk1, olcek_derinlik);
Gl.glVertex3d(0, olcek3d_yuk1, olcek_derinlik);
Gl.glEnd();
//face 6.0 // sorun olan bölge başlangıc en zıt arkası
Gl.glBegin(Gl.GL_QUADS);
Gl.glColor3ub(100, 100, 100);
Gl.glVertex3d(0, 0, 0);
Gl.glVertex3d(olcek3d_gen1, 0, 0);
Gl.glVertex3d(olcek3d_gen1, olcek3d_yuk1, 0);
Gl.glVertex3d(0, olcek3d_yuk1, 0);
Gl.glEnd();
//face 1.1
Gl.glBegin(Gl.GL_QUADS); //start drawing GL_QUADSis the connection mode
Gl.glColor3ub(90, 90, 90);
Gl.glVertex3d(0, -1 * olcek3d_yuk2, 0);
Gl.glVertex3d(olcek3d_gen2, -1 * olcek3d_yuk2, 0);
Gl.glVertex3d(olcek3d_gen2, 0, 0);
Gl.glVertex3d(0, 0, 0);
Gl.glEnd();
//face 2.1
Gl.glBegin(Gl.GL_QUADS);
Gl.glColor3ub(70, 70, 70);
Gl.glVertex3d(olcek3d_gen2, -1 * olcek3d_yuk2, 0);
Gl.glVertex3d(olcek3d_gen2, -1 * olcek3d_yuk2, olcek_derinlik);
Gl.glVertex3d(olcek3d_gen2, 0, olcek_derinlik);
Gl.glVertex3d(olcek3d_gen2, 0, 0);
Gl.glEnd();
//face 3.1
Gl.glBegin(Gl.GL_QUADS);
Gl.glColor3ub(80, 80, 80);
Gl.glVertex3d(0, -1 * olcek3d_yuk2, olcek_derinlik);
Gl.glVertex3d(olcek3d_gen2, -1 * olcek3d_yuk2, olcek_derinlik);
Gl.glVertex3d(olcek3d_gen2, 0, olcek_derinlik);
Gl.glVertex3d(0, 0, olcek_derinlik);
Gl.glEnd();
//face 4.1
Gl.glBegin(Gl.GL_QUADS);
Gl.glColor3ub(90, 90, 90);
Gl.glVertex3d(0, -1 * olcek3d_yuk2, 0);
Gl.glVertex3d(0, -1 * olcek3d_yuk2, olcek_derinlik);
Gl.glVertex3d(0, 0, olcek_derinlik);
Gl.glVertex3d(0, 0, 0);
Gl.glEnd();
//face cover.1 çizgi level
Gl.glBegin(Gl.GL_QUADS);
Gl.glColor3ub(80, 80, 80);
Gl.glVertex3d(olcek3d_gen1, 0, 0);
Gl.glVertex3d(olcek3d_gen2, 0, 0);
Gl.glVertex3d(olcek3d_gen2, 0, olcek_derinlik);
Gl.glVertex3d(olcek3d_gen1, 0, olcek_derinlik);
Gl.glEnd();
if (sev.Value == 2)
{
//face 5.1
Gl.glBegin(Gl.GL_QUADS);
Gl.glColor3ub(85, 85, 85);
Gl.glVertex3d(0, -1 * olcek3d_yuk2, 0);
Gl.glVertex3d(olcek3d_gen2, -1 * olcek3d_yuk2, 0);
Gl.glVertex3d(olcek3d_gen2, -1 * olcek3d_yuk2, olcek_derinlik);
Gl.glVertex3d(0, -1 * olcek3d_yuk2, olcek_derinlik);
Gl.glEnd();
}
if (sev.Value >= 3)
{
//face 1.2
Gl.glBegin(Gl.GL_QUADS); //start drawing GL_QUADSis the connection mode
Gl.glColor3ub(85, 85, 85);
Gl.glVertex3d(0, -1 * (olcek3d_yuk2 + olcek3d_yuk3), 0);
Gl.glVertex3d(olcek3d_gen3, -1 * (olcek3d_yuk2 + olcek3d_yuk3), 0);
Gl.glVertex3d(olcek3d_gen3, -1 * olcek3d_yuk2, 0);
Gl.glVertex3d(0, -1 * olcek3d_yuk2, 0);
Gl.glEnd();
//face 2.2
Gl.glBegin(Gl.GL_QUADS);
Gl.glColor3ub(70, 70, 70);
Gl.glVertex3d(olcek3d_gen3, -1 * (olcek3d_yuk2 + olcek3d_yuk3), 0);
Gl.glVertex3d(olcek3d_gen3, -1 * (olcek3d_yuk2 + olcek3d_yuk3), olcek_derinlik);
Gl.glVertex3d(olcek3d_gen3, -1 * olcek3d_yuk2, olcek_derinlik);
Gl.glVertex3d(olcek3d_gen3, -1 * olcek3d_yuk2, 0);
Gl.glEnd();
//face 3.2
Gl.glBegin(Gl.GL_QUADS);
Gl.glColor3ub(90, 90, 90);
Gl.glVertex3d(0, -1 * (olcek3d_yuk2 + olcek3d_yuk3), olcek_derinlik);
Gl.glVertex3d(olcek3d_gen3, -1 * (olcek3d_yuk2 + olcek3d_yuk3), olcek_derinlik);
Gl.glVertex3d(olcek3d_gen3, -1 * olcek3d_yuk2, olcek_derinlik);
Gl.glVertex3d(0, -1 * olcek3d_yuk2, olcek_derinlik);
Gl.glEnd();
//face 4.2
Gl.glBegin(Gl.GL_QUADS);
Gl.glColor3ub(85, 85, 85);
Gl.glVertex3d(0, -1 * (olcek3d_yuk2 + olcek3d_yuk3), 0);
Gl.glVertex3d(0, -1 * (olcek3d_yuk2 + olcek3d_yuk3), olcek_derinlik);
Gl.glVertex3d(0, -1 * olcek3d_yuk2, olcek_derinlik);
Gl.glVertex3d(0, -1 * olcek3d_yuk2, 0);
Gl.glEnd();
//face kapak.2
Gl.glBegin(Gl.GL_QUADS);
Gl.glColor3ub(80, 80, 80);
Gl.glVertex3d(olcek3d_gen2, -1 * (olcek3d_yuk1), 0);
Gl.glVertex3d(olcek3d_gen3, -1 * (olcek3d_yuk1), 0);
Gl.glVertex3d(olcek3d_gen3, -1 * (olcek3d_yuk1), olcek_derinlik);
Gl.glVertex3d(olcek3d_gen2, -1 * (olcek3d_yuk1), olcek_derinlik);
Gl.glEnd();
if (sev.Value == 3)
{
//face 5.2
Gl.glBegin(Gl.GL_QUADS);
Gl.glColor3ub(85, 85, 85);
Gl.glVertex3d(0, -1 * (olcek3d_yuk2 + olcek3d_yuk3), 0);
Gl.glVertex3d(olcek3d_gen3, -1 * (olcek3d_yuk2 + olcek3d_yuk3), 0);
Gl.glVertex3d(olcek3d_gen3, -1 * (olcek3d_yuk2 + olcek3d_yuk3), olcek_derinlik);
Gl.glVertex3d(0, -1 * (olcek3d_yuk2 + olcek3d_yuk3), olcek_derinlik);
Gl.glEnd();
}
}
if (sev.Value == 4)
{
//face 1.3
Gl.glBegin(Gl.GL_QUADS); //start drawing GL_QUADSis the connection mode
Gl.glColor3ub(85, 85, 85);
Gl.glVertex3d(0, -1 * (olcek3d_yuk2 + olcek3d_yuk3 + olcek3d_yuk4), 0);
Gl.glVertex3d(olcek3d_gen4, -1 * (olcek3d_yuk2 + olcek3d_yuk3 + olcek3d_yuk4), 0);
Gl.glVertex3d(olcek3d_gen4, -1 * (olcek3d_yuk2 + olcek3d_yuk3), 0);
Gl.glVertex3d(0, -1 * (olcek3d_yuk2 + olcek3d_yuk3), 0);
Gl.glEnd();
//face 2.3
Gl.glBegin(Gl.GL_QUADS);
Gl.glColor3ub(70, 70, 70);
Gl.glVertex3d(olcek3d_gen4, -1 * (olcek3d_yuk2 + olcek3d_yuk3 + olcek3d_yuk4), 0);
Gl.glVertex3d(olcek3d_gen4, -1 * (olcek3d_yuk2 + olcek3d_yuk3 + olcek3d_yuk4), olcek_derinlik);
Gl.glVertex3d(olcek3d_gen4, -1 * (olcek3d_yuk2 + olcek3d_yuk3), olcek_derinlik);
Gl.glVertex3d(olcek3d_gen4, -1 * (olcek3d_yuk2 + olcek3d_yuk3), 0);
Gl.glEnd();
//face 3.3
Gl.glBegin(Gl.GL_QUADS);
Gl.glColor3ub(90, 90, 90);
Gl.glVertex3d(0, -1 * (olcek3d_yuk2 + olcek3d_yuk3 + olcek3d_yuk4), olcek_derinlik);
Gl.glVertex3d(olcek3d_gen4, -1 * (olcek3d_yuk2 + olcek3d_yuk3 + olcek3d_yuk4), olcek_derinlik);
Gl.glVertex3d(olcek3d_gen4, -1 * (olcek3d_yuk2 + olcek3d_yuk3), olcek_derinlik);
Gl.glVertex3d(0, -1 * (olcek3d_yuk2 + olcek3d_yuk3), olcek_derinlik);
Gl.glEnd();
//face 4.3
Gl.glBegin(Gl.GL_QUADS);
Gl.glColor3ub(85, 85, 85);
Gl.glVertex3d(0, -1 * (olcek3d_yuk2 + olcek3d_yuk3 + olcek3d_yuk4), 0);
Gl.glVertex3d(0, -1 * (olcek3d_yuk2 + olcek3d_yuk3 + olcek3d_yuk4), olcek_derinlik);
Gl.glVertex3d(0, -1 * (olcek3d_yuk2 + olcek3d_yuk3), olcek_derinlik);
Gl.glVertex3d(0, -1 * (olcek3d_yuk2 + olcek3d_yuk3), 0);
Gl.glEnd();
//face 5.3
Gl.glBegin(Gl.GL_QUADS);
Gl.glColor3ub(85, 85, 85);
Gl.glVertex3d(0, -1 * (olcek3d_yuk2 + olcek3d_yuk3 + olcek3d_yuk4), 0);
Gl.glVertex3d(olcek3d_gen4, -1 * (olcek3d_yuk2 + olcek3d_yuk3 + olcek3d_yuk4), 0);
Gl.glVertex3d(olcek3d_gen4, -1 * (olcek3d_yuk2 + olcek3d_yuk3 + olcek3d_yuk4), olcek_derinlik);
Gl.glVertex3d(0, -1 * (olcek3d_yuk2 + olcek3d_yuk3 + olcek3d_yuk4), olcek_derinlik);
Gl.glEnd();
//face kapak.2
Gl.glBegin(Gl.GL_QUADS);
Gl.glColor3ub(80, 80, 80);
Gl.glVertex3d(olcek3d_gen3, -1 * (olcek3d_yuk1 + olcek3d_yuk2), 0);
Gl.glVertex3d(olcek3d_gen4, -1 * (olcek3d_yuk1 + olcek3d_yuk2), 0);
Gl.glVertex3d(olcek3d_gen4, -1 * (olcek3d_yuk1 + olcek3d_yuk2), olcek_derinlik);
Gl.glVertex3d(olcek3d_gen3, -1 * (olcek3d_yuk1 + olcek3d_yuk2), olcek_derinlik);
Gl.glEnd();
}
因为您仅在 Dragging2
处于活动状态时才应用 xrot
旋转...您应该在每一帧执行此操作,或者在鼠标向上时将最终旋转应用于用于初始化的某些初始矩阵框架开始时的模型视图而不是标识
所以最简单的就是改:
if (Dragging2)
{
Gl.glRotated(xrot, xRotate, yRotate, zRotate);
listBox1.Items.Add("angle " + xrot.ToString() +" xrot "+ xRotate+" yrot "+ yRotate+" zrot "+zRotate+" left_right "+left_right+" up_Down "+ up_down);
}
进入:
Gl.glRotated(xrot, xRotate, yRotate, zRotate);
if (Dragging2)
{
listBox1.Items.Add("angle " + xrot.ToString() +" xrot "+ xRotate+" yrot "+ yRotate+" zrot "+zRotate+" left_right "+left_right+" up_Down "+ up_down);
}
不确定列表框的用途(或者它是否没有内存泄漏...)。但是,如果您的 xRotate, yRotate, zRotate
发生变化,那么您需要实施初始累积矩阵 ...