Lee*_*ogg 6 java 3d graphics swing
我正在使用Graphics类在Java中使用3D渲染器,它现在能够绘制任何带有彩色面的形状,但是我想知道是否可以对面进行纹理化?我见过很多人在Javascript中创建软件渲染器,所以肯定有一个等效的函数/方法但是他们用Java做的...
我到目前为止看了一下但是我能找到的只是Graphics.setClip(Shape) ,我不认为这是合适的,因为它只是设置背景纹理,如果顶点移动也不会拉伸纹理 - 而且只是在2D中,它需要在纹理成一定角度时拉伸/倾斜纹理相机(想想旋转立方体的两侧).
我真的不知道从哪里开始,我不能使用XOR模式,因为没有倾斜,如果我不得不手动操作,我真的不知道如何进行数学运算.
这些Javascript软件渲染器如何做得这么好?
我把这看作是一个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着色,这是我发现上面提到的剪辑错误的地方.它一切正常,并且运行了数十万份,但是它既凌乱又脆弱,我不想再这样做了.