尽管使用PushPopMatrix进行转换,但gluLookAt无法正常工作

尽管使用PushPopMatrix进行转换,但gluLookAt无法正常工作,第1张

概述我正在尝试在Android应用中使用gluLookAt来移动“相机”,但是没有看到任何结果.我环顾四周,我收集到的所有glLoadIndentity()调用都会重置矩阵,从而取消gluLookAt的效果.问题是,无论我在gluLookAt调用中添加了什么,都没有任何动作.所以这是我的曲面设置的相关部分:publicvoido

我正在尝试在Android应用中使用gluLookAt来移动“相机”,但是没有看到任何结果.我环顾四周,我收集到的所有glLoadindentity()调用都会重置矩阵,从而取消gluLookAt的效果.

问题是,无论我在gluLookAt调用中添加了什么,都没有任何动作.

所以这是我的曲面设置的相关部分:

@H_403_8@public voID onSurfaceCreated(GL10 gl, EGLConfig config) { gl.gldisable(GL10.GL_DITHER); gl.glEnable(GL10.GL_TEXTURE_2D); gl.glShadeModel(GL10.GL_SMOOTH); gl.glClearcolor(0f, 0f, 0f, 0.5f); gl.glClearDepthf(1.0f); gl.glEnable(GL10.GL_DEPTH_TEST); gl.glDepthFunc(GL10.GL_LEQUAL); gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);}public voID onSurfaceChanged(GL10 gl, int wIDth, int height) { gl.glVIEwport(0, 0, wIDth, height); gl.glMatrixMode(GL10.GL_PROJECTION); gl.glLoadIDentity(); glu.gluPerspective(gl, 45f, (float) wIDth / (float) height, 0.01f, 200f); gl.glMatrixMode(GL10.GL_MODELVIEW);}

然后我的画框方法是:

@H_403_8@public voID onDrawFrame(GL10 gl) { gl.glClear(GL10.GL_color_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); glu.gluLookAt(gl, 0, 0, 100, 0, 0, 0, 0, 1, 0); for (int i = 0; i < obj.size; i++) { // obj is an array of positions obj = mObj[i]; gl.glPushmatrix(); gl.glLoadIDentity(); gl.glTranslatef(obj.position.x(), obj.position.y(), obj.position.z()); gl.glrotatef(obj.rotation.x(), 1f, 0f, 0f); gl.glrotatef(obj.rotation.y(), 0f, 1f, 0f); gl.glrotatef(obj.rotation.z(), 0f, 0f, 1f); obj.draw(gl); // the objects 'draw' themselves gl.glPopMatrix(); }}

这是我的对象的draw()函数的示例,该函数本质上绘制了一堆元素:

@H_403_8@class SomeObject { public voID draw(GL10 gl) { gl.glEnableClIEntState(GL10.GL_VERTEX_ARRAY); gl.glEnableClIEntState(GL10.GL_norMAL_ARRAY); gl.glEnable(GL10.GL_CulL_FACE); gl.glFrontFace(GL10.GL_ccw); gl.glCullFace(GL10.GL_BACK); gl.glcolor4f(1f, 0f, 0f, 1f); gl.glDrawElements(GL10.GL_TRIANGLES, SomeObject.fCount, GL10.GL_UNSIGNED_BYTE, faceBuffer); gl.glcolor4f(1, 1, 1, 1); gl.gldisableClIEntState(GL10.GL_norMAL_ARRAY); gl.gldisableClIEntState(GL10.GL_VERTEX_ARRAY); }}

解决方法:

试一试这个版本:

@H_403_8@public voID onDrawFrame(GL10 gl) { gl.glClear(GL10.GL_color_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); gl.glLoadIDentity(); glu.gluLookAt(gl, 0, 0, 100, 0, 0, 0, 0, 1, 0); for (int i = 0; i < obj.size; i++) { // obj is an array of positions obj = mObj[i]; gl.glPushmatrix(); gl.glTranslatef(obj.position.x(), obj.position.y(), obj.position.z()); gl.glrotatef(obj.rotation.x(), 1f, 0f, 0f); gl.glrotatef(obj.rotation.y(), 0f, 1f, 0f); gl.glrotatef(obj.rotation.z(), 0f, 0f, 1f); obj.draw(gl); // the objects 'draw' themselves gl.glPopMatrix(); }} 总结

以上是内存溢出为你收集整理的尽管使用Push / PopMatrix进行转换,但gluLookAt无法正常工作全部内容,希望文章能够帮你解决尽管使用Push / PopMatrix进行转换,但gluLookAt无法正常工作所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1210324.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存