C# OpenGL(SharpGL)Begin函数End函数使用

18 篇文章 0 订阅
11 篇文章 1 订阅

Begin函数:

函数功能:

绘制图形起始函数,参数表示图元的类型。

函数原型:

void Begin(mode M);  (mode为unit类型,其值为在OpenGL类下定义的常数值)。

M(创建图元的类型)的值可以是如下值:

  GL_POINTS:把每一个顶点作为一个点进行处理,顶点n即定义了点n,共绘制N个点

  GL_LINES:把每一个顶点作为一个独立的线段,顶点2n-1和2n之间共定义了n条线段,总共绘制N/2条线段

  GL_LINE_STRIP:绘制从第一个顶点到最后一个顶点依次相连的一组线段,第n和n+1个顶点定义了线段n,总共绘制n-1条线段

  GL_LINE_LOOP:绘制从第一个顶点到最后一个顶点依次相连的一组线段,然后最后一个顶点和第一个顶点相连,第n和n+1个顶点定义了线段n,总共绘制n条线段

  GL_TRIANGLES:把每个顶点作为一个独立的三角形,顶点3n-2、3n-1和3n定义了第n个三角形,总共绘制N/3个三角形

  GL_TRIANGLE_STRIP:绘制一组相连的三角形,对于奇数n,顶点n、n+1和n+2定义了第n个三角形;对于偶数n,顶点n+1、n和n+2定义了第n个三角形,总共绘制N-2个三角形

  GL_TRIANGLE_FAN:绘制一组相连的三角形,三角形是由第一个顶点及其后给定的顶点确定,顶点1、n+1和n+2定义了第n个三角形,总共绘制N-2个三角形

  GL_QUADS:绘制由四个顶点组成的一组单独的四边形。顶点4n-3、4n-2、4n-1和4n定义了第n个四边形。总共绘制N/4个四边形

  GL_QUAD_STRIP:绘制一组相连的四边形。每个四边形是由一对顶点及其后给定的一对顶点共同确定的。顶点2n-1、2n、2n+2和2n+1定义了第n个四边形,总共绘制N/2-1个四边形

GL_POLYGON:绘制一个凸多边形。顶点1到n定义了这个多边形。

 

End函数:

函数功能:绘制图形终止函数。

函数原型:void End()

 

注意事项:

(1)在Begin和End函数之间可调用的函数:

Vertex*() 设置顶点坐标
Color*()     
设置当前颜色
Index*()     
设置当前颜色表
Normal*()   
设置法向坐标
EvalCoord*()
产生坐标
CallList()     
执行显示列表

CallLists()     执行显示列表
TexCoord*()   
设置纹理坐标
EdgeFlag*()   
控制边界绘制
Material*()     
设置材质

*表示已所写字符串开头的一类函数均可调用。

 

(2)Begin与End()函数使用注意点:

在OpenGL最初的定义中,几何对象数据的输入是通过调用glBegin()和glEnd()接口对来实现的。glBegin()的参数表示其下所接收的数据是何种类型,如点,线段,三角型,扇形三角行,多边形等等。
  而如glTranslatef(), glScalef(), glRotatef()等接口的作用是对当前模型空间进行几何转换。如glTranslatef(1,2,3);表示把模型的世界坐标原点从当前位置(系统总认为是(0,0,0))转到起相对位置(1,2,3)。注意,OpenGL空间使用的是右手系的定义,与屏幕水平方向一致,并方向向右的是x轴;与屏幕方向垂直方向一致,并方向向上的是y轴;与屏幕屏幕垂直,方向向外的是z轴。
  glTranslatef()等此类几何转换接口在glBegin()和glEnd()之间是无效的。因此,如果想对模型的位置进行转换,要在调用glBegin()和glEnd()接口对之前行处理。

例如:

错误调用方式:
gl.Begin(GL_TRIANGLES);
gl.Translatef(1,2,3);
  图像绘制代码段......
gl.End();


  正确调用方式:
gl.Translatef(1,2,3);
gl.Begin(GL_TRIANGLES);
    图像绘制代码段......
gl.End();

 

注意以上的函数均是OpenGL类内的函数,需要先创建OpenGl对象。

C#中,利用SharpGL库可以创建简单的三维坐标系绘图Demo。SharpGL是一个开源的.NET库,用于绘制OpenGL图形,包括3D模型和几何体。以下是一个基础示例,展示如何使用SharpGL绘制一个基本的三维坐标轴: ```csharp using System; using OpenGL; namespace SharpGLExample { class Program { static void Main(string[] args) { // 初始化OpenGL上下文 using (var context = new GLContext()) { // 设置窗口大小 var windowSize = new Vector2(800, 600); context.MakeCurrent(windowSize); // 设置视口 GL.Viewport(0, 0, (int)windowSize.X, (int)windowSize.Y); // 清空颜色和深度缓冲区 GL.Clear(ClearBufferMask.Color | ClearBufferMask.Depth); // 创建并设置投影矩阵(透视) Matrix4 projection = Matrix4.PerspectiveFovLH(MathHelper.DegreesToRadians(45), (float)windowSize.X / windowSize.Y, 0.1f, 100.0f); GL.MatrixMode(MatrixMode.Projection); GL.LoadMatrix(projection); // 创建并设置模型视图矩阵 Matrix4 modelView = Matrix4.LookAt(new Vector3(0, 0, -5), new Vector3(0, 0, 0), new Vector3(0, 1, 0)); GL.MatrixMode(MatrixMode.Modelview); GL.LoadMatrix(modelView); // 绘制坐标轴 DrawAxis(); // 提交所有更改并交换缓冲区 GL.Flush(); SwapBuffers(context.Handle); } } private static void DrawAxis() { // 坐标轴长度 const float axisLength = 5.0f; // X轴 glBegin(PrimitiveType.Lines); glColor3f(1, 0, 0); // 红色 glVertex3f(-axisLength, 0, 0); glVertex3f(axisLength, 0, 0); glEnd(); // Y轴 glBegin(PrimitiveType.Lines); glColor3f(0, 1, 0); // 绿色 glVertex3f(0, -axisLength, 0); glVertex3f(0, axisLength, 0); glEnd(); // Z轴 glBegin(PrimitiveType.Lines); glColor3f(0, 0, 1); // 蓝色 glVertex3f(0, 0, -axisLength); glVertex3f(0, 0, axisLength); glEnd(); } } } ``` 这个示例首先设置了窗口和视口,然后定义了投影和模型视图矩阵。接着,它调用`DrawAxis`方法绘制X、Y、Z三个正方向的线段,表示坐标轴。 要运行此代码,你需要安装SharpGL库并在项目中引用。注意,这只是一个最基础的例子,实际应用可能还需要处理用户输入、光照、纹理等更复杂的场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值