游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2144|回复: 3

请教DirectDraw图形程序的窗口比例问题!

[复制链接]

19

主题

52

帖子

52

积分

注册会员

Rank: 2

积分
52
发表于 2009-6-14 21:22:00 | 显示全部楼层 |阅读模式
我的显示器是宽屏的
程序窗口大小设为800×600格式

我自己写了画线和画圆的算法
用锁定DDRAW内存表面的方式直接作图
可是画上圆时,会明显的变扁了,不知道原因是
宽屏显示器的比例不协调 还是 程序窗口不协调

这种情况怎么样矫正才能画出正常的圆?

1

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2009-6-16 17:27:00 | 显示全部楼层

Re:请教DirectDraw图形程序的窗口比例问题!

我觉得不是显示器的问题,应该是算法本身的问题。
图形变形可能是步长(lpitch)的问题,LZ可以调试一下看步长对不对,也可以把代码贴出来让大家看看

19

主题

52

帖子

52

积分

注册会员

Rank: 2

积分
52
 楼主| 发表于 2009-6-18 15:56:00 | 显示全部楼层

Re:请教DirectDraw图形程序的窗口比例问题!

算法应该是没问题的
我是照着书上写下来的
在非宽屏电脑运行是正常的

代码在这里
/****************************************画图函数********************************************/

void Graphic:ine(NUMTYPE x1,NUMTYPE y1,NUMTYPE x2,NUMTYPE y2,DWORD color)
{
        NUMTYPE dx,dy,x_inc,y_inc,error,index,x=x1,y=y1;
        dx=x2-x1;
        dy=y2-y1;

        if(dx>=0)        x_inc=1;
        else
        {
                x_inc=-1;
                dx=-dx;
        }
        if(dy>=0)        y_inc=1;
        else
        {
                y_inc=-1;
                dy=-dy;
        }
        if(dx>=dy)
        {
                error=2*dy-dx;
                for(index=0;index<=dx;index++)
                {
                        video_buffer[(int)x+(int)y*lpitch] = color;  
                        x+=x_inc;
                        if(error>=0)
                        {
                                y+=y_inc;
                                error+=2*dy-2*dx;
                        }
                        else        error=error+2*dy;
                }
        }       
        else
        {
                error=2*dx-dy;
                for(index=0;index<=dy;index++)
                {
                        video_buffer[(int)x+(int)y*lpitch] = color;  
                        y+=y_inc;
                        if(error>=0)
                        {
                                error+=2*dx-2*dy;
                                x+=x_inc;
                        }
                        else        error+=2*dx;
                }
        }
} // Line


void Graphic::Circle(NUMTYPE xc,NUMTYPE yc,NUMTYPE r,DWORD color)
{
        NUMTYPE x=0,y=r;
        NUMTYPE e=2*(1-r);
        NUMTYPE d;

        while(y>=0)
        {
                video_buffer[(int)(x+xc)+(int)(y+yc)*lpitch] = color;
                video_buffer[(int)(-x+xc)+(int)(y+yc)*lpitch] = color;
                video_buffer[(int)(x+xc)+(int)(-y+yc)*lpitch] = color;
                video_buffer[(int)(-x+xc)+(int)(-y+yc)*lpitch] = color;

                if(e<0)
                {
                        d=2*e+2*y-1;
                        if(d<=0)
                        {
                                x=x+1;        e=e+2*x+1;
                        }
                        else
                        {
                                x=x+1;        y=y-1;        e=e+2*x-2*y+2;
                        }
                }
                else if(e>0)
                {
                        d=2*e-2*x-1;
                        if(d<=0)
                        {
                                x=x+1;        y=y-1;        e=e+2*x-2*y+2;
                        }
                        else
                        {
                                y=y-1;        e=e-2*y+1;
                        }
                }
                else if(e==0)
                {
                        x=x+1;        y=y-1;        e=e+2*x-2*y+2;
                }
        }
}

1

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2009-6-19 10:16:00 | 显示全部楼层

Re:请教DirectDraw图形程序的窗口比例问题!

你应该是用的窗口模式吧,窗口模式下像素格式是用的系统当前的像素格式,换一台机器像素格式可能就不同了,所以应该根据不同的像素格式调整步长(lpitch是以字节为单位的):
8位模式步长应该是lpitch
16位模式步长应该是lpitch>>1
32位模式步长应该是lpitch>>2
可是在你的代码中并没有类似的操作,因此可能会导致画出的图形出现变形
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-19 23:23

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表