gpt4 book ai didi

java - OpenAL 听者方向从俯仰、偏航和滚转

转载 作者:行者123 更新时间:2023-12-01 08:59:56 26 4
gpt4 key购买 nike

我正在制作一款游戏,目前正忙于让我的音频监听器正常工作。我已经完成了所有操作,我什至可以听到一些声音,但我的相机的方向(定义的类)与我的音频不兼容。我尝试使用以下方法自己实现它:

AL10.alListener3f(AL10.AL_ORIENTATION , cam.getPitch(),cam.getYaw(), cam.getRoll());

但是那 ofcource 并没有起作用。我该怎么做才能让我的游戏正常运行?

OpenGL 2.0 版和(我认为是 OpenAl 2.0 版)谢谢!

编辑:从答案中我设法理解它需要位于 float 缓冲区中。这就是我使用俯仰和偏航创建相机 View 矩阵的方法:

    viewMatrix.setIdentity();
Matrix4f.rotate((float) Math.toRadians(pitch), rotateX, viewMatrix, viewMatrix);
Matrix4f.rotate((float) Math.toRadians(yaw), rotateZ, viewMatrix, viewMatrix);
Vector3f negativeCameraPos = new Vector3f(-position.x, -position.y, -position.z);
Matrix4f.translate(negativeCameraPos, viewMatrix, viewMatrix);

以及我目前用于解决此问题的方法:

    ByteBuffer bb = ByteBuffer.allocateDirect( 6 * 4);
bb.order( ByteOrder.nativeOrder() );
FloatBuffer listenerOrientation = bb.asFloatBuffer();
listenerOrientation.put( 0, cam.getViewMatrix().m01 );
listenerOrientation.put( 1, cam.getViewMatrix().m02 );
listenerOrientation.put( 2, cam.getViewMatrix().m03 );
listenerOrientation.put( 3, cam.getViewMatrix().m11 );
listenerOrientation.put( 4, cam.getViewMatrix().m12 );
listenerOrientation.put( 5, cam.getViewMatrix().m13 );

AL10.alListener( AL10.AL_ORIENTATION, listenerOrientation );
AL10.alListener3f(AL10.AL_POSITION, cam.getPosition().x, cam.getPosition().y, cam.getPosition().z);

最佳答案

您必须根据俯仰/偏航/滚动表示计算 View vector 和向上 vector 。您很可能已经拥有该数据,因为它们存储在相机矩阵的第二行和第三行(或列)中。

使用此值,您可以使用 pname = AL10.AL_ORIENTATION 调用 alListener(int pname, java.nio.FloatBuffer value) 方法value 包含类似于此代码示例的两个 vector :

listenerOrientation.put( 0, lookX );
listenerOrientation.put( 1, lookY );
listenerOrientation.put( 2, lookZ );
listenerOrientation.put( 3, upX );
listenerOrientation.put( 4, upY );
listenerOrientation.put( 5, upZ );

AL10.alListener( AL10.AL_ORIENTATION, listenerOrientation );

来源:
https://www.openal.org/documentation/OpenAL_Programmers_Guide.pdfhttp://forum.lwjgl.org/index.php?topic=2631.0

关于java - OpenAL 听者方向从俯仰、偏航和滚转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41766740/

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