gpt4 book ai didi

java - openGL:无法沿 x 或 y 轴移动,并且负缩放会剔除错误的面

转载 作者:行者123 更新时间:2023-12-02 06:36:30 26 4
gpt4 key购买 nike

所以我使用所有的投影数学和其他东西实现了一个可移动的相机。我有一些输入条件,当我点击 A 或 D 时,我应该分别向左和向右移动,但我不能这样做,相机只在 Z 轴上移动。不仅如此,当我在任何轴上按负数缩放时,我渲染的立方体是倒置的并且很奇怪,正面被剔除,而不是我不应该看到的正面。这个问题可能与我的四元数、矩阵或 vector 类无关,因为我从 github 复制了它们(以及关注与它们相关的 YouTube 系列)。

要向左或向右移动,我使用:

public void input(){
float movAmt = (float)(10 * Time.getDelta());
float rotAmt = (float)(100 * Time.getDelta());

if(Input.getKey(Input.KEY_W)){
move(getForward(), movAmt);
}
if(Input.getKey(Input.KEY_S)){
move(getForward(), -movAmt);
}
if(Input.getKey(Input.KEY_A)){
move(getLeft(), movAmt);
}
if(Input.getKey(Input.KEY_D)){
move(getRight(), movAmt);
}

if(Input.getKey(Input.KEY_UP)){
rotateX(-rotAmt);
}
if(Input.getKey(Input.KEY_DOWN)){
rotateX(rotAmt);
}
if(Input.getKey(Input.KEY_LEFT)){
rotateY(-rotAmt);
}
if(Input.getKey(Input.KEY_RIGHT)){
rotateY(rotAmt);
}
}

public void move(Vector3f dir, float amt){
pos = pos.add(dir.mult(amt));
}

public void rotateY(float angle){
Vector3f Haxis = yAxis.cross(forward);
Haxis.normalize();

forward.rotate(angle, yAxis);
forward.normalize();

up = forward.cross(Haxis);
up.normalize();
}

public void rotateX(float angle){
Vector3f Haxis = yAxis.cross(forward);
Haxis.normalize();

forward.rotate(angle, Haxis);
forward.normalize();

up = forward.cross(Haxis);
up.normalize();
}

public Vector3f getLeft(){
return forward.cross(up).normalize();
}

public Vector3f getRight(){
return up.cross(forward).normalize();
}

我应该在哪里寻找问题? (总体上贯穿整个程序)

最佳答案

你的问题让我有点困惑,因为我认为你在谈论两件事。

但是当您使用像 glScalef(1f, -1f, 1f); 这样的负值进行缩放时,您需要反转 front face使用glFrontFace();

示例:

// Render stuff

glPushMatrix();
glFrontFace(GL_CW);

// Render negatively scaled stuff

glFrontFace(GL_CCW);
glPopMatrix();

// Render stuff

注意:我仅使用已弃用的方法进行演示,因此如果您创建了自己的矩阵堆栈,则只需更改我的示例以适合您的代码即可。

关于java - openGL:无法沿 x 或 y 轴移动,并且负缩放会剔除错误的面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19592053/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com