游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4380|回复: 11

关于透明色问题

[复制链接]

20

主题

65

帖子

65

积分

注册会员

Rank: 2

积分
65
发表于 2007-2-7 11:55:00 | 显示全部楼层 |阅读模式
Dim key As DDCOLORKEY
    key.high = 0
    key.low = 1
    msurfMan.SetColorKey DDCKEY_SRCBLT, key
我的代码设置了透明色,用的是上面的代码,但是我贴图以后
  msurfBack.BltFast 320, 240, msurfMan, rectTile, DDBLTFAST_SRCCOLORKEY
黑色的部分还是贴上去了,不知道为什么。那位大侠帮我看看。:)

sf_200727115441.rar

52.24 KB, 下载次数:

26

主题

537

帖子

537

积分

高级会员

Rank: 4

积分
537
发表于 2007-2-7 16:57:00 | 显示全部楼层

Re:关于透明色问题

不了解DirectDraw7的用法,在9.0的DirectDraw中是这样

Key.ColorSpaceHighValue = 0
Key.ColorSpaceLowValue = 1
msurfMan.SetColorKey(ColorKeyFlags.SourceDraw, Key)
msurfBack.DrawFast(320, 240, msurfMan, Rect, DrawFastFlags.Wait Or DrawFastFlags.SourceColorKey)

你可以参考一下。
如果BltFast的最后一个参数设置没什么问题的话,那就是透明色值的问题,你可以先将其high和low都设为0试试看

20

主题

65

帖子

65

积分

注册会员

Rank: 2

积分
65
 楼主| 发表于 2007-2-7 18:40:00 | 显示全部楼层

Re:关于透明色问题

多谢,我的问题是有的时候就好有时候不行,
所以我想可能是颜色问题,
不知道有没有方法可以的到我图片中像素的颜色值呢?

26

主题

537

帖子

537

积分

高级会员

Rank: 4

积分
537
发表于 2007-2-8 09:00:00 | 显示全部楼层

Re:关于透明色问题

得到图片中像素的颜色值可以将图像存在bitmap中,找相应行列的字节值。
不过我觉得还是应该先解决DirectDraw透明色数值的设置问题。其实我也刚遇到同样的问题,发现透明色只能设为黑(0)或白(FFFFFF),其它值不起作用。你可以在程序正常的时候试试看是不是这样。

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
发表于 2007-3-5 18:29:00 | 显示全部楼层

Re:关于透明色问题

dx中的色彩和gdi不同
先贴个VB的:
Private Declare Function SetPixel Lib "GDI32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal val As Long) As Long
Public Function ConvertColor(GDIColor As Long) As Long
    Dim pdds As DirectDrawSurface7
    Dim ddsd As DDSURFACEDESC2
    Dim hdc&
    ddsd.lFlags = DDSD_CAPS Or DDSD_WIDTH Or DDSD_HEIGHT
    ddsd.ddsCaps.lCaps = DDSCAPS_VIDEOMEMORY Or DDSCAPS_OFFSCREENPLAIN
    ddsd.lWidth = 10
    ddsd.lHeight = 10
    Set pdds = dd.CreateSurface(ddsd) '//dd是direct draw
    hdc = pdds.GetDC
    SetPixel hdc, 0, 0, GDIColor
    pdds.ReleaseDC hdc
    pdds.GetSurfaceDesc ddsd
    pdds.Lock vbRectEx(0, 0, 10, 10), ddsd, DDLOCK_WAIT, 0
    ConvertColor = pdds.GetLockedPixel(0, 0)
    pdds.Unlock vbRectEx(0, 0, 10, 10)
End Function

一般来说,同一显示模式下,各种surface的color格式是一样的(试验过N次不同的caps~~)。
但是,有关资料表明,我们不能这么肯定。(就是说两个不同surface上的color格式可能不同!)
那么,保险一点,你需要再为ConvertColor传入一个surface。555~

//C++的:
DWORD ConvertColorEx(LPDIRECTDRAWSURFACE7 pdds,DWORD GDIColor)
{
DDSURFACEDESC2 ddsd;
DWORD oldColor;
HDC hdc;
DWORD ret;
pdds->GetDC(&hdc);
oldColor=GetPixel(hdc,0,0);
SetPixel(hdc,0,0,GDIColor);
pdds->ReleaseDC(hdc);
ddsd.dwSize=sizeof(ddsd);
pdds->Lock(0,&ddsd,DDLOCK_WAIT,0);
ret=(DWORD*)ddsd.lpSurface[0];
if(ddsd.ddpfPixelFormat.dwRGBBitCount<32)
   ret&=(1<<ddsd.ddpfPixelFormat.dwRGBBitCount)-1;
pdds->Unlock(0);
pdds->GetDC(&hdc);
SetPixel(hdc,0,0,oldColor);
pdds->ReleaseDC(hdc);
return ret;
}

'//VB的:
Public Function ConvertColorEx(pdds As DirectDrawSurface7, GDIColor As Long) As Long
    Dim ddsd As DDSURFACEDESC2
    Dim hdc As Long
    Dim oldColor As Long
    Dim rc As RECT
    hdc = pdds.GetDC
    oldColor = GetPixel(hdc, 0, 0)
    SetPixel hdc, 0, 0, GDIColor
    pdds.ReleaseDC hdc
    pdds.Lock rc, ddsd, DDLOCK_WAIT, 0
    ConvertColorEx = pdds.GetLockedPixel(0, 0)
    pdds.Unlock rc
    hdc = pdds.GetDC
    SetPixel hdc, 0, 0, oldColor
    pdds.ReleaseDC hdc
End Function
以上代码调试通过.

17

主题

153

帖子

153

积分

注册会员

Rank: 2

积分
153
发表于 2007-3-5 18:47:00 | 显示全部楼层

Re:关于透明色问题

你不妨试下Run2DEngine,开源

偶认为DX7以没什么研究价值了,至少对VB6来说。

http://hi.baidu.com/run2d

270

主题

6442

帖子

6446

积分

论坛元老

Rank: 8Rank: 8

积分
6446
发表于 2007-3-5 22:38:00 | 显示全部楼层

Re: Re:关于透明色问题

Matrix3D-天魂: Re:关于透明色问题

你不妨试下Run2DEngine,开源

偶认为DX7以没什么研究价值了,至少对VB6来说。

http://hi.baidu.com/run2d


问你个问题,TV3D 6.2里如何给一个显示出来的MDL模型动态生成一个影子, 我不需要影子随光线变换, 只要显示影子就行,只是问问,太复杂就不用了,或用个黑点代替,TV3D有个例子,好象是针对MESH的,我的场景不在MESH。

187

主题

6490

帖子

6491

积分

论坛元老

团长

Rank: 8Rank: 8

积分
6491
发表于 2007-3-9 18:54:00 | 显示全部楼层

Re:关于透明色问题

根据周围的光线和模型的形状,位置计算出一个大概的影子,用多边形,圆什么的代替,边缘柔化。

270

主题

6442

帖子

6446

积分

论坛元老

Rank: 8Rank: 8

积分
6446
发表于 2007-3-9 19:17:00 | 显示全部楼层

Re:关于透明色问题

不用光线,我的影子不随光线变化,算了,过几天再研究,如没有影子就没有吧!

9

主题

688

帖子

688

积分

高级会员

Rank: 4

积分
688
发表于 2007-3-10 00:20:00 | 显示全部楼层

Re:关于透明色问题

影子可以增强空间感和真实感,在3D游戏中很重要的
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-26 16:58

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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