【问题标题】:How do I draw a wireframe that shows behind an alpha texture in OpenGL?如何在 OpenGL 中绘制显示在 Alpha 纹理后面的线框?
【发布时间】:2012-06-11 19:55:36
【问题描述】:

我有一个带有 Alpha 通道的纹理立方体,并希望在立方体周围绘制一个线框框。我遇到的问题是线框没有通过纹理立方体的透明部分显示。如何在后面显示线框?

这是我用来绘制两个立方体的代码:

glLoadIdentity();

glTranslatef(0.0f, 0.0f, z);

glRotatef(xRotation, 1.0f, 0.0f, 0.0f);
glRotatef(yRotation, 0.0f, 1.0f, 0.0f);
glRotatef(zRotation, 0.0f, 0.0f, 1.0f);

// Draw Textured    
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);

glEnable(GL_TEXTURE_2D);
glEnable(GL_LIGHTING);

glColor4f(1.0f, 1.0f, 1.0f, 1.0f);

glBindTexture(GL_TEXTURE_2D, _images[_filter]);

glBegin(GL_QUADS);
    DrawTexturedCube();
glEnd();

// Draw Wireframe
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);

glDisable(GL_TEXTURE_2D);
glDisable(GL_LIGHTING);

glColor3f(1.0f, 0.0f, 0.0f);

glBegin(GL_QUADS);
    DrawWireframeCube();
glEnd();

xRotation += xSpeed;
yRotation += ySpeed;
zRotation += zSpeed;

我的 Init 中的混合函数正在使用:

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

我在绘制纹理之前尝试了 glColor4f 的不同 alpha 值,但没有任何区别。

【问题讨论】:

  • 您希望线框始终在立方体顶部可见,还是希望通过 Alpha 纹理中的“孔”显示线框?
  • 我希望线框仅通过“孔”显示,如果不清楚,请见谅。

标签: c++ opengl textures alpha wireframe


【解决方案1】:

您是否启用了深度测试?我的第一个猜测是,由于您已经绘制了带纹理的立方体(并且可能已写入深度缓冲区),因此随后在同一 Z 处立即绘制线框立方体的尝试未通过深度测试并且不会被渲染。

尝试禁用它,或更改渲染立方体和线框的顺序。

【讨论】:

  • 我不相信 OP 想要在整个立方体的顶部绘制线框 - 但希望它通过 alpha 纹理中的“孔”显示。如果我错了,请纠正我。
猜你喜欢
  • 1970-01-01
  • 2010-10-13
  • 1970-01-01
  • 2013-09-10
  • 1970-01-01
  • 2021-04-08
  • 1970-01-01
  • 2011-03-27
  • 1970-01-01
相关资源
最近更新 更多