gpt4 book ai didi

android - 如何在 Android 中使用 OpenGl 移动形状?

转载 作者:行者123 更新时间:2023-11-29 17:51:00 25 4
gpt4 key购买 nike

我已经创建了使用 OpentGl 绘制 mCircle 和 mTriangle 的 android 应用程序:

public void onDrawFrame(GL10 gl) {
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);

//Draw Triangle
gl.glLoadIdentity();
gl.glTranslatef(0.0f, 0.0f, -10.0f);
mTriangle.draw(gl); // Draw triangle

//Draw Circle
gl.glTranslatef(-1.5f, 0.0f, -20.0f);
mCircle.draw(gl);
}

我的问题是当我尝试通过以下方式移动 mTriangle 时:

   gl.glTranslatef(NewX, NewY, -10.0f);

然后 mCircle 也在移动!!.

我的问题是,如何只移动 mTriangle(mCircle 的位置是固定的(0,0))?或者可以在运行时改变 mTriangle 位置的命令是什么?

最佳答案

转换应用于当前模型矩阵。每个新的变换都累积在这个矩阵中。为了保持初始转换,OpenGL (<3) 使用矩阵堆栈操作。

//For each model

glPushMatrix() //save current matrix

// Apply current model transformations

// Render model

glPopMatrix() //restore matrix

因此,在您的代码中:

public void onDrawFrame(GL10 gl) {
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);

gl.glLoadIdentity();

//Draw Triangle
gl.glPushMatrix();
gl.glTranslatef(NewX, NewY, -10.0f);
mTriangle.draw(gl); // Draw triangle
gl.glPopMatrix();


//Draw Circle
gl.glPushMatrix();
gl.glTranslatef(-1.5f, 0.0f, -20.0f);
mCircle.draw(gl);
gl.glPopMatrix();

}

请注意,因为您的模型矩阵是恒等矩阵,您可以简单地在每个模型之间重新加载恒等来代替 push/pop 矩阵,后者用于处理更复杂的场景。

关于android - 如何在 Android 中使用 OpenGl 移动形状?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22891371/

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