我有一个使用纹理成功渲染的3d网格(POLYGON_FILL)。我想要做的还是以编程方式同时绘制不同颜色的线条(POLYGON_LINE PolygonAttribute),以显示三角形的边缘。它看起来就像你可能在3D建模程序或某些类似的应用程序中看到的那样 - 面部纹理的线条轮廓说明了面部边缘。
这是通过API轻松完成的,还是需要一些创造力?我想我可以改变纹理坐标,使纹理略微偏离多边形的边缘(但我认为如果面边缘上的间隙变化很大,它看起来不一致),但是我使用的是TexCoordGeneration而我不是确定从哪里开始做这样的事情。
基本上这将是一种基本但高度定制的3D建模应用程序,因此有很多关于用户操纵3d几何体的不太常见的操作。
答案 0 :(得分:1)
我对OpenGL更熟悉,所以不幸的是,这个答案只是一个理论课。我不认为这是Java3D的“内置”功能(如果有的话,任何人都可以随意纠正我)。您需要执行多个渲染过程才能完成它。从我刚刚完成的关于该主题的一点点搜索来看,Java3D看起来并不像那种东西那么多。您可能希望使用像OpenGL这样的低级API,特别是考虑到您说它是一个“高度自定义的3D建模应用程序”。您可以更好地控制如何将内容绘制到屏幕上。
话虽如此。这是一个高级答案的尝试。您想要显示所有线条,还是仅显示未隐藏在其他多边形背后的线条?
对于每个帧,您需要:
POLYGON_FILL
渲染网格。POLYGON_LINE
再次渲染网格。深度缓冲区根据多边形与查看器的距离确定是否应绘制像素。根据{{3}},Java3D的默认深度测试是LESS_OR_EQUAL
,因此这会导致在纹理顶部绘制线条。
这与上面相同,但您需要在两个渲染过程之间清除深度缓冲区。