【问题标题】:my scene is rendered upside down我的场景被颠倒了
【发布时间】:2014-01-15 11:12:30
【问题描述】:

我在为一个小项目开发的场景渲染时遇到问题。看来我的场景实际上是颠倒的,我不知道为什么。

您可以看到选项按钮实际上是以正确的方向呈现的,而场景的其余部分则不是。我试图简单地反转着色器返回的位置的 y 坐标,但它与棕色立方体的运动相混淆。

这是我写的着色器:

#ifndef GL_ES
#version 330
#endif

uniform mat4 u_projectionMatrix;
uniform mat4 u_viewMatrix;

uniform vec3 u_scale;
uniform mat4 u_rotation;
uniform vec3 u_position;
uniform vec2 u_textureScale;
uniform vec2 u_textureOffset;

attribute vec4 a_position;
attribute vec3 a_normal;
attribute vec2 a_texCoord0;

varying vec4 v_position;
varying vec4 v_normal;
varying vec2 v_texCoords;

void main()
{
// Not sure why some vec4's need 0 or 1, since it's the w-coordinate (shouldn't this      always be 1 prior to applying the projection matrix?).
v_position = vec4(u_position, 0) + (u_rotation * (a_position * vec4(u_scale, 1)));
v_normal = normalize(u_rotation * vec4(a_normal, 0));
v_texCoords = (a_texCoord0 * u_textureScale) + u_textureOffset;

gl_Position = u_projectionMatrix * u_viewMatrix * v_position;
//gl_Position.y = -gl_Position.y;
} 

这是相机的代码:

public void create() {
...

_camera = new PerspectiveCamera(67, Gdx.graphics.getWidth(),Gdx.graphics.getHeight());

_camera.translate(0, -10, 20);
_camera.lookAt(new Vector3(0,0,0));
_camera.near = 0.1f;

...
}

有人可以帮忙吗?

编辑:更改向上向量的 y 坐标可以解决场景的方向问题,但会使按钮消失,就像它没有被渲染一样。这是我用来绘制选项按钮的代码:

public void create() {
    //camera code and other initialization stuff...

    // Create new stage for the ui.
    toggleOptions = new Stage();


    // Add a menu button.
    Table toggleBtn = new Table(skin);
    toggleOptions.addActor(toggleBtn);

    initUI();

    ...
    }

    private void initUI(){

    final TextButton toggleMenuButton = new TextButton("Options", skin);

    menuWidgets.put("toggleMenu", toggleMenuButton);
    toggleMenuButton.addListener(new ChangeListener() {
        @Override
        public void changed(ChangeEvent event, Actor actor) {
            // Toggle the menu.
            showMenu = !showMenu;
        }
    });

    // Set up button so that is appears in the bottom center of the screen (with some padding).
    toggleMenuButton.setPosition((Gdx.graphics.getWidth() / 2.0f) - toggleMenuButton.getWidth() / 2.0f, padY);


    toggleMenuButton.setWidth(toggleMenuButton.getWidth() + padX);

    // Add the toggle button.
    toggleOptions.addActor(toggleMenuButton);
}

    public void render() {
    ...
    toggleOptions.act();
    toggleOptions.draw();
    ...
    }

编辑 2:好的,问题是按钮被渲染在平面和立方体后面,因为绘制调用放错了位置(它应该是最后一次调用,但我在平面绘制和立方体绘制之前调用了它)。谢谢大家的帮助。

【问题讨论】:

  • 这个:_camera.translate(0, -10, 20);看起来很可疑。如果你输入 10 而不是 -10 会怎样?
  • 您在哪里以及如何设置视图矩阵?应该在代码中的某处调用 Matrix.setLookAtM。向上的向量是否正确?
  • @Tobor mmm.. 它修复了场景的方向,但文本按钮消失了。
  • @NigelK 在渲染函数中设置了这一行:shader.setUniformMatrix("u_viewMatrix", _camera.view);
  • 好的,我还尝试将向上矢量的 y 坐标更改为 -y,然后我再次使场景处于正确的方向,但按钮只是消失了。我会继续研究它,但如果有人有想法,将不胜感激

标签: android graphics opengl-es libgdx


【解决方案1】:

_camera.setOrientation(180.0f, 0.0f, 0.0f, 1.0f)

【讨论】:

  • 相机对象没有 setOrientation 方法
  • 能否请您在图片上显示(+x、+y 和+z 轴)?您可以通过翻译场景中的框来找到他们的方向。
  • 在这种情况下,使用带有文本或数字的纹理会很有用,因此我们可以了解对象的方向。这个纹理没有给出关于物体旋转的任何想法。
  • 对不起,我没有足够的声望在你的问题下写评论,这就是为什么我会写在这里,在我的回答下。正如您提到的,问题在于按钮的位置;我认为 Tobor 的第一条评论是您原始问题的正确答案,不是吗?
猜你喜欢
  • 1970-01-01
  • 2016-04-11
  • 2020-11-21
  • 1970-01-01
  • 2023-02-18
  • 1970-01-01
  • 1970-01-01
  • 2012-09-05
  • 2012-11-03
相关资源
最近更新 更多