1、SharpGL库文件
下载链接1:SharpGL程序库文件.rar-C#文档类资源-CSDN下载
2、用法visua studio winform界面工具中,鼠标右击添加选项卡取名SharpGL4,在选项卡SharpGL4中鼠标右击选择项
工程属性设置为.NET4
将OpenGLControl控件拖到winform界面上。
添加引用
2、添加openGLControl1控件事件函数openGLControl1_OpenGLInitialized、openGLControl1_Resized、openGLControl1_OpenGLDraw
openGLControl1_OpenGLInitialized:
private void openGLControl1_OpenGLInitialized(object sender, EventArgs e)
{
OpenGL gl = openGLControl1.OpenGL;
gl.ClearColor(0, 0, 0, 0);
length[0] = 10.0f; //机器人关节1长度
length[1] = 10.0f;
length[2] = 8.0f;
length[3] = 2.0f;
}
openGLControl1_Resized:
private void openGLControl1_Resized(object sender, EventArgs e)
{
OpenGL gl = openGLControl1.OpenGL;
// 设置当前矩阵模式,对投影矩阵应用随后的矩阵操作
gl.MatrixMode(OpenGL.GL_PROJECTION);
// 重置当前指定的矩阵为单位矩阵,将当前的用户坐标系的原点移到了屏幕中心
gl.LoadIdentity();
// 创建透视投影变换
gl.Perspective(60.0f, (double)Width / (double)Height, 0.01, 100.0); //修改60.0f,更改显示物体大小
// 视点变换
//gl.LookAt(-5, 5, -5, 0, 0, 0, 0, 1, 0); //VS2010及其之前版本使用该参数
//gl.LookAt(-5, 5, 15, 0, 0, 0, 0, 1, 0); //VS2012以后版本,使用该参数
gl.LookAt(-5, 10, 45, 0, 0, 0, 0, 1, 0); //VS2012以后版本,使用该参数
// 设置当前矩阵为模型视图矩阵
gl.MatrixMode(OpenGL.GL_MODELVIEW);
}
openGLControl1_OpenGLDraw :
private void openGLControl1_OpenGLDraw(object sender, PaintEventArgs e)
{
OpenGL gl = openGLControl1.OpenGL;
gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT); //清除深度缓存
gl.LoadIdentity(); // 重置当前指定的矩阵为单位矩阵,将当前的用户坐标系的原点移到了屏幕中心
DrawRobotClass myDraw = new DrawRobotClass(); //使用SharpGL库做的3D物体——t太阳系和4轴机械臂
//myDraw.DrawSunSys(ref gl, angle); //测试-太阳系统
myDraw.DrawRobot1(ref gl, theta, length); //测试-4关节机械臂
}
SharpGL绘制基本的立方体:
/// <summary>
/// 绘制立方体
/// </summary>
/// <param name="gl">OpenGL对象</param>
/// <param name="xPos">立方体X轴位置</param>
/// <param name="yPos">立方体Y轴位置</param>
/// <param name="zPos">立方体Z轴位置</param>
/// <param name="isLine">是否线段显示</param>
private void DrawCube(ref OpenGL gl, float xPos, float yPos, float zPos, bool isLine)
{
gl.PushMatrix(); //矩阵依次压入堆栈中
gl.Translate(xPos, yPos, zPos); //
if (isLine)
{
gl.Begin(OpenGL.GL_LINE_STRIP);
}
else
{
gl.Begin(OpenGL.GL_POLYGON); //GL_POLYGON:多边形
}
//一个立方体6个面。每个面四个点。一个立方体8个点
//顶面:
gl.Vertex(0.0f, 0.0f, 0.0f); //顶点坐标
gl.Vertex(0.0f, 0.0f, -1.0f);
gl.Vertex(-1.0f, 0.0f, -1.0f);
gl.Vertex(-1.0f, 0.0f, 0.0f);
//底面
gl.Vertex(0.0f, -1.0f, 0.0f);
gl.Vertex(0.0f, -1.0f, -1.0f);
gl.Vertex(-1.0f, -1.0f, -1.0f);
gl.Vertex(-1.0f, -1.0f, 0.0f);
//前面
gl.Vertex(0.0f, 0.0f, 0.0f);
gl.Vertex(-1.0f, 0.0f, 0.0f);
gl.Vertex(-1.0f, -1.0f, 0.0f);
gl.Vertex(0.0f, -1.0f, 0.0f);
//后面
gl.Vertex(0.0f, 0.0f, -1.0f);
gl.Vertex(0.0f, -1.0f, -1.0f);
gl.Vertex(-1.0f, -1.0f, -1.0f);
gl.Vertex(-1.0f, 0.0f, -1.0f);
//左面
gl.Vertex(-1.0f, 0.0f, 0.0f);
gl.Vertex(-1.0f, -1.0f, -1.0f);
gl.Vertex(-1.0f, 0.0f, -1.0f);
gl.Vertex(-1.0f, 0.0f, 0.0f);
//右面
gl.Vertex(0.0f, 0.0f, 0.0f);
gl.Vertex(0.0f, -1.0f, 0.0f);
gl.Vertex(0.0f, -1.0f, -1.0f);
gl.Vertex(0.0f, 0.0f, -1.0f);
gl.End();
gl.PopMatrix(); //弹出堆栈顶部的矩阵
}
2、测试太阳系
构造 太阳系中的太阳、地球、月亮三个天体。太阳为自转、地球绕太阳公转并且自转、月亮绕地球转并且自转。
angle[0]、angle[1]、angle[2]分别对应太阳、地球、月亮的自己转动角度。(补充:月亮绕地球转一圈27.3天、月亮自转一圈也是27.3天,所以地球上的人见不到月亮背面)
/// <summary>
/// 模拟太阳、地球、月亮运动
/// </summary>
/// <param name="gl"></param>
/// <param name="angle"></param>
public void DrawSunSys(ref OpenGL gl,float[] angle)
{
//CuePos[] cubePos
//画太阳
gl.PushMatrix();
{
gl.Color(1.0f, 0.0f, 0.0f);
gl.Translate(0.0f, 0.0f, 0.0f);
gl.Scale(4.0f, 4.0f, 4.0f);
gl.Rotate(angle[0], 0.0f, 1.0f, 0.0f);
DrawCube(ref gl, 0.0f, 0.0f, 0.0f, false);
}
gl.PopMatrix();
//画地球
gl.PushMatrix();
{
gl.Color(0.0f, 0.0f, 1.0f);
gl.Rotate(angle[1], 0.0f, 1.0f, 0.0f); //地球公转,绕太阳旋转。Y轴
gl.Translate(0.0f, 0.0f, -20.0f); //地球-太阳距离
gl.Rotate(angle[0], 0.0f, 1.0f, 0.0f); //地球自转 Y轴旋转
gl.Scale(3.0f, 3.0f, 3.0f); //地球尺寸
DrawCube(ref gl, 0.0f, 0.0f, 0.0f, true);
}
gl.PopMatrix();
//画月亮
gl.PushMatrix();
{
gl.Color(1.0f, 1.0f, 0.0f); //黄色
gl.Rotate(angle[1], 0.0f, 1.0f, 0.0f); //和地球一起绕太阳转。Y轴
gl.Translate(0.0f, 0.0f, -20.0f); //旋转变换后,前面的Z轴对应到现在的X轴。到太阳距离
gl.Rotate(angle[2], 0.0f, 1.0f, 0.0f); //月亮绕地球转:Z轴
gl.Translate(-5.0f, 0.0f, 0.0f); //月亮到地球距离5.0f
gl.Scale(2.0f, 2.0f, 2.0f); //月球尺寸
DrawCube(ref gl, 0.0f, 0.0f, 0.0f, true);
}
gl.PopMatrix();
}
运动程序:
3、测试四轴机械臂
代码
工程下载链接: