我正在使用 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 创建一个新矩阵时,该对象不可见。
这是我的担忧。当我将在我的场景中创建大量对象时,他们将不得不参考之前创建的对象。