我正在使用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創建一個新矩陣時,該對象不可見。
這是我關心的問題。當我在場景中創建大量對象時,他們將不得不引用先前創建的對象。