OPENGL C# 更改对象视图
OPENGL C# Change Object View
我在 opengl 中有一些对象,对象是在 x 位置的视图,我想让它在 y 位置查看如何制作它?
这是代码
Gl.glBegin(Gl.GL_TRIANGLES);
for (iogl = 0; (iogl <= 360); iogl = (iogl + 3))
{
Gl.glColor3f(1, 0, 0);
Gl.glVertex3f(4 * (float)Math.Sin(Math.PI / 180 * iogl), 4 * (float)Math.Cos(Math.PI / 180 * iogl), 25);
Gl.glVertex3f(4 * (float)Math.Sin(Math.PI / 180 * (iogl + 20)), 4 * (float)Math.Cos(Math.PI / 180 * (iogl + 20)), 25);
Gl.glVertex3f(0, 0, 35);
}
Gl.glEnd();
Gl.glBegin(Gl.GL_QUADS);
for (iogl = 0; (iogl <= 359); iogl++)
{
//Tabung
Gl.glColor3f(1, 1, 1);
Gl.glVertex3f(4 * (float)Math.Sin(Math.PI / 180 * iogl), 4 * (float)Math.Cos(Math.PI / 180 * iogl), 25);
Gl.glVertex3f(4 * (float)Math.Sin(Math.PI / 180 * (iogl + 30)), 4 * (float)Math.Cos(Math.PI / 180 * (iogl + 30)), 25);
Gl.glVertex3f(4 * (float)Math.Sin(Math.PI / 180 * iogl), 4 * (float)Math.Cos(Math.PI / 180 * iogl), 6);
Gl.glVertex3f(4 * (float)Math.Sin(Math.PI / 180 * (iogl + 30)), 4 * (float)Math.Cos(Math.PI / 180 * (iogl + 30)), 6);
}
Gl.glEnd();
Gl.glBegin(Gl.GL_QUADS);
for (iogl = 0; (iogl <= 359); iogl++)
{
//Merah Tengah
Gl.glColor3f(1, 0, 0);
Gl.glVertex3f(4 * (float)Math.Sin(Math.PI / 180 * iogl), 4 * (float)Math.Cos(Math.PI / 180 * iogl), 6);
Gl.glVertex3f(4 * (float)Math.Sin(Math.PI / 180 * (iogl + 30)), 3 * (float)Math.Cos(Math.PI / 180 * (iogl + 30)), 6);
Gl.glVertex3f(3 * (float)Math.Sin(Math.PI / 180 * iogl), (3) * (float)Math.Cos(Math.PI / 180 * iogl), 3);
Gl.glVertex3f(3 * (float)Math.Sin(Math.PI / 180 * (iogl + 20)), (3) * (float)Math.Cos(Math.PI / 180 * (iogl + 20)), 3);
}
Gl.glEnd();
Gl.glBegin(Gl.GL_QUADS);
for (iogl = 0; (iogl <= 359); iogl++)
{
//PUTIH Belakang
Gl.glColor3f(1, 1, 1);
Gl.glVertex3f(3 * (float)Math.Sin(Math.PI / 180 * iogl), 3 * (float)Math.Cos(Math.PI / 180 * iogl), 3);
Gl.glVertex3f(3 * (float)Math.Sin(Math.PI / 180 * (iogl + 20)), 3 * (float)Math.Cos(Math.PI / 180 * (iogl + 20)), 3);
Gl.glVertex3f(3 * (float)Math.Sin(Math.PI / 180 * iogl), 3 * (float)Math.Cos(Math.PI / 180 * iogl), -20);
Gl.glVertex3f(3 * (float)Math.Sin(Math.PI / 180 * (iogl + 20)), 3 * (float)Math.Cos(Math.PI / 180 * (iogl + 20)), -20);
}
Gl.glEnd();
Gl.glBegin(Gl.GL_POLYGON);
for (iogl = 0; (iogl <= 359); iogl++)
{
//putih alas Belakang
Gl.glColor3f(1, 1, 1);
Gl.glVertex3f(3.5f * (float)Math.Sin(Math.PI / 180 * iogl), 3.5f * (float)Math.Cos(Math.PI / 180 * iogl), -20);
Gl.glVertex3f(3.5f * (float)Math.Sin(Math.PI / 180 * (iogl + 20)), 3.5f * (float)Math.Cos(Math.PI / 180 * iogl + 20), -20);
Gl.glVertex3f(3.5f * (float)Math.Sin(Math.PI / 180 * iogl), 3.5f * (float)Math.Cos(Math.PI / 180 * iogl), -25);
Gl.glVertex3f(3.5f * (float)Math.Sin(Math.PI / 180 * (iogl + 20)), 3.5f * (float)Math.Cos(Math.PI / 180 * iogl + 20), -25);
}
Gl.glEnd();
Gl.glBegin(Gl.GL_POLYGON);
for (iogl = 0; (iogl <= 360); iogl = (iogl + 90))
{
Gl.glColor3f(1, 0, 0);
Gl.glVertex3f(0, 0, -25);
Gl.glVertex3f(0, 10 * (float)Math.Sin(Math.PI / 180 * iogl), -17);
Gl.glVertex3f(10 * (float)Math.Cos(Math.PI / 180 * iogl), 0, -25);
Gl.glVertex3f(0, 0, -25);
Gl.glVertex3f(10 * (float)Math.Cos(Math.PI / 180 * iogl), 0, -17);
Gl.glVertex3f(0, 10 * (float)Math.Sin(Math.PI / 180 * iogl), -25);
}
Gl.glEnd();
这里是对象在 x 位置的屏幕截图,我想让它(站立)在 y 位置我应该在代码中添加什么
在开头调用glTranslatef函数。这将乘以矩阵,您绘制的所有内容都将相对于转换后的坐标。
在您的情况下,您需要将火箭绕 Z 轴旋转 90 度以使其位于 y 轴上。
如果您将这一行放在您发布的代码的开头,它应该可以工作。
GL.Rotate(90.0f, 0.0f, 0.0f, 1.0f);
我在 opengl 中有一些对象,对象是在 x 位置的视图,我想让它在 y 位置查看如何制作它? 这是代码
Gl.glBegin(Gl.GL_TRIANGLES);
for (iogl = 0; (iogl <= 360); iogl = (iogl + 3))
{
Gl.glColor3f(1, 0, 0);
Gl.glVertex3f(4 * (float)Math.Sin(Math.PI / 180 * iogl), 4 * (float)Math.Cos(Math.PI / 180 * iogl), 25);
Gl.glVertex3f(4 * (float)Math.Sin(Math.PI / 180 * (iogl + 20)), 4 * (float)Math.Cos(Math.PI / 180 * (iogl + 20)), 25);
Gl.glVertex3f(0, 0, 35);
}
Gl.glEnd();
Gl.glBegin(Gl.GL_QUADS);
for (iogl = 0; (iogl <= 359); iogl++)
{
//Tabung
Gl.glColor3f(1, 1, 1);
Gl.glVertex3f(4 * (float)Math.Sin(Math.PI / 180 * iogl), 4 * (float)Math.Cos(Math.PI / 180 * iogl), 25);
Gl.glVertex3f(4 * (float)Math.Sin(Math.PI / 180 * (iogl + 30)), 4 * (float)Math.Cos(Math.PI / 180 * (iogl + 30)), 25);
Gl.glVertex3f(4 * (float)Math.Sin(Math.PI / 180 * iogl), 4 * (float)Math.Cos(Math.PI / 180 * iogl), 6);
Gl.glVertex3f(4 * (float)Math.Sin(Math.PI / 180 * (iogl + 30)), 4 * (float)Math.Cos(Math.PI / 180 * (iogl + 30)), 6);
}
Gl.glEnd();
Gl.glBegin(Gl.GL_QUADS);
for (iogl = 0; (iogl <= 359); iogl++)
{
//Merah Tengah
Gl.glColor3f(1, 0, 0);
Gl.glVertex3f(4 * (float)Math.Sin(Math.PI / 180 * iogl), 4 * (float)Math.Cos(Math.PI / 180 * iogl), 6);
Gl.glVertex3f(4 * (float)Math.Sin(Math.PI / 180 * (iogl + 30)), 3 * (float)Math.Cos(Math.PI / 180 * (iogl + 30)), 6);
Gl.glVertex3f(3 * (float)Math.Sin(Math.PI / 180 * iogl), (3) * (float)Math.Cos(Math.PI / 180 * iogl), 3);
Gl.glVertex3f(3 * (float)Math.Sin(Math.PI / 180 * (iogl + 20)), (3) * (float)Math.Cos(Math.PI / 180 * (iogl + 20)), 3);
}
Gl.glEnd();
Gl.glBegin(Gl.GL_QUADS);
for (iogl = 0; (iogl <= 359); iogl++)
{
//PUTIH Belakang
Gl.glColor3f(1, 1, 1);
Gl.glVertex3f(3 * (float)Math.Sin(Math.PI / 180 * iogl), 3 * (float)Math.Cos(Math.PI / 180 * iogl), 3);
Gl.glVertex3f(3 * (float)Math.Sin(Math.PI / 180 * (iogl + 20)), 3 * (float)Math.Cos(Math.PI / 180 * (iogl + 20)), 3);
Gl.glVertex3f(3 * (float)Math.Sin(Math.PI / 180 * iogl), 3 * (float)Math.Cos(Math.PI / 180 * iogl), -20);
Gl.glVertex3f(3 * (float)Math.Sin(Math.PI / 180 * (iogl + 20)), 3 * (float)Math.Cos(Math.PI / 180 * (iogl + 20)), -20);
}
Gl.glEnd();
Gl.glBegin(Gl.GL_POLYGON);
for (iogl = 0; (iogl <= 359); iogl++)
{
//putih alas Belakang
Gl.glColor3f(1, 1, 1);
Gl.glVertex3f(3.5f * (float)Math.Sin(Math.PI / 180 * iogl), 3.5f * (float)Math.Cos(Math.PI / 180 * iogl), -20);
Gl.glVertex3f(3.5f * (float)Math.Sin(Math.PI / 180 * (iogl + 20)), 3.5f * (float)Math.Cos(Math.PI / 180 * iogl + 20), -20);
Gl.glVertex3f(3.5f * (float)Math.Sin(Math.PI / 180 * iogl), 3.5f * (float)Math.Cos(Math.PI / 180 * iogl), -25);
Gl.glVertex3f(3.5f * (float)Math.Sin(Math.PI / 180 * (iogl + 20)), 3.5f * (float)Math.Cos(Math.PI / 180 * iogl + 20), -25);
}
Gl.glEnd();
Gl.glBegin(Gl.GL_POLYGON);
for (iogl = 0; (iogl <= 360); iogl = (iogl + 90))
{
Gl.glColor3f(1, 0, 0);
Gl.glVertex3f(0, 0, -25);
Gl.glVertex3f(0, 10 * (float)Math.Sin(Math.PI / 180 * iogl), -17);
Gl.glVertex3f(10 * (float)Math.Cos(Math.PI / 180 * iogl), 0, -25);
Gl.glVertex3f(0, 0, -25);
Gl.glVertex3f(10 * (float)Math.Cos(Math.PI / 180 * iogl), 0, -17);
Gl.glVertex3f(0, 10 * (float)Math.Sin(Math.PI / 180 * iogl), -25);
}
Gl.glEnd();
这里是对象在 x 位置的屏幕截图,我想让它(站立)在 y 位置我应该在代码中添加什么
在开头调用glTranslatef函数。这将乘以矩阵,您绘制的所有内容都将相对于转换后的坐标。
在您的情况下,您需要将火箭绕 Z 轴旋转 90 度以使其位于 y 轴上。
如果您将这一行放在您发布的代码的开头,它应该可以工作。
GL.Rotate(90.0f, 0.0f, 0.0f, 1.0f);