0

我有一个使用纹理 (POLYGON_FILL) 成功渲染的 3d 网格。我想做的也是以编程方式同时绘制不同颜色的线(POLYGON_LINE PolygonAttribute)以显示三角形的边缘。它看起来就像您在 3D 建模程序或某些此类应用程序中看到的一样 - 带有线轮廓的面部纹理说明了面部边缘。

这是通过 API 轻松完成的事情还是需要一些创造力?我想我可以改变纹理坐标,使纹理稍微低于多边形的边缘(但我认为如果面边缘上的间隙变化很大,它看起来会不一致),但是我正在使用 TexCoordGeneration 而我不是确定从哪里开始做类似的事情。

基本上,这将用于一种基本但高度定制的 3d 建模器应用程序,因此在用户操作 3d 几何图形方面有很多不太常见的操作。

4

1 回答 1

1

我更熟悉 OpenGL,所以不幸的是,这个答案只是一个理论课。我不认为这是 Java3D 的“内置”功能(如果是,任何人都可以随时纠正我)。您需要进行多次渲染传递才能完成它。从我刚刚对该主题所做的一点点搜索来看,Java3D 似乎对这种事情没有太多支持。您可能想考虑使用像 OpenGL 这样的较低级别的 API,特别是考虑到您说它是“高度定制的 3d 建模器应用程序”。您将更好地控制事物如何绘制到屏幕上。

话虽如此。这是一个高级答案的尝试。您想要显示所有线条,还是只显示未隐藏在其他多边形后面的线条?

仅渲染未隐藏的线

对于每一帧,您需要:

  1. 使用 渲染网格POLYGON_FILL
  2. 在不清除深度缓冲区的情况下,使用 再次渲染网格POLYGON_LINE

深度缓冲区根据多边形与查看器的距离确定是否应绘制像素。根据javadoc,Java3D 的默认深度测试是LESS_OR_EQUAL这样的,这应该导致在纹理顶部绘制线条。

渲染所有线条

这与上面相同,但您需要清除两个渲染通道之间的深度缓冲区。

于 2011-05-21T04:07:57.060 回答