在花了一些时间之后,将 QImage 转移到 ITexture 工作正常,但我无法让透明度在 ITexture 上工作。
如果有人能理解我的问题在哪里,这里有两个函数。
字体绘制正确,但完全没有透明度。
提前致谢...
void MainWindow::on_singerShow_clicked(bool checked)
{
int currentItem = ui->singerList->currentRow();
if ( currentItem >= 0 && iWind )
{
if ( checked )
{
QString text = ui->singerList->item(currentItem)->text();
QImage temp(singerIWidth,singerIHeight,QImage::Format_ARGB32);
temp.fill( 0 );
QPainter paint;
paint.begin(&temp);
QFont font(ui->singerFont->font());
font.setPointSize( ui->singerSize->value() );
font.setBold( ui->singerBold->isChecked() );
QString fStr = ui->singerFrontColour->currentText();
QString sStr = ui->singerShadowColour->currentText();
paint.setFont( font );
paint.setPen( sStr );
paint.drawText(QRect(6,6,singerIWidth,singerIHeight),
Qt::AlignCenter, text);
paint.setPen( fStr );
paint.drawText(QRect(0,0,singerIWidth,singerIHeight),
Qt::AlignCenter, text);
paint.end();
iWind->setSinger(checked, &temp);
}
else
{
iWind->setSinger(checked, 0);
}
}
}
和
void IrrlichtWindow::setSinger(bool checked, QImage *img)
{
// a straight forward memcpy because both QImage and ITexture
// are exactly the same size and format
if ( checked )
{
void *src = (void*)img->bits();
void *dst = singerTexture->lock();
memcpy( dst, src, singerIWidth * singerIHeight * 4 );
singerTexture->unlock();
singer->setMaterialTexture(0, singerTexture);
singer->setVisible(true);
singer->setMaterialFlag(video::EMF_BLEND_OPERATION,
video::EMT_TRANSPARENT_ALPHA_CHANNEL_REF);
}
else
{
singer->setVisible(false);
}
}