use*_*zer 2 java android opengl-es orthographic
如果你将z增加到很远的地方,我试图与精灵没有任何大小差异.
但是我没有运气,它仍然变得更小:
||编辑||
我现在有这些方法
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
float _width = 320f;
float _height = 480f;
gl.glDisable(GL10.GL_DEPTH_TEST);
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
gl.glOrthof(0, _width, 0, _height, 1, 100);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
// Load textures ,
gl.glEnable(GL10.GL_TEXTURE_2D);
for (int a = 0; a < squares.length; a++) {
squares[a].loadGLTexture(gl, context);
}
}
Run Code Online (Sandbox Code Playgroud)
.
public void onDrawFrame(GL10 gl) {
//Clear Screen And Depth Buffer
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glLoadIdentity(); //Reset The Current Modelview Matrix
gl.glTranslatef(.0f, 1.0f, locZ);
squares[0].draw(gl);
gl.glLoadIdentity();
gl.glTranslatef(0.5f, 0.f, locZ);
squares[1].draw(gl);
gl.glLoadIdentity();
gl.glTranslatef(-0.5f, -0.5f, locZ);
squares[2].draw(gl);
gl.glLoadIdentity();
gl.glTranslatef(-0.5f, -0.5f, locZ);
squares[3].draw(gl);
//change zvalues
if(locZ >= 4.0f){
speedZ *= -1.0f;
locZ = 3.9f;
}
else if(locZ <= -4.0){
speedZ *= -1.0f;
locZ = -3.9f;
}
locZ += speedZ;
}
Run Code Online (Sandbox Code Playgroud)
我正在改变z值,并因此改变与"相机"的距离,并期望由于我不想使用透视(正交模式),因此正方形的大小应该保持不变.但他们没有.希望这会有所帮助.
你有错误的glOrtho参数:
gl.glOrthof(0, width, 0, height, 0.01f, 100.0f);
Run Code Online (Sandbox Code Playgroud)
要么
gl.glOrthof(0, width, height, 0, 0.01f, 100.0f);
Run Code Online (Sandbox Code Playgroud)
编辑:忘记重置矩阵 - glLoadIdentity.
public void onDrawFrame(GL10 gl) {
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
/* SET NEW PROJECTION HERE: ortho or perspective */
gl.glOrthof(0, _width, 0, _height, 0.001f, 100);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
/* SET NEW MODELVIEW MATRIX( space transformation ) HERE and DRAW YOUR STUFF */
//change zvalues
if(locZ >= 99.0f){
speedZ *= -1.0f;
locZ = 99.0f;
}
else if(locZ <= 1.0){
speedZ *= -1.0f;
locZ = 1.0f;
}
}
Run Code Online (Sandbox Code Playgroud)
这些步骤必须在渲染2D之前完成.从3D投影移动到2D投影,而不是在创建纹理或任何对象时.不太了解onSurfaceCreated中的public void,但它似乎不是渲染循环的一部分.
| 归档时间: |
|
| 查看次数: |
4267 次 |
| 最近记录: |