在opengl es中绘制一个三角形,设置位置为 gl.glTranslatef(-0.0f, 0.0f, 3.0f);//移出屏幕一些距离。

这时候屏幕里面看不见这个三角形,那在视口中怎么去设置呢?也就是这个函数gl.glFrustumf(-ratio,ratio,-1,1,1,10);最后的两个数字该怎么写才... 这时候屏幕里面看不见这个三角形,那在视口中怎么去设置呢?也就是这个函数gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10); 最后的两个数字该怎么写才能看见那个三角形呢? 展开
 我来答
jiangzhijie33
2012-12-07 · TA获得超过909个赞
知道答主
回答量:232
采纳率:0%
帮助的人:62.8万
展开全部

我们添加了一个三角形和一个四边形,在这里我们使用glDrawElements方法来绘制我们的第一个三角形和使用glDrawArrays来绘制我们的第一个四边形,来演示在OpenGL ES中怎样绘制最基本的图元。

        在OpenGL ES中不支持glVertex方法,因此在绘制三角形和四边形的方法和NeHe教程中的方法有所不同。为了是程序条理清楚,我们分别实现MyTriangle和MySquare来绘制我们的一个三角形和四边形。

        现在假设MyTriangl和 MySquare已经实现好,在后面详细叙述这两个类的实现。在MyGLRender的onDrawFrame中的代码如下:

[java] view plaincopyprint?
  1. public void onDrawFrame(GL10 gl) 
  2.     // 清除屏幕和深度缓存  
  3.     gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); 
  4.     // 重置当前的模型观察矩阵  
  5.     gl.glLoadIdentity(); 
  6.     // 左移 1.5 单位,纵深向里移动 6.0  
  7.     gl.glTranslatef(-1.5f,0.0f,-6.0f); 
  8.     // 画三角形  
  9.     triangle.draw(gl);   
  10.     // 右移3单位  
  11.     gl.glTranslatef(3.0f,0.0f,0.0f); 
  12.     // 画四边形  
  13.     quad.draw(gl); 
public void onDrawFrame(GL10 gl)
{
// 清除屏幕和深度缓存
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
// 重置当前的模型观察矩阵
gl.glLoadIdentity();
// 左移 1.5 单位,纵深向里移动 6.0
gl.glTranslatef(-1.5f,0.0f,-6.0f);
// 画三角形
triangle.draw(gl);
// 右移3单位
gl.glTranslatef(3.0f,0.0f,0.0f);
// 画四边形
quad.draw(gl);
}

        当我们调用glLoadIdentity ()之后,实际上将当前点移到了屏幕中心,X坐标轴从左至右,Y坐标轴从下至上,Z坐标轴从里至外。OpenGL屏幕中心的坐标值是X和Y轴上的0.0f点。中心左面的坐标值是负值,右面是正值。移向屏幕顶端是正值,移向屏幕底端是负值。移入屏幕深处是负值,移出屏幕则是正值。

        glTranslatef(x, y, z)沿着 X, Y和 Z轴移动。根据前面的次序,下面的代码沿着X轴左移1.5个单位,Y轴不动(0.0f),最后移入屏幕6.0f个单位。注意在glTranslatef(x, y, z)中移动的时候,它并不是相对屏幕中心移动,而是相对与当前所在的屏幕位置。

        现在我们已经移到了屏幕的左半部分,并且将视图推入屏幕背后足够的距离以便我们可以看见全部的场景-创建三角形。triangle.draw(gl)来完成我们的第一个三角形绘制。

         在屏幕的左半部分画完三角形后,我们要移到右半部分来画正方形。为此要再次使用glTranslate。这次右移,所以X坐标值为正值。因为前面左移了1.5个单位,这次要先向右移回屏幕中心(1.5个单位),再向右移动1.5个单位。总共要向右移3.0个单位。quad.draw(gl)来完成我们的第一四边形的绘制。

viral
2012-11-29 · TA获得超过1924个赞
知道小有建树答主
回答量:602
采纳率:0%
帮助的人:805万
展开全部
三角形在摄像机后面,glFrustum最后那两个参数怎么写都不会看见的。glFrustum只能看见摄像机前面的东西。

要么把摄像机往后移(同样是用glTranslate,相当于把整个世界往前移),要么投影变换把glFrustum改成glOrtho,因为glOrtho可以看见摄像机后面的东西。比如
gl.glOrtho(-ratio, ratio, -1, 1, -5, 5);
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式