小编Kri*_*ice的帖子

两个方向的3D旋转?

背景

我正在尝试使用LWJGL 3.0在Java中创建FPS游戏.我已经设置了一个相机类,它具有俯仰和偏航(不使用滚动).相机本身扩展了实体,因为它有一个模型.我希望这款相机始终位于相机的"前方",无论相机指向何处.每个实体都有一个getTransformationMatrix()返回a 的方法,Matrix4f然后将其传递给实体着色器.

问题

模型需要指向摄像机的方向,并围绕摄像机旋转,使其始终位于前方.这种情况下的对象是带枪的手,如下图所示.

在此输入图像描述

我的尝试

我知道基本的三角学,所以我得到的对象分别正确旋转俯仰和偏航.这是我目前的实施:

偏航

@Override
public Matrix4f getTransformationMatrix() {
    modelX = getPosition().x + (radius * (float)Math.sin(Math.toRadians(getYaw())));
    modelZ = getPosition().z + (radius * (float)Math.cos(Math.toRadians(getYaw())));

    return Transform.createTransformationMatrix(new Vector3f(modelX, getPosition().y - 5, modelZ), new Vector3f(0, getYaw(), 0), getScale());
}
Run Code Online (Sandbox Code Playgroud)

沥青

@Override
public Matrix4f getTransformationMatrix() {
    modelZ = getPosition().z + (radius * (float)Math.sin(Math.toRadians(getPitch())));
    modelY = (getPosition().y - 5) + (radius * (float)Math.cos(Math.toRadians(getPitch())));

    return Transform.createTransformationMatrix(new Vector3f(getPosition().x, modelY, modelZ), new Vector3f(getPitch(), 0, 0), getScale());
}
Run Code Online (Sandbox Code Playgroud)

我已经做了一些研究,但我担心我被困在这个问题太久了,需要一些新鲜的眼睛.当我尝试组合这两个计算时,当看到除0以外的任何偏转角时,模型似乎以图形的形式移动.下面是我尝试组合这些:

@Override …
Run Code Online (Sandbox Code Playgroud)

java opengl angle rotation lwjgl

6
推荐指数
1
解决办法
278
查看次数

Java:允许我的广告资源中的放弃操作?

对于我的游戏,我实施了一个库存系统.单击屏幕时,a MousePressedEvent将通过layers游戏中的所有对象传递给所有继承EventListener(My EventListener)的对象.该EventListener级工作正常,并使用它,如下图所示,我已经成功地让我的库存,这样你可以删除一个槽物品,将它们放回.然而,我想要做的是能够将它们从任何包含项目的插槽中取出,并将它们放在任何其他插槽中(只要目标插槽为空).我认为我所拥有的将允许这样做,因为在if声明中我没有检查如果选择了插槽,我将其添加到插槽中.但这实际上并不奏效.有任何想法吗?

Slot.java课堂代码:

public boolean onMousePressed(MousePressedEvent e) {
    Point p = new Point(Mouse.getX(), Mouse.getY());
    if (!this.getBounds().contains(p)) return false;
    boolean left = (e.getButton() == MouseEvent.BUTTON1);
    boolean right = (e.getButton() == MouseEvent.BUTTON3);
    boolean hasItems = (items.size() > 0);
    if (this.getBounds().contains(p)){
        if (right && !selected && hasItems){
            select(true);
            s = new Slot(new Vector2i(Mouse.getX(), Mouse.getY()));
            addComponent(s);
            s.add(items.get(0));
            remove(items.get(items.size() - 1));
        } else if (right && selected){
            s.add(items.get(0));
            remove(items.get(items.size() - 1));
            if (items.size() …
Run Code Online (Sandbox Code Playgroud)

java events inventory handler eventhandler

5
推荐指数
1
解决办法
76
查看次数

Python返回false为"1"=="1".有什么想法吗?

我为我的A Level计算任务编写了一个侦察系统.该计划旨在存储侦察小屋的侦察员信息,包括徽章,排行榜系统,以及用于从列表中添加/查找/删除侦察员的管理系统.侦察信息必须存储在文件中.

删除功能的文件处理过程(我的问题所在):删除侦察按钮触发弹出窗口(使用tkinter).该窗口收集侦察员的ID,然后搜索侦察文件,扫描存储的侦察员的ID并将其与输入的ID进行比较.如果找到该ID,它将跳过该文件的这一行,否则该行将被复制到临时文件中.完成所有行后,temp中的行将复制到原始文件的新空白版本,并将临时文件删除/重新创建为空白.

我的问题:问题是当程序将要删除的ID(remID)与当前正在文件中查找的侦察程序的ID(sctID)进行比较时,它实际上在它们相等时返回false.这可能是我处理变量,分割行以获取ID,甚至我的数据类型的问题.我只是不知道.我尝试将两者都转换为字符串,但仍然是假的.本节的代码如下.先感谢您!

elif self._name == "rem":
            remID = str(scoutID.get())
            if remID != "":
                #store all the lines that are in the file in a temp file
                with open(fileName,"r") as f:
                        with open(tempFileName,"a") as ft:
                            lines = f.readlines()
                            for line in lines:
                                sctID = str(line.split(",")[3])
                                print("%s,%s,%s"%(remID, sctID, remID==sctID))
                                #print(remID)
                                if sctID != remID: #if the ID we are looking to remove isn't
                                    #the ID of the scout we are currently looking at, move it to the temp file
                                    ft.write(line) …
Run Code Online (Sandbox Code Playgroud)

python string logic integer file

3
推荐指数
1
解决办法
117
查看次数

尝试查找下一个最大值时出现Python算法错误

我编写了一个扫描文件"ID"的算法,并将该值与整数i的值进行比较(我将整数转换为字符串进行比较,并修剪了"\n"前缀从线).该算法比较文件中每一行的这些值(每个ID).如果它们相等,则算法将i增加1并使用i的新值进行reccurtion.如果值不相等,则将其与文件中的下一行进行比较.它执行此操作,直到它具有不在文件中的i值,然后返回该值以用作下一条记录的ID.

我的问题是我有一个ID的文件列表1,3,2,因为我删除了ID为2的记录,然后创建了一个新的记录.这表明算法正常工作,因为它为新记录提供了之前删除的ID 2.但是,当我创建新记录时,下一个ID为3,导致我的ID列表读取:1,3,2,3而不是1,3,2,4.贝娄是我的算法,带有print()命令的结果.我可以看到它出错的地方,但无法解决原因.有任何想法吗?

算法:

def _getAvailableID(iD):
        i = iD
        f = open(IDFileName,"r")
        lines = f.readlines()
        for line in lines:
            print("%s,%s,%s"%("i=" + str(i), "ID=" + line[:-1], (str(i) == line[:-1])))
            if str(i) == line[:-1]:
                i += 1
                f.close()
                _getAvailableID(i)
        return str(i)
Run Code Online (Sandbox Code Playgroud)

输出:(运行算法以查找ID应为4的记录的适当ID时的输出):

i=1,ID=1,True
i=2,ID=1,False
i=2,ID=3,False
i=2,ID=2,True
i=3,ID=1,False
i=3,ID=3,True
i=4,ID=1,False
i=4,ID=3,False
i=4,ID=2,False
i=4,ID=2,False
i=2,ID=3,False
i=2,ID=2,True
i=3,ID=1,False
i=3,ID=3,True
i=4,ID=1,False
i=4,ID=3,False
i=4,ID=2,False
i=4,ID=2,False
Run Code Online (Sandbox Code Playgroud)

python algorithm file output

3
推荐指数
1
解决办法
65
查看次数