2014-01-15 64 views
2

我正在为一个小型项目渲染一个场景的渲染问题。看起来,我的场景实际上是颠倒的,我不知道为什么。我的场景被颠倒渲染

enter image description here

您可以看到选项按钮实际上是用正确的方向呈现,而场景的其余部分是没有的。我试图简单地反转着色器返回的位置的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:好了,问题是,按钮是在平面和立体的背后呈现的,因为抽奖电话是没有道理的(它应该是最后一次通话,但我在平面绘制和立方体绘制之前调用了它)。感谢大家的帮助。

+3

此:_camera.translate(0,-10,20);看起来可疑。如果你把10而不是-10? –

+1

你在哪里以及如何设置视图矩阵?应该在你的代码中的某处调用Matrix.setLookAtM。向上矢量是否正确? – NigelK

+0

@Tobor mmm ..它修复了场景的方向,但textbutton消失。 – AleDD

回答

0

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

+0

相机对象没有setOrientation方法 – AleDD

+0

你可以请求在图片上显示(+ x,+ y和+ z轴)?您可以通过翻译场景中的框找到他们的路线。 – Rancs

+0

而在这种情况下,使用带有文本或数字的纹理将非常有用,因此我们可以了解对象的方向。这种纹理不会给出关于物体旋转的任何想法。 – Rancs