使用HGE显示中文,为什么文字会有锯齿?

查看数: 3112 | 评论数: 5 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2013-3-28 22:44

正文摘要:

使用的矢量字体,但是显示的文字却有锯齿。 貌似用freetype从字体库里提出来的时候就已经有锯齿了,因为在向纹理拷贝的时候没有任何操作。 黑色的锯齿,看起来像是描边。 求各位大神指导....谢谢 不过如果用像 ...

回复

Shy07 发表于 2013-4-3 02:19:23
我意思是在帧缓存模式下把文字贴图render上去
SetClipping就是render文字贴图的时候分割出文字贴图在目标贴图上显示的区域

下面的是opengl的两个函数,dx应该也是可以实现的

[pre lang="c" line="1"]BOOL BeginTarget(image_p _img,uint8_t clear){
    static int cacheid = 0;

        if(!_img)
                return FALSE;
        BIND_AND_TEST_CACHE(_img);
    target_w = _img->w;
    target_h = _img->h;
    //reset to target_clip
    target_clip = 1;
    ResetClip();
    glBlendEquationSeparate(GL_FUNC_ADD, GL_MAX);

    glBindFramebuffer(GL_FRAMEBUFFER, fbo);
    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, cacheid, 0);

    glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glOrtho(0,_img->w,0,_img->h, -1, 1);
    glMatrixMode(GL_MODELVIEW);

        glPushAttrib(GL_VIEWPORT_BIT);

        glViewport(0,0,_img->w, _img->h);

    if(clear){
        glClearColor( COLOR_T_R(screen_c), COLOR_T_G(screen_c), COLOR_T_B(screen_c), COLOR_T_A(screen_c) );
        glClear( GL_COLOR_BUFFER_BIT);
    }
        return TRUE;
}

void EndTarget(){
        glViewport(0,0, nge_screen.width, nge_screen.height);
        glPopAttrib();
        glBindFramebuffer(GL_FRAMEBUFFER, 0);
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glOrtho(0,nge_screen.ori_width,nge_screen.ori_height,0, -1, 1);
        glMatrixMode(GL_MODELVIEW);
    glBlendEquation(GL_FUNC_ADD);
    //reset to screen clip
    target_clip = 0;
    ResetClip();
}[/pre]

PS:楼上这是引用里的删除线控制符影响到正文了,算是dz的bug么

ClaudeBell 发表于 2013-4-2 22:27:22
本帖最后由 ClaudeBell 于 2013-4-2 23:26 编辑
Shy07 发表于 2013-4-2 20:18
因为绘制文字的时候没有alpha混合
这些黑色锯齿实际是开启truetype后平滑的部分(alpha值小于255),而 ...


非常感谢,我试下

-------------------------------------
对于您说的SetClipping我不是特别理解,用Gfx_SetClipping貌似是切割屏幕,而不是切割图片?
我的想法是通过切割png,将切出的png信息(坐标啥的)保存为quad,之后再用hgeSprite->Render绘制。
不知道这个思路正确否

多谢
Shy07 发表于 2013-4-2 20:18:19
本帖最后由 Shy07 于 2013-4-2 20:48 编辑

因为绘制文字的时候没有alpha混合
这些黑色锯齿实际是开启truetype后平滑的部分(alpha值小于255),而像素字体正因为没有平滑的部分才看上去正常
你可以试试直接把freetype绘制的文字贴图render到屏幕上,对比一下就知道为什么了


看来已经知道为什么了,那就简单了,直接把freetype绘制的文字贴图render到目标贴图上就好了:)

发现我的阅读水平越来越差了:(
如果是切割后再render出现这种情况的话,那就是切割的时候没有保存透明通道的问题了
可以试试不切割,直接SetClipping后render到目标贴图上

点评

保存透明通道是什么意思?我在每次render精灵字体之前都会重新设下blend,可是还是不行  发表于 2013-4-2 23:23
ClaudeBell 发表于 2013-3-29 00:10:49
晴兰 发表于 2013-3-28 23:56
听说FreeType本身就有反走样功能……

freetype的抗锯齿已经开了,不是这个问题。
现在发现是这样,我是为了实现图块的功能,将一张png切成多块,然后拼成一张图,在这上面显示文字就有问题。
如果只是用单张png做纹理显示,不做切割什么的,就是直接显示,那么就没问题。

已经完全摸不着头脑了...

晴兰 发表于 2013-3-28 23:56:58
提示: 作者被禁止或删除 内容自动屏蔽

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部