文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>linux控制台下的svgalib绘图

linux控制台下的svgalib绘图

时间:2006-08-03  来源:winxbin

很久以前玩过的东东,  现在这个东西很少拿用来作应用了,不过对学习图形学的同学可能有点用,  因为这个东东很容易上手.  网上找了找,  这个方面的文档很少, E文跟我一样不太好的同志可以看看,省点力气
      现在稍微新点的linux安装版本一般都不装这个了,所以可能要手动安装svgalib了,不过这个很容易
      首先可以去www.svgalib.org把原代码宕下来.
      tar -zxvf svgalib-1.4.3.tar.gz
      cd svgalib-1.4.3
      make
      make install
      如果有需要可能还要执行西面这两行
      echo "/usr/local/lib">;>;/etc/ld.so.conf
      ldconfig     
好了,下面就可以用svgalib了
      先来个小的
[code]
#include <stdio.h>;
#include <vga.h>;
int main()
{
        int i;
        vga_init();//vga初始化
        vga_setmode(G800x600x256);//设置屏幕的显示模式
        vga_setcolor(5);//选用5号颜色
        vga_drawline(50,50,350,350);//用5号颜色画一条线段
        vga_getch(); //得到任意键
        vga_setmode(TEXT);//回到控制台字符模式
return 0;
}
[/code]
非常简单的一个
编译的时候用 g++ foo.c -o foo -lvga

下面来个稍微复杂点的
[code]
#include <stdio.h>;
#include <stdlib.h>;
#include <unistd.h>;
#include <vga.h>;
#include <math.h>;
int main()
{
        int i;
        bool flag;
        int pointx;
        int pointy;
        unsigned char *colors;
        vga_init();
        //svgalib初始化
        vga_setmode(G800x600x256);
        //设置屏幕的显示模式,800X600的分辨虑,256色
        vga_setcolor(5);
        //选用5号颜色
        vga_drawline(200,300,600,100);
         //用5号颜色画一条线段
        vga_drawpixel(400,100);
         //在坐标400,200以5号颜色画上一点
        for(i=0;i<255;i++)
        {
                vga_setcolor(i);
                vga_drawpixel(i,100);
        }
        vga_getch(); //按任意键继续
        vga_screenoff();//关闭屏幕,你将什么都看不到
        colors=(unsigned char *)malloc(800);
        for(i=0;i<800;i++)
                colors[i]=vga_getpixel(i,100);
                //得到屏幕上纵坐标为100的线的所有点的颜色
        vga_drawscanline(15,colors);
       //画一条水平扫描线,不过由于已关闭屏幕,你将什么都看不到
        vga_getch();//按任意键继续
        vga_screenon();//打开屏幕,你将发现屏幕上多了个水平扫描线
        vga_setpalette(5,20,10,15);
        //改调色板,胡乱定义5号颜色为R200,G100,B150
        vga_setcolor(5);
        vga_drawline(200,300,700,500);
       //你将看到以前的那条线的颜色也改变了,因为调色板是全局的
        vga_drawscansegment(colors,100,300,50);
        //画我们所得到的水平扫描线的一部分,从100,300开始50个点
        //稍微来点小花样
       for(i=0;i<100;i++)
        {
                vga_drawscansegment(colors,100+i,10+i,50);
                vga_drawscansegment(colors,200-i,10+i,50);
        }
        for(i=0;i<100;i++)
        {
                vga_drawscansegment(colors,600+i/2,10+i,50);
                vga_drawscansegment(colors,700-i/2,10+i,50);
        }
        //下面画个正弦曲线
        vga_setcolor(1);
        vga_drawline(10,300,700,300);
        vga_drawline(680,280,700,300);
        vga_drawline(680,320,700,300);
        vga_drawline(400,50,400,550);
        vga_drawline(380,70,400,50);
        vga_drawline(420,70,400,50);
        pointx=100;
        pointy=300;
        vga_setcolor(4);
        for(i=1;i<540;i++)
        {                                           vga_drawline(pointx,pointy,100+i,300+100*sin(i*M_PI/180));
                pointx=100+i;
                pointy=300+100*sin(i*M_PI/180);
        }
        //下面操作调色板玩玩看看
        i=0;
        flag=true;
        while(!vga_getkey())//当没有键盘输入的时候循环
        {
                vga_waitretrace();
                //等到射线扫描返回,此函数对防止屏幕闪烁很有用
                vga_waitretrace();
                //呵呵,另外一个作用就是还可以用来延时,大约1/40到1/80秒之间
                vga_setpalette(4,i,i,i);
                vga_setpalette(5,i,i/2,63);
                if(flag)i++;
                else i--;
                if(i==63)flag=false;
                if(i==1)flag=true;
        }
        vga_setmode(TEXT);//回到控制台字符模式
        free(colors);
return 0;
}
[/code]
一般很多程序实际上不用svgalib的绘图部分,他们一般只是获得一个图形的入口而已.
实际应用svgalib图形库绘图的时候,其中vga_打头的函数用的不是很多,gl_打头的才是重点,  因为他能很容易实现双缓冲,卷屏的操作.呵呵,先到这里,有人感兴趣我就接着贴
相关阅读 更多 +
排行榜 更多 +
疯狂超市旅行

疯狂超市旅行

模拟经营 下载
马桶人大战开放世界游戏下载

马桶人大战开放世界游戏下载

角色扮演 下载
最后一班列车巴奎达诺手游下载

最后一班列车巴奎达诺手游下载

休闲益智 下载