C# SharpGL-DrawText平面文字和DrawText3D立体文字

先上平面文字绘制函数:DrawText(int x, int y, float r, float g, float b, string faceName, float fontSize, string text)
其中:
x,y:是屏幕坐标,及像素坐标;
r,g,b:是RGB颜色,范围:0~1f;
faceName:字体类型;
fontSize:字体大小;
text:绘制的内容;

需要注意的是:DrawText绘制需要用到屏幕像素坐标,在OpenGL中是3维世界坐标,我们绘制的物体通过视图矩阵、投影矩阵、模型矩阵等操作将其映射在2维屏幕上。
所以,若想将text精准的绘制在图形某一位置,就需要知道图形位置映射到屏幕上的坐标,就需要用到project投影函数。

SharpGL中可以用两种方式,两种方式原理上一样,只是SharpGL对其封装了一下,用起来更方便,不需要在重新获取OpenGL的视图矩阵、投影矩阵、模型矩阵。这里我们直接上封装后的方法,原始方法Project有一个对应的UnProject操作,下一节在整理。

在SharpGL命名空间下有一个:SceneGraph命名空间,其主要包括OpenGL对象和场景元素,如:光、材质、纹理、NURBS、着色器等,在该命名空间下有一个扩展类:OpenGLSceneGraphExtensions,这里就封装了投影矩阵以及获取OpenGL当前状态的视图矩阵、投影矩阵、纹理矩阵等方法,这里我们只用投影矩阵:
Vertex SharpGL.SceneGraph.OpenGLSceneGraphExtensions.Project(this OpenGL gl, Vertex vertex)
其中:
vertex:就是OpenGL世界坐标系下的坐标点。
返回值:就是该点对应的屏幕坐标点。

看下效果:绘制一个矩形框,并在四个顶点位置绘制指定坐标值

        private void openGLControl1_OpenGLDraw(object sender, RenderEventArgs args)
        {
   
   
            OpenGL gl = this.openGLControl1.OpenGL;
            gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);

            gl.MatrixMode(OpenGL.GL_PROJECTION);
            gl.LoadIdentity();         
            gl.Ortho(-10
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值