我正在使用opengl在我的学校项目上工作,我应该使用一些提供的模型和我自己的想法创建“基本场景”。 我会创建一个简单的农场:从顶点创建一个房子,并在它前面放置一个猫模型...但这里是我的关注点: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));
}
}
(非常SRY为“简单的框架,”我们需要用...它不允许我在网上提供的教程工作)
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创建一个新矩阵时,该对象不可见。
这是我关心的问题。当我在场景中创建大量对象时,他们将不得不引用先前创建的对象。