难道在LINUX中MOTIF编的程序就显示出不来linux 汉字乱码吗

Linux内核汉字显示技术
> Linux内核汉字显示技术
Linux内核汉字显示技术
在阐述基于Linux核心的汉字显示的技术细节之前,有必要介绍一下原有linux的工作机制。这里主要涉及到两部分的知识,就是Linux下终端和帧缓冲的实现.本文引用地址: &控制台(console) &通常我们在linux下看到的控制台(console)是由几个设备完成的。分别是/dev/ttyN(其中tty0就是/dev/console, tty1,tty2就是不同的虚拟终端(virtual console)).通常使用热键alt+Fn来在这些虚拟终端之间进行切换。所有的这些tty设备都是由 linux/drivers/char/console.c和vt.c对应。其中console.c负责绘制屏幕上的字符,vt.c负责管理不同的虚拟终 端,并且负责提供console.c需要绘制的内容。Vt.c把不同虚拟终端下需要交给console.c绘制的内容放到不同的缓存中去。Vt.c管理着 这样一个缓冲区的数组,并且负责在其间切换,以指定哪一个缓冲区是被激活的。你所看到的虚拟终端就对应着被激活的缓冲区。Console.c同时也负责接 收终端的输入,然后把接收到的输入放到缓冲区。 &帧缓冲(framebuffer) &Framebuffer是把显存抽象后的一种设备,可以通过这个设备的读写直接对显存进行操作。这种操作是抽象的,统一的。用户不必关心物理显存的位置、换页机制等等具体细节。这些都是由Framebuffer设备驱动来完成的。 &Framebuffer对应的源文件在linux/drivers/video/目录下。总的抽象设备文件为fbcon.c,在这个目录下还有与各种显卡驱动相关的源文件。在使用帧缓冲时,Linux是将显卡置于图形模式下的. &试验 &我们以一个简单的例子来说明字符显示的过程。我们假设是在虚拟终端1(/dev/tty1)下运行一个如下的简单程序。 &main ( ) &{ &puts(&hello, world.n&); &} &puts函数向缺省输出文件(/dev/tty1)发出写的系统调用write(2)。系统调用到linux核心里面对应的核心函数是console.c 中的con_write(),con_write()最终会调用do_con_write( )。在do_con_write( )中负责把&hello, world.n&这个字符串放到tty1对应的缓冲区中去。 &do_con_write( )还负责处理控制字符和光标的位置。让我们来看一下do_con_write()这个函数的声明。 &static int do_con_write(struct tty_struct * tty, int &from_user, const unsigned char *buf, int count) 其中tty是指向tty_struct结构的指针,这个结构里面存放着关于这个tty的所有信息(请参照 linux/include/linux/tty.h)。Tty_struct结构中定义了通用(或高层)tty的属性(例如宽度和高度等)。 &在do_con_write( )函数中用到了tty_struct结构中的driver_data变量。 &driver_data是一个vt_struct指针。在vt_struct结构中包含这个tty的序列号(我们正使用tty1,所以这个序号为1)。Vt_struct结构中有一个vc结构的数组vc_cons,这个数组就是各虚拟终端的私有数据。 &static int do_con_write(struct tty_struct * tty, int &from_user,const unsigned char *buf, int count) &{ &struct vt_struct *vt = (struct vt_struct *)tty-& &driver_//我们用到了driver_data变量 &. . . . . &currcons = vt-&vc_ file://我们在这里的vc_nums就是1 &. . . . . &} &要访问虚拟终端的私有数据,需使用vc_cons〔currcons〕.d指针。这个指针指向的结构含有当前虚拟终端上光标的位置、缓冲区的起始地址、缓冲区大小等等。 &&hello, world.n&中的每一个字符都要经过conv_uni_to_pc( ) &这个函数转换成8位的显示字符。这要做的主要目的是使不同语言的国家能把16位的UniCode码映射到8位的显示字符集上,目前还是主要针对欧洲国家的语言,映射结果为8位,不包含对双字节(double byte)的范围。 &这种UNICODE到显示字符的映射关系可以由用户自行定义。在缺省的映射表上,会把中文的字符映射到其他的字符上,这是我们不希望看到也是不需要的。所以我们有两个选择∶ &1不进行conv_uni_to_pc( )的转换。 &2加载符合双字节处理的映射关系,即对非控制字符进行1对1的不变映射。我们自己定制的符合这种映射关系的UNICODE码表是direct.uni。 &要想查看/装载当前系统的unicode映射表,可使外部命令loadunimap。 &经过conv_uni_to_pc( )转换之后,&hello, world.n&中的字符被一个一个地填写到tty1的缓冲区中。然后do_con_write( )调用下层的驱动,把缓冲区中的内容输出到显示器上(也就相当于把缓冲区的内容拷贝到VGA显存中去)。 &sw-&con_putcs(vc_cons〔currcons〕.d, (u16 *)draw_from, (u16 &*)draw_to-(u16 *)draw_from, y, draw_x); &之所以要调用底层驱动,是因为存在不同的显示设备,其对应VGA显存的存取方式也不一样。 &上面的Sw-&con_putcs( )就会调用到fbcon.c中的fbcon_putcs()函数(con_putcs是一个函数的指针,在Framebuffer模式下指向 fbcon_putcs()函数)。也就是说在do_con_write( )函数中是直接调用了fbcon_putcs()函数来进行字符的绘制。比如说在256色模式下,真正负责输出的函数是void fbcon_cfb8_putcs(struct vc_data *conp, struct display *p,const unsigned short *s, int count, int &yy, int xx) &显示中文 &比如说我们试图输出一句中文∶putcs(你好n );(你好的内码为0xc4,0xe3,0xba,0xc3)。这时候会怎么样呢,有一点可以肯定,"你好"肯定不会出现在屏幕上,原因有∶核心中没有汉字字库,中文显示就是无米之炊了. &1在负责字符显示的void fbcon_cfb8_putcs( )函数中,原有操作如下∶对于每个要显示的字符,依次从虚拟终端缓冲区中以WORD为单位读取(低位字节是ASCII码,高8位是字符的属性),由于汉字 是双字节编码方式,所以这种操作是不可能显示出汉字的,只能显示出xxxx_putcs()是一个一个VGA字符. &要解决的问题∶ &确保在do_con_write( )时uni□pc转换不会改变原有编码。一个很直接的实现方式就是加载一个我们自己定制的UNICODE映射表,loadunimapdirect.uni,或者直接把direct.uni置为核心的缺省映射表。 &针对如上问题,我们要做的第一个尝试方案是如下。 &首先需要在核心中加载汉字字库,然后修改fbcon_cfb8_putcs()函数,在fbcon_cfb8_putcs( )中一次读两个WORD,检查这两个WORD的低位字节是否能拼成一个汉字,如果发现能拼成一个汉字,就算出这个汉字在汉字字库中的偏移,然后把它当成一 个16 x 16的VGA字符来显示。 &试验的结果表明∶ &1能够输出汉字,但仍有许多不理想的地方,比如说,输出以半个汉字开始的一串汉字,则这半个汉字后面的汉字都会是乱码。这是半个汉字的问题。 &2光标移动会破坏汉字的显示。表现为,光标移动过的汉字会变成乱码。这是因为光标的更新是通过xxxx_putc( )函数来完成的。 &xxxx_putc( )函数与xxxx_putcs( )函数实现的功能类似,但是xxxx_putc()函数只刷新一个字符而不是一个字符串,因而xxxx_putc()的输入参数是一个整数,而不是一个字 符串的地址。Xxxx_putc( )函数的声明如下∶void fbcon_cfb8_putc(struct vc_data *conp, struct display *p, int c, int yy, int xx) &下一个尝试方案就是同时修改xxxx_putcs( )函数和xxxx_putc()函数。为了解决半个汉字的问题,每一次输出之前,都从屏幕当前行的起始位置开始扫描,以确定要输出的字符是否落在半个汉字 的位置上。如果是半个汉字的位置,则进行相应的调整,即从向前移动一 &个字节的位置开始输出。 &这个方案有一个困难,即xxxx_putc( )函数不用缓冲区的地址,而是用一个整数作为参数。所以xxxx_putc( )无法直接利用相邻的字符来判别该定符是否是汉字。 &解决方案是,利用xxxx_putc( )的光标位置参数(yy, xx),可以逆推出该字符在缓冲区中的位置。但仍有一些小麻烦,在Linux的虚拟终端下,用户可能会上卷该屏幕(shift + pageup),导致光标的y座标和相应字符在缓冲区的行数不一致。相应的解决方案是,在逆推的过程中,考虑卷屏的参量。 &这样一来,我们就又进了一步,得到了一个相对更好的版本。但仍有问题没有解决。敲入turbonetcfg,会发现菜单的边框字符也被当成汉字显示。这是 因为,这种边框字符是扩展字符,也使用了字符的第8位,因而被当作汉字来显示。例如,单线一的制表符内码为0xC4,当连成一条长线就是由一连串0xC4 组成,而0xC4C4正是汉字哪。于是水平的制表符被一连串的哪字替代了。要解决这个问题就非常不容易了,因为制表符的种类比较多,而且垂直制表符与其后 面字符的组合型式又多种多样,因而很难判断出相应位置的字符是不是制表符,从理论上说,无论采取什么样的排除算法,都必然存在误判的情况,因为总存在二义 性,没有充足的条件来推断出当前字符究竟是制表符还是汉字。 &我们一方面寻找更好的排除组合算法,一方面试图寻找其它的解决方案。要想从根本上解决定个问题,必须利用其它的辅助信息,仅仅从缓冲区的字符来判断是不够的。 &经过一番努力,我们发现,在UNIX中使用扩展字符时,都要先输出字符转义序列(Escape sequence)来切换当前字符集。字符转义序列是以控制字符Esc为首的控制命令,在UNIX的虚拟终端中完成终端控制命令,这种命令包括,移动光标 座标、卷屏、删除、切换字符集等等。也就是说在输出代表制表符的字符串之前,通常是要先输出特定的字符转义序列。在console.c里,有根据字符转义 序列命令来记录字符状态的变量。结合该变量提供的信息,就可以非常干净地把制表符与汉字区别开来。 &在如上思路的指引下,我们又产生了新的解决方案。经过改动得到了另一各版本. &在这个新版本上,turbonetcfg在初次绘制的时候,制表符与汉字被清晰地区分开来,结果是非常正确的。但还有新的问题存在 ∶turbonetcfg在重绘的时候(如切换虚拟终端或是移动鼠标光标的时候),制表符还是变成了汉字,因为重绘完全依赖于缓冲区,而这时用来记录字符 集状态的变量并不反映当前字符集状态。问题还是没有最终解决。我们又回到了起点。∶( 看来问题的最终解决手段必须是把字符集的状态伴随每一个字符存在缓冲区中。让我们来研究一下缓冲区的结构。 &每一个字符占用16bit的缓冲区,低8位是ASCII值,完全被利用,高8位包含前景颜色和背景颜色的属性,也没有多余的空间可以利用。因而只能另外开辟新的缓冲区。为了保持一致性,我们决定在原来的缓冲区后面添加相同大小的缓冲区,用来存放是否是汉字的信息。 &也许有读者会问,我们只需要为每个字符添加一bit的信息来标志是否是汉字就足够了,为什么还要开辟与原缓冲区大小相同的双倍缓冲区,是不是太浪费呢? &我们先放下这个问题,稍后再作回答。 &其实,如果再添加一bit来标志是当前字符是汉字的左半边还是右半边的话,就会省去扫描屏幕上当前整行字符串的工作,这样一来,编程会更简单。但是有读者会问,即使是这样,使用8bit总够用了吧?为什么还要使用16bit呢? &我们的作法是∶用低8位来存放汉字另外一半的内码,用高8位中的2 bit来存放上面所讲的辅助信息,高8位的剩余6位可以用来存放汉字或其它编码方式(如BIG5或日文、韩文)的信息,从而使我们可以实现同屏显示多种双 字节语言的字符而不会有相互干扰。另外,在编程时,双倍缓冲也比较容易计算。 &这样我们就回答了如上的两个问题。 &迄今为止,我们有了一套彻底解决汉字和制表符相互干扰、半个汉字的刷新、重绘等问题的方案。剩下的就是具体编程实现的问题了。 &但是,由于Framebuffer的驱动很多,修改每一个驱动的xxxx_putc()函数和xxxx_putcs( )函数会是一项不小的工作,而且,改动驱动程序后,每种驱动的测试也是很麻烦的,尤其是对于有硬件加速的显卡,修改和测试会更不容易。 &那么,存不存在一种不需要修改显卡驱动程序的方法呢? &经过一番努力,我们发现,可以在调用xxxx_putcs( )或xxxx_putc()函数输出汉字之前,修改vga字库的指针使其指向所需显示的汉字在汉字字库中的位置,即把一个汉字当成两个vga ASCII字符输出。也就是说,在内核中存在两个字库,一个是原有的vga字符字库,另一个是汉字字库,当我们需要输出汉字的时候,就把vga字库的指针 指向汉字字库的相应位置,汉字输出完之后,再把该指针指向vga字库的原有位置。 &这样一来,我们只需要修改fbcon.c和console.c,其中console.c负责维护双倍缓冲区,把每一个字符的信息存入附加的缓冲区;而fbcon.c负责利用双倍缓冲区中附加的信息,调整vga字库的指针,调用底层的显示驱动程序。 &这里还有几个需要注意的地方∶ &1. 由于屏幕重绘等原因,调用底层驱动xxxx_putc( )和xxxx_putcs()的地方有多处。我们作了两个函数分别包装这两个调用,完成替换字库、调用xxxx_putcs( )或xxxx_putc( )、恢复字库等功能。 &2.为了实现向上滚屏(shift + pageup)时也能看到汉字,我们需要作另外的修改。 &Linux在设计虚拟终端的时候,提供了回顾被卷出屏幕以外的信息的功能,这就是用热键来向上滚屏(shift + pageup)。当前被使用的虚拟终端拥有一个公共的缓冲区(soft back),用来存放被滚出屏幕以外的信息。当切换虚拟终端的时候,公共缓冲区的内容会被清除而被新的虚拟终端使用。向上滚屏的时候,显示的是公共缓冲区 中的内容。因此,如果我们想在向上滚屏的时候看到汉字,公共缓冲区也必须加倍,以确保没有信息丢失。当滚出屏幕的信息向公共缓冲区填写的时候,必须把相应 的附加信息也填写进公共缓冲区的附加区域。这就要求fbcon.c必须懂得利用公共缓冲区的附加信息。 &当然,有另外一种偷懒的方法,那就是不允许用户向上滚屏,从而避免对公区缓冲区的处理。 &3.把不同的编码方式(GB、BIG5、日文和韩文)写成不同的module,以实现动态加载,从而使得扩展新的编码方式不需要重新编译核心。 &小结 &通过这次针对Linux核心的探索,我们发现,目前Linux的核心设计中,完全没有考虑到双字节编码字符的显示。我们在这种情况下摸索出一套解决核心下汉字显示的方法,并编码实现了该方案. &遵循核心的GPL版权声明,我们同时公布了实现这一技术的源代码,当然,这些改动仍然是GPL的.如果能对研究核心的朋友有所帮助,减少一些大家对核心的神秘感,将是我们最大的收获。 &但是对核心和中文化来说,这仅仅是一种尝试,远不是终点.这种改动多少带有一些hack的色彩,不太可能融合进权威的核心里去.我们仍在积极探索圆满解决 这一问题的方法,相信这一结果必然需要通过国内外Linux群体的共同努力才能实现.我们也非常欢迎大家和我们共同讨论这一问题. &测试 &本文实现的Kernel Patch文件(patch.kernel.chinese)可以从.cn下载。Cd /usr/src/(该目录下应有Linux核心源程序所在的目录linux/) patch -p0 -b & patch.kernel.chinese make menuconfig 请选择Console drivers选项中的 &〔*〕 Double Byte Character Display Support(EXPERIMENTAL) &〔*〕 Double Byte GB encode (module only) &〔*〕 VESA VGA graphics console &Virtual Frame Buffer support (ONLY FOR TESTING!) &8 bpp packed pixels support &16 bpp packed pixels support &VGA characters/attributes support &〔*〕 Select compiled-in fonts &〔*〕VGA 8x8 font &〔*〕VGA 8x16 font &make dep &make bzImage &make modules &make install &make modules_install &然后用新的核心启动。 &Insmod encode-gb.olinux操作系统文章专题:
linux相关文章:
分享给小伙伴们:
我来说两句……
最新技术贴
微信公众号二
微信公众号一linux和windows的字体文件一般是不一样的,默认情况下,linux的java7中一般不支持中文,activiti的动态流程图中的汉字需要java调用汉字的字库,这里需要配置一下java的汉字字库,网上查了一些办法,发现都没有效果,google到石博文博客中有篇文章介绍修改fontconfig.properties方法可以奏效。具体步骤:
1、先把windows中字体文件复制出来
选择你要的字体,点右键复制出来。
2、在java的lib目录下创建fonts文件夹,我的是:/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.55.x86_64/jre/lib/fonts,将字体TTF文件复制到该目录。
3、进到lib目录下执行下面的命令
# Make font scale
mkfontscale
# 寻找文件中含有iso10646的行
cat fonts.scale | grep iso10646
# 会看到如下面这样的输出
wqy-microhei.ttc -misc-wenquanyi micro hei-medium-r-normal--0-0-0-0-p-0-iso10646-1
我的输出了三个字体
[root@AY851bc7Z fonts]# cat fonts.scale |grep iso10646msyh.ttf -microsoft-microsoft yahei-medium-r-normal--0-0-0-0-p-0-iso10646-1msyhbd.ttf -microsoft-microsoft yahei-bold-r-normal--0-0-0-0-p-0-iso10646-1simsun.ttc -misc-simsun-medium-r-normal--0-0-0-0-p-0-iso10646-1
4、修改fontconfig.properties文件,我的linux上没有这个文件,也没有fontconfig.properties.src文件,我是从windows的D:\jdk1.7.0\jre\lib目录下找到的,你可以参考你的java目录,将该文件改名为fontconfig.properties,复制到linux的jre的lib目录下。
5、编辑lib/fontconfig.properties文件,在version=1后面加入:
#注意等号后面的和上面cat fonts.scale |grep iso10646输出的是一样的
allfonts.chinese-arphic1=-microsoft-microsoft yahei-medium-r-normal--0-0-0-0-p-0-iso10646-1allfonts.chinese-arphic1=-misc-simsun-medium-r-normal--0-0-0-0-p-0-iso10646-1allfonts.chinese-arphic1=-microsoft-microsoft yahei-bold-r-normal--0-0-0-0-p-0-iso10646-1
在配置文件中查找sequence.allfonts,如果其后的sequence开头的行中有chinese-arphics1,可以略过此步,否则在其后面加入一行:
sequence.fallback=chinese-arphic1
然后重新启动项目就可以显示汉字了。
阅读(...) 评论()java程序在linux系统停中文输出乱码,输出一个汉字对应一个问号 - Linux/Unix当前位置:& &&&java程序在linux系统停中文输出乱码,输出一个汉字java程序在linux系统停中文输出乱码,输出一个汉字对应一个问号&&网友分享于:&&浏览:52次java程序在linux系统下中文输出乱码,输出一个汉字对应一个问号linux输出问号问题:centos&5.6&64位系统,jdk1.6.0_10&
&&昨天有一个问题搞了一整天没搞出来.
程序部署到linux系统下
rmsg&=&getXSdata(fixlen);
String&strLink&="\r\n测试时间:"+getTime()+"\r\n"+&rmsg
rmsg的数据是查询数据库得到的。
数据库在linux下正常显示中文,只有程序中的汉字如:测试时间输出时显示问号,一个汉字对应一个问号。
起初一切都是正常的,第二天服务器重启就出现这个问题了。
我在/etc/profile文件中加入
export&LC_ALL="zh_CN.GB18030:zh_CN.GB2312:zh_CN.GBK:zh_CN:en_US.UTF-8:en_US:en:zh:zh_TW:zh_CN.BIG5"
export&LANG="zh_CN.UTF-8"
export&LANG="zh_CN.GB18030"
在/etc/sysconfig/i18n&中加入
LANG="zh_CN.GB18030"&&&
LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"&&&
SUPPORTED="zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en"&&&
SYSFONT="lat0-sun16"
我该设置该改的地方都改了,哪位大侠帮我看看,如何解决这个问题。
还有用程序远程连接上去返回的所有数据都是正常的,但是终端设备和telnet返回的数据是一个汉字对应一个问号------解决方案--------------------不要LANG="zh_CN.GB18030"
只要LANG="zh_CN.UTF-8"
Linux默认的都是UTF-8编码,指定那个会更麻烦。------解决方案--------------------中文显示也可能是字体不支持的原因。
不过既然你数据库里中文显示是正常的,
可能就不是字体的原因。
仅提供一个排查的方向,实在搞不定再考虑这个吧。
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有Linux系统Motif/OpenGL程序开发 -
X-Wind0w/Motif是计算机工作站和大型机主要的图形用户界面系统,也是自由操作系统Lin以的用户界面,目前已经成为应用最广泛的图形用户界面标准。采用X-Window/Motif技术开发的应用软件,具有很高的可移植件。0pen0L是二维图形设训与制作的接口标准,广泛应用于可视化技术、实体造型、CAD/CAM、模拟仿真等诸多领域,是一套独立于操作系统和硬件环境的三维图形库,具有强大的图形功能和优秀的跨平台移植能力,已经得到IT工业界的广泛认可。本书力求以通俗精炼的语言,介绍了在LinuxRedHat6.0平台上开发Motif和OpebGL程序的技术,可供广大希望从事图形界面、图形设计制作方面软件开发的Linux爱好者参考,也可作为Linux下C语言开发的入门教材,同时对其他Dnix系统下的开发人员也有 定借鉴作用。
Linux系统Motif/OpenGL程序开发 -
目 录序前 言第1部分 Linux程序开发基础知识第1章认识Linux1.1Linu是自由的操作系统1.2Linu和自由软件1.3Linu的发展简史1.4Linu在中国1.5总结第2章 Linux系统C语言开发支撑工具2.1支撑工具简介2.2C语言编译器―gcc2.2.1gcc简介2.2.2gcc的执行过程2.2.3gcc的基本用法和选项2.2.4gcc的错误类型及对策2.3程序维护工具――make2.3.1make简介2.3.2基本原理和用法2.3.3宏(marco)和注释2.4程序调试工具2.4.1调试工具简介2.4.2调试使用场合2.4.3调试的功能2.4.4调试对编译的要求2.4.5gdb的常用命令2.4.6xxgdb介绍2.5程序版本维护2.5.1RCS简介2.5.2程序版本结构2.5.3RCS使用2.6总结第3章 熟悉程序开发环境3.1程序开发流程3.2程序的编辑之一――使用vi3.2.1vi简介3.2.2快速掌握vi3.2.3vi的使用3.2.4进一步学习vi3.3程序的编辑之二――使用EMACs3.3.1Emacs简介3.3.2快速掌握Emacs3.3.3Emacs使用3.3.4Emacs的程序开发功能3.3.5使用Emacs编辑程序实例3.4程序的编译和调试3.4.1人工编译连接3.4.2使用make编译连接3.4.3在Emac8中编译程序3.4.4调试3.5获取帮助之一――联机帮助获取3.5.1联机帮助手册3.5.2系统帮助文档3.5.3Motif帮助获取3.6获取帮助之二――网络帮助获取3.6.1LDP文档3.6.2BBS(中文)3.6.3UsEMET新闻组3.6.4小结3.7总结第2部分 Motif程序开发技术第4章 X-Window与Motif入门4.1图形用户界面4.1.1图形用户界面的特征4.1.2图形用户界面的结构4.1.3Linux的图形用户界面4.2 X-WindoW系统4.2.1X-Window简介4.2.2X-WindoW发展历史4.2.3X系统的特征4.2.4X系统基本概念4.3Motif介绍4.3.1Motif简介4.3.2Motif的组成4.3.3窗口管理4.4Motif程序开发基础4.4.1Motif程序开发简介4.4.2Motif程序开发接口4.4.4Widgets组件构成4.4.5基本原则4.5UIL基础4.5.1UIL与MRM4.5.2UL的特征4.6 总结第5章 Motif程序开发基础5.1开始Motif程序开发5.1.1第一个实例5.1.2程序分析5.1.3Motif程序的结构5.2Motif的资源5.2.1Motif资源简介5.2.2Motif资源的控制方式5.2.3Motif资源文件5.2.4Motif资源的使用5.3Motif的组件5.3.1主窗口和菜单系统5.3.2对话框5.3.3标签和按钮5.3.4其他组件5.3.5小结5.4Motif的事件处理5.4.1事件类型与处理方式5.4.2回调函数5.4.3动作函数5.4.4小结5.5X系统的字体5.5.1复合字符串5.5.2字体5.5.3字体处理实例5.6 总结5.6.1Motif程序的结构5.6.2资源及管理5.6.3组件对象5.6.4事件5.6.5字体和复合字符串5.6.6实例第6章 UIL开发基础6.1UIL简介6.2UIL语言基础6.2.1字符集6.2.2名字6.2.3关键字6.2.4数据类型6.2.5表达式6.2.6取值函数6.3UIL模块6.3.1UIL模块内容6.3.2UIL模块结构6.3.3UIL模块书写规则6.4使用UIL的Motif程序实例6.4.1程序的功能6.4.2程序的组成6.4.3编译连接过程6.5使用UIL的C程序结构6.5.1初始化Mrm6.5.2建立组件对象6.6使用UIL进行资源管理6.6.1颜色与字体管理6.6.2像图管理6.7总结第3部分 OpenGL程序开发技术第7章OpenGL概述7.1OpenGL的发展历程7.2Open0L特点及功能7.2.1OpemGL基本功能7.2.2OpenGL1.2的部分特性7.3Mesa简介7.4OpenGL函数库7.4.1gl核心函数库7.4.2glu实用库7.4.3glaux辅助库7.4.4gltk工具库及与glaux库的比较7.4.5其他扩展函数库7.5OpenGL的语法规则及状态机制7.5.1语法规则7.5.2状态机制7.6OpenGL的相关信息7.6.1OpenGL技术评审委员会7.6.2Lin以下OpenGL的网址7.6.3使用或支持0penGL的一些相关产品7.7总结第8章 Mesa/OPenGL编程要点8.1一个简单Mesa程序示例8.1.1迷宫程序代码8.1.2程序分析8.1.3Linux及Windows系统下Mesa/OpenGL程序框架的比较8.2图形绘制的辅助技术8.2.1清除缓冲区8.2.2消隐8.2.3强制绘图完成8.2.4交换缓冲区8.3总结第9章 绘制几何实体9.1基本几何图元9.1.1绘制开始与结束命令9.1.2点9.1.3线9.1.4多边形9.1.5法向量9.2颜色9.2.1颜色模式9.2.2颜色过渡模式9.3变换9.3.1模型―取景变换9.3.2投影变换9.3.3视口变换9.3.4附加裁剪平面9.3.5矩阵堆栈9.3.6程序示例9.4总结第10章 显示列表10.1立即执行模式与显示列表10.1.1立即执行模式10.1.2显示列表方式10.2显示列表的创建与执行10.2.1创建显示列表10.2.2执行显示列表10.2.3显示列表嵌套10.3程序示例10.4总结第11章 光照、材质与纹理11.1光照处理11.1.1光照基本概念11.1.2光源属性11.1.3光照模式11.1.4程序示例11.2材质11.2.1材质属性11.2.2材质程序示例一11.2.3材质程序示例二11.3纹理映射11.3.1纹理基本概念11.3.2纹理的定义11.3.3纹理坐标11.3.4程序示例11.3.5纹理缠绕方式11.3.6本章程序综合示例11.4总结第12章 雾化、融合与反走样12.1雾化12.1.1雾化效果设置12.1.2程序示例12.2融合12.2.1融合效果设置12.2.2程序示例一12.2.3程序示例二12.3反走样12.3.1反走样效果设置12.3.2程序示例12.4总结第13章 位图与图像13.1位图13.1.1位图绘制函数13.1.2位图程序示例13.1.3字体程序示例13.2图像13.2.1像素的读写、拷贝、缩放操作13.2.2像素的存贮 传输 映射操作13.2.3程序示例13.3总结第14章 求值器与NURBs14.1求值器14.1.1求值器的计算原理14.1.2求值器函数14.1.3程序示例14.2NURBs14.2.1NURBs编程思路14.2.2NURBs函数14.2.3程序示例14.3总结第4部分 综合使用Motif与OpenGL第15章 Motif与OpenGL联合编程15.1Motif与Open0L联合编程15.2实例介绍15.2.1程序功能与运行结果15.2.2程序源代码15.2.3编译连接15.3实例程序剖析15.3.1组件对象层次结构15.3.2便利函数与回调函数15.3.3OpenGL处理15.4 总结附录A GPL声明附录B Xt和Motif组件类族附录C X系统设计7原则附录D 通用包含头文件参考文献
为本词条添加和相关影像
互动百科的词条(含所附图片)系由网友上传,如果涉嫌侵权,请与客服联系,我们将按照法律之相关规定及时进行处理。未经许可,禁止商业网站等复制、抓取本站内容;合理使用者,请注明来源于。
登录后使用互动百科的服务,将会得到个性化的提示和帮助,还有机会和专业认证智愿者沟通。
您也可以使用以下网站账号登录:
此词条还可添加&
编辑次数:1次
参与编辑人数:1位
最近更新时间: 14:24:36
贡献光荣榜

我要回帖

更多关于 linux打不出汉字 的文章

 

随机推荐