多边形顶点作为UV坐标

Lee*_*ogg 6 java 3d graphics swing

我正在使用Graphics类在Java中使用3D渲染器,它现在能够绘制任何带有彩色面的形状,但是我想知道是否可以对面进行纹理化?我见过很多人在Javascript中创建软件渲染器,所以肯定有一个等效的函数/方法但是他们用Java做的...
我到目前为止看了一下但是我能找到的只是Graphics.setClip(Shape) ,我不认为这是合适的,因为它只是设置背景纹理,如果顶点移动也不会拉伸纹理 - 而且只是在2D中,它需要在纹理成一定角度时拉伸/倾斜纹理相机(想想旋转立方体的两侧).

我真的不知道从哪里开始,我不能使用XOR模式,因为没有倾斜,如果我不得不手动操作,我真的不知道如何进行数学运算.
这些Javascript软件渲染器如何做得这么好?

tra*_*god 7

您可以利用此处此处java.awt.TexturePaint说明的内容.在这种情况下,您应该知道与渲染表面的栅格对齐,而不是与形状的边界对齐.TexturePaint

图片

附录:虽然阴影是一个广泛的话题,也可以考虑使用具有梯度着色的基于像素的方法的α,在图示的KineticModel引用在这里.注意,这样的梯度可以应用于WritableRastera TexturePaint.

对于非仿射变换,请参见此处javax.media.jai.Warp.Warp引用.


Gen*_*ene 5

我把这看作是一个OpenGL功能的"后备",由于JOGL问题而无法在某些机器上运行.我没有成功.这些是导致我停止工作的未解决问题:

  • 隐藏表面去除.我找不到在Graphics2d原语下实现z-buffer的方法.

  • 透视纹理变换.如果图像投影是平行的,而不是透视,则Graphics2d中可用的AffineTransform具有足够的力量来映射纹理.

  • 2d剪辑中的不匹配.纹理化的最后一个操作必须是对2d掩码进行裁剪.事实证明,Graphics2d剪辑中存在一个错误.如果您剪切完全相邻的2d多边形,则剪裁的补丁不能完美匹配.边界处的单个像素没有阴影.

  • 性能.虽然最近版本的Graphics2d管道尝试使用硬件加速,但是原始多边形渲染仍然比JOGL慢了一个数量级,这对我的目的来说还不够好.

我看过的Javascript 3d库都是基于WebGL构建的,而WebGL又是在HTML 5 Canvas对象中实现的.WebGL是一个必须由浏览器实现的OpenGL API.其他3d Javascript库使用插件来获取硬件加速图形.因此,它们不是有关如何在Swing中执行3d的有用信息来源.

加成

也许值得添加我所做的事情.为了替换用户可以通过移动相机"飞过"的3D JOGL场景,我选择了单个固定视点和"硬连线"绘图顺序,有效地实现具有固定逻辑的Painter算法来确定排序顺序,渲染更多 - 或者与JOGL视图相同的模型.我使用渐变填充多边形实现了Gouraud着色,这是我发现上面提到的剪辑错误的地方.它一切正常,并且运行了数十万份,但是它既凌乱又脆弱,我不想再这样做了.

  • @LeeAllan对不起我应该补充说你是对的:我没有直接回答你的问题.我的意图是让你避免99%的确定性会浪费时间:我花了相同的3-4个小时来完成上述结论.我还在上面添加了关于Javascript 3d渲染的注释. (2认同)