小编mmu*_*phy的帖子

手动将RGBA像素与RGB像素进行Alpha混合

我正在尝试将RGBA图像(前景图像)的alpha混合操作转换为RGB图像(背景图像).但是,在这样做的时候,我想我可能正在做错误的alpha混合操作或做错了.例如,我的RGB图像的像素是(127,127,127)的浅灰色.像素的RGBA图像的像素将是(0,0,255).在进行混合操作后,最终颜色将为(127,0,255).但是,我认为这更像是一种添加剂混合物,与我正在进行的操作不同.

关于如何设置我的值,请看一下

incPixelColor[0] = 0; (red)
incPixelColor[1] = 0; (green)
incPixelColor[2] = 255; (blue)
incPixelColor[3] = 255; (alpha)

currentPixelColor[0] = 127; (red)
currentPixelColor[1] = 127; (green)
currentPixelColor[2] = 127; (blue)
Run Code Online (Sandbox Code Playgroud)

关于我的计算方法,请看一下

float incAlpha = (currentPixelColor[3]/255.0f);

float red = ((float)incPixelColor[0]/255.0f * incAlpha) + ((float)currentPixelColor[0]/255.0f);
float green = ((float)incPixelColor[1]/255.0f * incAlpha) + ((float)currentPixelColor[1]/255.0f);
float blue = ((float)incPixelColor[2]/255.0f * incAlpha) + ((float)currentPixelColor[2]/255.0f);


currentPixelColor[0] = min(red * 255, 255.0f);
currentPixelColor[1] = min(green * 255, 255.0f);
currentPixelColor[2] = min(blue * 255, 255.0f);
Run Code Online (Sandbox Code Playgroud)

对于没有alpha的像素,我希望该值为(0,0,255),然后对于具有alpha的图像,我希望它能够融入.在上面的操作结束时,它将是(127,127) ,255).我应该检查每个像素是否有alpha,如果有,那么进行混合还是有其他方法可以做到这一点?

algorithm image-manipulation alphablending image-processing alpha-transparency

21
推荐指数
1
解决办法
2万
查看次数

Lib和DLL链接到exe错误"无法读取0x300"

我有一个关于如何使用.dll/.libs的一般性问题.我正在创建一个.dll用于我的项目,但是,我注意到当我去编译时,我需要静态链接与.dll关联的.lib以便编译项目(否则会出现链接错误"致命错误LNK1107:文件无效或损坏:无法读取0x300").所以稍后当我重新启动我的项目,然后在将来更新它时,我是否需要发布一个新的.exe和一个新的.dll而不是一个新的.dll?如果是这样的话,为什么还要使用.dll呢?

c++ deployment dll visual-studio

12
推荐指数
1
解决办法
1万
查看次数

使用自定义分配器调用对象构造函数/析构函数

我一直在研究自定义分配器,我经常看到它们使用某种功能来分配内存.出于测试目的并进一步教育我自己,我试图做出一个"简单"的例子.但是,我对如何做有一个基本的了解.mallocvs中的一个主要区别new是,新的构造函数被调用.如果我想编写我自己的基本上替换的分配器new,如何在使用时调用构造函数malloc怎么办?

我理解在类上我可以重载newdelete类,所以我想问题的一个重要部分是,如何new在分配期间调用对象构造函数?同样,我对如何delete调用析构函数感兴趣.

我创建了一个示例测试代码,我希望SomeClass在分配期间调用构造函数,但我不知道如何.

#include <malloc.h>

void* SomeAllocationFunction(size_t size) {
    return malloc(size);
}

class SomeClass
{
public:
    SomeClass() {
        int con = 1000;
    }

    ~SomeClass() {
        int des = 80;
    }
};

int main(void){
    SomeClass* t = (SomeClass*)SomeAllocationFunction(sizeof(SomeClass));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

(作为一个注释,我知道我可以使用new.但是,出于学习的目的,我正在尝试创建一个不仅仅调用的自定义分配器newplacement new).

c++ memory memory-management new-operator

10
推荐指数
2
解决办法
9488
查看次数

确定使用外力时球体和平面之间的静止接触

这个问题有一个主要问题,还有一个小问题.我相信我在研究中的任何一个问题都是正确的,但不是两者都有.

对于我的物理循环,我做的第一件事就是对我TotalForce的刚体物体施加一个引力.然后我用我TotalForce和我检查碰撞Velocity.我TotalForce(0, 0, 0)在每次物理循环后重置,虽然我会保留我的velocity.

我熟悉在仅使用速度时在移动球体和静态平面之间进行碰撞检查.但是,如果我还有其他力量velocity,比如重力怎么办?我把其他力量放进去TotalForces(现在我只有引力).为了弥补这一点,当我确定球体当前没有与飞机重叠时,我这样做了

    Vector3 forces = (sphereTotalForces + sphereVelocity);
    Vector3 forcesDT = forces * fElapsedTime;
    float denom = Vec3Dot(&plane->GetNormal(), &forces);
Run Code Online (Sandbox Code Playgroud)

然而,这可能是我认为假设是静止接触的问题.我认为休息接触是通过计算的

denom * dist == 0.0f
Run Code Online (Sandbox Code Playgroud)

哪里dist

float dist = Vec3Dot(&plane->GetNormal(), &spherePosition) - plane->d;
Run Code Online (Sandbox Code Playgroud)

(作为参考,denom * dist > 0.0f球体远离飞机的明显意义)

但是,这永远不会成真.即使看起来有"休息接触".这是由于我forces上面的计算总是至少有-9.8(我的重力).y.当朝向法线为(denom0,1,0 )的平面移动时,将产生-9.8的ay .

我的问题是

1)我是否正确计算了我的前两个代码片段中提到的休息联系方式?

如果是这样,

2)我的"其他力量"如引力如何使用?我使用TotalForces不正确吗?

作为参考,我的时间步长是

  mAcceleration = mTotalForces / mMass; …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm physics game-physics

9
推荐指数
1
解决办法
2110
查看次数

fill_n和fill填充相同的函数,但参数重载不同?

我一直在寻找到<algorithm>fillfill_n功能,以及他们给我似乎做同样的事情,但只是有不同的定义.

这是真的,如果不是,它们有什么不同?

他们描述的措辞似乎是差不多的(我在从MSDN阅读fill_nfill).

如果它们相同,那么可以使用这两种功能有什么好处?

它只是给开发人员更多的选择,还是比另一个更快?

c++ msdn visual-c++ stl-algorithm

8
推荐指数
1
解决办法
3142
查看次数

如何防止无名的struct\union?

我正在构建一个具有矩阵数据联合的类,但是,当我没有struct\union的名称时,我只能编译它.但是,如果有更高级别的警告级别(视觉工作室有四个),我会发出警告说

warning C4201: nonstandard extension used : nameless struct/union
Run Code Online (Sandbox Code Playgroud)

我调查了一下,我似乎无法找到防止这种情况的方法.无论如何,我所知道的可能会导致与一个或另一个的声明相关的不同编译器错误.如何在不禁用警告的情况下阻止获取此警告并使其符合标准.

    union
    {
        struct
        {
            F32 _11, _12, _13, _14;
            F32 _21, _22, _23, _24;
            F32 _31, _32, _33, _34;
            F32 _41, _42, _43, _44;
        };
        F32 _m[16];
    };
Run Code Online (Sandbox Code Playgroud)

(是的,我知道有可用的matric库.请不要把它变成"使用xxx库"讨论,我这样做是为了扩展我对C++的了解".)

c++ standards struct unions

5
推荐指数
2
解决办法
6950
查看次数

如何在可能使用placement new时创建数组

我一直在努力创建一个自定义分配器作为一个有趣的练习/练习,我遇到了创建数组的两个潜在问题.对于典型的分配调用,我将使用mallocplacement new.但是,当我去创建一个数组时,我对它应该如何完成感到困惑.有一次,我注意到在某些地方,这里的placement new数组似乎可能不安全.在尝试使用数组时,我也遇到了自己的错误.我会得到错误的placement new

`错误C2679:binary'=':找不到运算符,它采用'SomeClass*'类型的右手操作数(或者没有可接受的转换)

我理解错误(我相信)但我宁愿通过我的数组构造方法解决错误.我有两个问题

1)分配器如何在不使用的情况下创建数组new[]?是placement new吗?如果是这样,我上面发布的链接中提到的潜在危险怎么样?

2)如果我想使用placement new并在数组中的每个元素上调用它,为什么我会得到上面提到的错误?

#include <stdio.h>
#include <new>

class SomeClass{
public:
    SomeClass() {
        printf("Constructed\n");
    }

    ~SomeClass() {
        printf("Destructed\n");
    }
};

void* SomeAllocationFunction(size_t size) {
    return malloc(size);
}

template<typename Type>
Type* SomeArrayAllocationFunction(size_t count){
    Type* mem = (Type*)SomeAllocationFunction(sizeof(Type) * count);

    for(unsigned int i = 0; i < count; ++i)
    {
        mem[i] = new(mem + i) Type();
    }

    return mem; 
}

int main(void){ …
Run Code Online (Sandbox Code Playgroud)

c++ memory memory-management placement-new new-operator

5
推荐指数
1
解决办法
585
查看次数

PropertyGrid 中的按钮

有没有办法将属性设置为按钮或向属性添加按钮?通过查看网格示例,我注意到您可以执行以下操作

wxPGEditor* editorButton = wxPropertyGrid::RegisterEditorClass(someButton);
propertyGrid->SetPropertyEditor(wxT("Name"), editorButton );
Run Code Online (Sandbox Code Playgroud)

但是,我想要有不同的按钮,而不仅仅是一种类型,这将支持。

编辑:通过不同的按钮,我的意思是不必依赖于使用编辑器的按钮。我想做的是设置一个 onClick 回调函数,就像通常为 wxButton 所做的那样,但将其设置为属性。

EDIT2:要明确的是,我希望属性字段本身只是一个按钮。

c++ user-interface wxwidgets

5
推荐指数
1
解决办法
2468
查看次数

模板化字符串类使用strcmp,strcpy和strlen

我前段时间无意中听到有关如何创建模板化字符串类的讨论,不应该使用strcmp,strcpy和strlen作为可以使用UTF8和UTF16的模板化字符串类.我记得,你应该使用来自algorithm.h的函数,但是,我不记得实现是怎么回事,或者为什么会这样.有人可以解释一下使用哪些功能,如何使用它们以及为什么?

模板化字符串类的示例将是诸如此类的

String<UTF8> utf8String;
String<UTF16> utf16String; 
Run Code Online (Sandbox Code Playgroud)

这是UTF8将是unsigned char的地方,而UTF16是unsigned short.

c++ string implementation utf-8 utf-16

3
推荐指数
1
解决办法
1437
查看次数

子弹弹跳球

我对Bullet有两个问题,但它们是相关的.

在HelloWorldApp中,目标是让一个球在一个盒子上弹跳吧?如果我想测试一架飞机,我可以加btCollisionObject一个btStaticPlaneShape而不是一个盒子吗?

如何为每个对象设置自定义恢复,静态和动态摩擦?

physics game-physics bulletphysics

2
推荐指数
1
解决办法
6317
查看次数