我有一個簡單的opengl應用程序,可以顯示任意3D模型。我想實現縮放。我現在使用glScale,並在一定程度上工作。不過,我有兩個問題。opengl「zoom」:對象裁剪和亮度
任何形式的縮放(+)都會快速到達對象邊緣位於近剪裁平面內的點。現在,我的zNear類似於0.1,所以增加對象的比例會導致剪輯是有意義的。我想知道是否有其他方法可以達到更好的效果。
當我放大時,對象變暗。縮小並變得更亮。我在0,0,100左右有一個明亮的位置。我有非常簡單的燈光定位在0,0,100,只使用漫反射。
gl.glEnable(GL10.GL_LIGHTING); gl.glEnable(GL10.GL_LIGHT0); gl.glEnable(GL10.GL_COLOR_MATERIAL); float[] lights; lights = new float[] { 0f, 0f, 0f, 1f }; gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_AMBIENT, lights, 0); lights = new float[] { 1f, 1f, 1f, 1f }; gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_DIFFUSE, lights, 0); lights = new float[] { 0f, 0f, 0f, 1f }; gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_SPECULAR, lights, 0); float matAmbient[] = { 0f, 0f, 0f, 1f }; float matDiffuse[] = { 1f, 1f, 1f, 1f }; float matSpecular[] = { 0f, 0f, 0f, 1f }; gl.glMaterialfv(GL10.GL_FRONT_AND_BACK, GL10.GL_AMBIENT, matAmbient, 0); gl.glMaterialfv(GL10.GL_FRONT_AND_BACK, GL10.GL_DIFFUSE, matDiffuse, 0); gl.glMaterialfv(GL10.GL_FRONT_AND_BACK, GL10.GL_SPECULAR, matSpecular, 0); float lightPosition[] = { mesh.mid.vertex[X], mesh.mid.vertex[Y], 100f, 1f }; gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_POSITION, lightPosition, 0);
我沒有衰減設置,我相信要啓用需要使光通過距離的影響。無論如何,我不會改變物體的距離,只是縮放它。確定臉部的位置正在改變,但並不顯着。無論如何,我想放大會導致它變得更亮,而不是更暗。
這恰好在android平臺上使用opengl-es 1.0,如果這是相關的。
任何幫助表示讚賞。
我以前曾嘗試縮放GLU.lookAt()眼睛Z參數。效果是什麼,直到一些門檻,然後對象開始削減。對象的(表觀)大小從未改變。 – 2010-12-07 01:02:48
如果您使用的是正投影(或非常小的FOV視角,傾向於相同的事物),會發生這種情況。 – PeterT 2010-12-07 10:05:35