gpt4 book ai didi

java - Opengl 对象翻译

转载 作者:行者123 更新时间:2023-12-01 14:55:03 26 4
gpt4 key购买 nike

我正在使用 opengl 进行我的学校项目,其中我应该使用一些提供的模型和我自己的想法创建一个“基本场景”。我将创建一个简单的农场:已经用顶点制作了一座房子,并在它前面放置了一个猫模型......但这是我的担忧:

当我开始编码时,我意识到每个模型都链接到之前的模型矩阵?例如一段代码:

public void display(GLAutoDrawable drawable) {
final GL3 gl = drawable.getGL().getGL3();
loader.setUniformMatrix("projection", projection);

gl.glClear(GL3.GL_COLOR_BUFFER_BIT | GL3.GL_DEPTH_BUFFER_BIT);

myTexture.bind(gl, modeling, "my_texture");

myTexture.bind(gl, program, "my_texture");

Mat4 mv = MatrixMath.lookAt(this.eyeX,this.eyeY,this.eyeZ,this.at,this.up);

program.setUniformMatrix("model_view", mv);
program.use(gl);
vbo.bind(gl);
gl.glDrawArrays(GL3.GL_TRIANGLES, 0, numVertices);
// 2nd part
mouseMv = mv;
modeling.setUniformMatrix("model_view", mouseMv);
Mat4 translate = MatrixMath.translate(1.0f, 0.35f, 0);
Mat4 rotate = MatrixMath.rotationX(-270.0f);
mouseMv = mouseMv.mul(translate);
mouseMv = mouseMv.mul(rotate);

angle += 2.0f;
if (angle > 360.0f)
angle -= 360.0f;

rotate = MatrixMath.rotationZ(angle);
mouseMv = mouseMv.mul(rotate);
modeling.setUniformMatrix("model_view", mouseMv);
modeling.use(gl);
for (Map.Entry<String, VertexBufferObject> entry : vboHashMap.entrySet()) {
String key = entry.getKey();
entry.getValue().bind(gl);
gl.glDrawArrays(GL3.GL_TRIANGLES, 0, SGFLoader.getNumVertices(key));
}
}

(对于我们需要使用的“简单框架”非常抱歉......它不允许我使用网络中提供的教程)

Mat4 mv = MatrixMath.lookAt(this.eyeX,this.eyeY,this.eyeZ,this.at,this.up);

program.setUniformMatrix("model_view", mv);

我创建了一个“观察矩阵”,它允许我将眼睛放在相机上观察给定的点。现在是 (0.0, 0.0, 0.0);

之后,当我从顶点绘制我的房子时,它被放置在给定的点(以 (0.0, 0.0, 0.0) 为中心的矩形);

当我想放置鼠标模型时,我使用前一个对象的最后一个转换矩阵将其引用到它(在本例中我使用 mv 矩阵 [我从类示例中获取它]);我可以将它放在任何其他地方而不需要引用以前的对象吗?在教程中,我发现他们使用矩阵推送和矩阵弹出来获取不同的对象。我想控制鼠标移动,并通过按键盘按钮将其在场景中移动,但没有成功。我尝试将 mouseMv 乘以平移矩阵,但它没有改变它的位置。有什么建议可以让鼠标在场景中“可控”和移动吗?

当我为 mouseMv 创建新矩阵时,该对象不可见。

这是我关心的问题。当我在场景中创建大量对象时,它们必须引用先前创建的对象。

最佳答案

尝试将变换矩阵理解为压缩为单个实体的一系列变换。您可以使用矩阵来链接变换。您从我们称为 view 的 LookAt 矩阵开始。

然后,对于每个模型,您都有自己的模型矩阵,例如 model_transform_mousemodel_transform_cat 等。模型 View 复合矩阵是 View 与模型变换相乘的结果

modelview = view · model_transform_

因此,创建一个通用的 LookAt 矩阵,然后为每个模型创建一个新的模型 View 矩阵,方法是首先复制该 View 矩阵并将模型变换乘以它。

Mat4 view = MatrixMath.lookAt(this.eyeX,this.eyeY,this.eyeZ,this.at,this.up);

Mat4 model_transform_cat = ...
Mat4 modelview_cat = view.mul(model_transform_cat); //assuming Mat4::mul does not modify the calling instance

关于java - Opengl 对象翻译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14386087/

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