【问题标题】:OpenGL JOGL texture outlineOpenGL JOGL 纹理轮廓
【发布时间】:2012-06-01 02:46:29
【问题描述】:

我在 OpenGL (JOGL) 中绘制了一些点,如下所示:

BufferedImage image = loadMyTextureImage();
Texture tex = TextureIO.newTexture(image, false);
tex.setTexParameteri(GL.GL_TEXTURE_MIN_FILTER, GL.GL_LINEAR);
tex.setTexParameteri(GL.GL_TEXTURE_MAG_FILTER, GL.GL_LINEAR);
tex.bind();

gl.glColor4f(r,g,b,a);        
gl.glBegin(GL_POINTS);
for ( int i = 0; i < numPoints; i++ ) {
   // compute x,y,z
   gl.glVertex3f(x,y,z);
}
gl.glEnd();

我的image 是一个白色图像,所以我可以重复使用相同的纹理并使用gl.glColor4f 对其进行着色,但我想在它周围绘制一个不同颜色的轮廓。有没有办法做到这一点?

【问题讨论】:

  • 如果它只是纯白色,你根本不需要纹理:-) 你还想要什么样的轮廓?任意颜色的细线?边缘“发光”?渐变填充到边缘?这很大程度上取决于你想要达到什么样的艺术效果......
  • 我正在使用纹理来改变点的形状。这似乎要快得多,因为我仍然可以使用 GL_POINTS 而不是创建具有该形状的多边形。对于轮廓,我只是想得到一条任意颜色的细线。

标签: java opengl textures jogl


【解决方案1】:

如果您使用纹理来确定点的形状,那么绘制轮廓的明显方法是添加第二个纹理以在顶部绘制点的轮廓。

轮廓纹理也是白色的,所以你可以用同样的方法把它涂成你喜欢的任何颜色。

根据您使用的 alpha 混合模式,这也可用于提供“发光”边缘效果。

【讨论】:

  • 我想过这样做,但我认为这需要我先绘制所有轮廓,然后再绘制所有填充(反之亦然),因为我认为我无法切换我在 GL_POINTS 时的纹理。这将导致所有填充位于所有轮廓之上。
  • 您可以一次绑定两个纹理(尽管您可能需要 GLSL 才能获得某些混合效果)。无论如何,这可能是出于性能原因的最佳方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多