用Java3D同时显示多边形线和纹理

时间:2011-05-21 03:00:54

标签: java 3d java-3d

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

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

基本上这将是一种基本但高度定制的3D建模应用程序,因此有很多关于用户操纵3d几何体的不太常见的操作。

1 个答案:

答案 0 :(得分:1)

我对OpenGL更熟悉,所以不幸的是,这个答案只是一个理论课。我不认为这是Java3D的“内置”功能(如果有的话,任何人都可以随意纠正我)。您需要执行多个渲染过程才能完成它。从我刚刚完成的关于该主题的一点点搜索来看,Java3D看起来并不像那种东西那么多。您可能希望使用像OpenGL这样的低级API,特别是考虑到您说它是一个“高度自定义的3D建模应用程序”。您可以更好地控制如何将内容绘制到屏幕上。

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

仅渲染取消隐藏线

对于每个帧,您需要:

  1. 使用POLYGON_FILL渲染网格。
  2. 如果没有清除深度缓冲区,请使用POLYGON_LINE再次渲染网格。
  3. 深度缓冲区根据多边形与查看器的距离确定是否应绘制像素。根据{{​​3}},Java3D的默认深度测试是LESS_OR_EQUAL,因此这会导致在纹理顶部绘制线条。

    渲染所有行

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