我正在尝试用更快的opengl-
es表面替换我已经拥有的基于Canvas的渲染系统,但是,我似乎无法让openGL渲染器以其充当2d字段的方式进行兼容,而不是透视图。
我当前的渲染器代码如下所示:
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
gl.glViewport(0, 0, width, height);
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
gl.glOrthof(0.0f, width, 0.0f, height, 0.0f, 1.0f);
gl.glShadeModel(GL10.GL_FLAT);
gl.glEnable(GL10.GL_BLEND);
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
gl.glColor4x(0x10000, 0x10000, 0x10000, 0x10000);
gl.glEnable(GL10.GL_TEXTURE_2D);
}
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);
gl.glClearColor(0.5f, 0.5f, 0.5f, 1);
gl.glShadeModel(GL10.GL_FLAT);
gl.glDisable(GL10.GL_DEPTH_TEST);
gl.glEnable(GL10.GL_TEXTURE_2D);
gl.glDisable(GL10.GL_DITHER);
gl.glDisable(GL10.GL_LIGHTING);
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
}
我将如何设置渲染器,以使平移变换与屏幕上的像素匹配?(因此,将5向右平移会将其移动5个像素)
请注意,在openGL中,Y坐标是倒置的。否则,一切都是一样的。
至于正确的标志,我建议您查看开放源代码的Android游戏副本岛:http
:
//code.google.com/p/replicaisland/
这是我在自己的代码中使用的:
public void onSurfaceChanged(GL10 gl, int width, int height)
{
mViewWidth = width;
mViewHeight = height;
gl.glViewport(0, 0, mViewWidth, mViewHeight);
gl.glLoadIdentity();
GLU.gluOrtho2D(gl, 0, mViewWidth, mViewHeight, 0);
}
public void onSurfaceCreated(GL10 gl, EGLConfig config)
{
gl.glClearColor(0.5f, 0.5f, 0.5f, 1);
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);
gl.glShadeModel(GL10.GL_FLAT);
gl.glDisable(GL10.GL_DEPTH_TEST);
gl.glEnable(GL10.GL_BLEND);
gl.glBlendFunc(GL10.GL_ONE, GL10.GL_ONE_MINUS_SRC_ALPHA);
gl.glViewport(0, 0, mViewWidth, mViewHeight);
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
gl.glEnable(GL10.GL_BLEND);
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
gl.glShadeModel(GL10.GL_FLAT);
gl.glEnable(GL10.GL_TEXTURE_2D);
GLU.gluOrtho2D(gl, 0, mViewWidth, mViewHeight, 0);
}
其中mViewWidth
&mViewHeight
是显示的大小。
save:用来保存 Canvas 的状态。save 之后,可以调用 Canvas 的平移、放缩、旋转、错切、裁剪等操作。 restore:用来恢复Canvas之前保存的状态。防止 save 后对 Canvas 执行的操作对后续的绘制有影响。 save 和 restore 要配对使用( restore 可以比 save 少,但不能多),如果 restore 调用次数比 save 多,会引发 Erro
问题内容: 我正在执行一项任务,以HTML5重写以下Flash应用程序: http://www.docircuits.com/circuit-editor 到目前为止,鉴于该应用程序和我的研发的复杂性,我已将AngularJS确定为实现的首选MVC框架。该应用程序包含面板,菜单,属性,图表等各个部分,我相信所有这些都可以在AngularJS中轻松实现。 但是,关键问题在于组件的设计和交互(如拖放,
OpenGL是一个跨编程语言、跨平台的专业图形程序接口,是一个功能强大,调用方便的底层图形库。对于这份教程,它先从最基本的图形绘制讲起,然后由浅及深的介绍了可编程渲染管线中的各种矩阵设置、光照计算,以及许多常用的渲染技术,而我也是通过这份教程,对OpenGL有了比较深入的认识,所以将其翻译出来,希望对那些准备深入学习OpenGL的朋友提供一些帮助。
我得到了我的旋转值从OPI0到我的电脑,现在我想让一个物体在我的陀螺仪面对的方向旋转(度数值从180到-180)我对Python相当陌生。glRotatef(1,xrot,yrot,zrot)只设置当前旋转的旋转。但是我实际上想要的是,如果它是180度,我想把它放到180度。这可以通过获取当前旋转来归档,测试它是否变小或变大,然后调整旋转或用命令设置旋转到度数值。所以我的主要问题是:有没有设置创建
我目前正在遵循ThinMatrix的OpenGL教程,使用VAO和VBOS进行渲染。我几乎完全复制了代码(唯一的区别是我使工厂类成为静态的,而不仅仅是正常的)。我可以看到我的程序版本和他的程序版本之间唯一的技术区别是我使用lwjgl 3而不是lwjgl 2。 以下是我的源代码: 我遇到的问题是,每当我试图运行项目时,它就会崩溃,并显示以下错误消息: 环顾四周,我发现了这个stackoverflow
问题内容: 我想绘制Java的Canvas,但由于我不知道自己在做什么而无法正常工作。这是我的简单代码: 窗口上没有任何内容。 我以为“画布”是纸而“图形”是我的铅笔是我的错吗?那是怎么回事? 问题答案: 意见建议: 不要使用Canvas,因为不要将AWT与Swing组件不必要地混合。 而是使用JPanel或JComponent。 不要通过调用组件来获取Graphics对象,因为获得的Graphi