Java 使用OpenGL4在WorldWind中保存DrawingState
我目前正在尝试在WorldWind地图上显示点云。WorldWind网站上的所有示例都是使用OpenGL2完成的。但是我试着用OpenGL4代替它,因为我以前用过一点 现在,我在管理图形状态时遇到了一个问题: “我们从WorldWind违约中改变的任何状态都必须恢复 渲染立方体后,否则将导致其他对象渲染 错误地” 。在OpenGL2中,它相当简单。在绘制任何内容之前,调用Java 使用OpenGL4在WorldWind中保存DrawingState,java,opengl,jogl,opengl-4,worldwind,Java,Opengl,Jogl,Opengl 4,Worldwind,我目前正在尝试在WorldWind地图上显示点云。WorldWind网站上的所有示例都是使用OpenGL2完成的。但是我试着用OpenGL4代替它,因为我以前用过一点 现在,我在管理图形状态时遇到了一个问题: “我们从WorldWind违约中改变的任何状态都必须恢复 渲染立方体后,否则将导致其他对象渲染 错误地” 。在OpenGL2中,它相当简单。在绘制任何内容之前,调用beginDrawing() protected void beginDrawing(DrawContext dc){ GL
beginDrawing()
protected void beginDrawing(DrawContext dc){
GL2 gl = dc.getGL().getGL2();
int attrMask = GL2.GL_CURRENT_BIT | GL.GL_COLOR_BUFFER_BIT;
gl.glPushAttrib(attrMask);
if (!dc.isPickingMode())
dc.beginStandardLighting(); }
glPushAttrib
方法用于保存状态,稍后将在endDrawing()
中弹出
我可以用OpenGL4实现同样的功能吗?如果是,怎么做
到目前为止,我找到的所有东西都是针对OpenGL2的。我发现DrawContext
中有名为restoreDefaultCurrentColor()
,restoredefaultdepththetting()
和restoredefaultbling()
的方法,但它们没有帮助
编辑:所以我发现如果我调用
gl.glBindProgram(0)
解除当前使用的程序的绑定,我实际上可以看到一些东西。我看到了WorldWind的标准图层。这意味着星星、城市名称等,但地球仍然是黑暗的。在渲染过程中似乎有东西断裂。我认为这不是一个好主意,因为固定管道和可编程管道非常不同,据我记忆所及,Worldwind使用固定管道。此外,如果您使用GL4,您将不得不自己管理矩阵和变换,这不是小事。你想实现什么?@gouessej嘿,谢谢你的回答:)正如我所说的,我目前正试图在WorldWind中显示相当大的点云,并认为从理论上讲,使用GL4会更有效。好吧,你需要跟踪你所更改的一切,并恢复它。对于glPushAttribs
/glPopAttribs
,您可以使用GL\u ALL\u ATTRIB\u BITS
获得更多信息,但是仍然有一些东西是您可以做的,这些东西不会被还原。@derhass感谢您的建议,但它似乎没有改变任何东西。我想知道是否有可能做我想做的事。目前,在我看来,可编程管道以某种方式破坏了用于地球仪的固定管道(我认为)。“在我看来,可编程管道以某种方式破坏了用于地球仪的固定管道(我认为)”,如果yoiu恢复程序0,那么绘图将回到固定管道。但是仍然有许多州你可能已经修改过了。
protected void endDrawing(DrawContext dc){
GL2 gl = dc.getGL().getGL2();
if (!dc.isPickingMode())
dc.endStandardLighting();
gl.glPopAttrib(); }