zoukankan      html  css  js  c++  java
  • Android OpenGL ES和OpenGL一起学(一)绘制一个简单的矩形

    // 首先我们看一下用OpenGL绘制一个矩形

    #include <GL/glut.h> void display() { // 清除屏幕 glClear(GL_COLOR_BUFFER_BIT); // 指定从glBegin到glEnd描述的基元(primitive),在这里是多边形 glBegin(GL_POLYGON); // 指定多边形的四个顶点 glVertex2f(-0.5, -0.5); glVertex2f(-0.5, 0.5); glVertex2f(0.5, 0.5); glVertex2f(0.5, -0.5); glEnd(); // 强制刷新缓冲,保证绘图命令将被执行,而不是存储在缓冲区中等待其他的OpenGL命令 glFlush(); } void init() { // 设置清除颜色(Clear color)为黑色 glClearColor(0.0, 0.0, 0.0, 0.0); // 设置绘制颜色(Color)为红色 glColor3f(1.0, 0, 0); // 设置当前的操作矩阵为投影矩阵(GL_PROJECTION) glMatrixMode(GL_PROJECTION); // 重置当前矩阵为单位矩阵 glLoadIdentity(); // 设置投影矩阵为整个屏幕 gluOrtho2D(-1.0, 1.0, -1.0, 1.0); } int main(int argc, char *argv[]) { // 初始化glut glutInit(&argc, argv); // 设置显示方式 glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); // 设置窗口大小为500X500 glutInitWindowSize(500, 500); // 设置窗口出现位置为(0, 0) glutInitWindowPosition(0, 0); // 创建窗口 glutCreateWindow("My Simple"); // 设置显示回调函数(每次需要重绘时都要调用该函数) glutDisplayFunc(display); // 调用自定义的初始化函数 init(); glutMainLoop(); return 0; }

     下边是Android上如何绘制一个矩形

    // 用Android的OpenGL ES实现了相同的功能
    // 代码没有经过优化,为的是容易理解
    public class OpenGLTestActivity extends Activity 
    {
    	GLSurfaceView glView;
        @Override
        public void onCreate(Bundle savedInstanceState) 
        {
            super.onCreate(savedInstanceState);
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
            
            glView = new GLSurfaceView(this);
            glView.setRenderer(new SimpleRenderer());
            setContentView(glView);
        }
        
        class SimpleRenderer implements Renderer
        {
    
    		@Override
    		public void onDrawFrame(GL10 gl)
    		{
    			gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
    			
    			ByteBuffer byteBuffer = ByteBuffer.allocateDirect(6 * 2 * 4);
    			byteBuffer.order(ByteOrder.nativeOrder());
    			FloatBuffer vertices = byteBuffer.asFloatBuffer();
    			// 定义两个三角形的六个顶点
    			vertices.put(new float[] {
    			120.0f, 200.0f,
    			360.0f, 200.0f,
    			360.0f, 600.0f,
    			120.0f, 200.0f,
    			360.0f, 600.0f,
    			120.0f, 600.0f
    			});
    			vertices.flip();
    			
    			gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
    			gl.glVertexPointer(2, GL10.GL_FLOAT, 0, vertices);
    			gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3);
    			gl.glDrawArrays(GL10.GL_TRIANGLES, 3, 3);
    
    		}
    
    		@Override
    		public void onSurfaceChanged(GL10 arg0, int arg1, int arg2) 
    		{
    			
    		}
    
    		@Override
    		public void onSurfaceCreated(GL10 gl, EGLConfig arg1) 
    		{
    			gl.glClearColor(0,0,0,1);
    			gl.glColor4f(1.0f, 0.0f, 0.0f, 0.0f);
    			gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
    			gl.glViewport(0, 0, 480, 800);
    			gl.glMatrixMode(GL10.GL_PROJECTION);
    			gl.glLoadIdentity();
    			gl.glOrthof(0, 480, 0, 800, 1, -1);
    		}
        }
    }
    
  • 相关阅读:
    减少注入元
    浅谈微服务基建的逻辑
    Linux系统Java环境安装配置
    ASP.NET Core 依赖注入
    C#并发编程实例讲解-概述(01)
    Linux系统从安装开始
    关于C#获取动态的时间差函数
    SQL Server 存储过程
    jQuery选择器大全(48个代码片段+21幅图演示)
    对齐方式
  • 原文地址:https://www.cnblogs.com/xiaobo68688/p/2266648.html
Copyright © 2011-2022 走看看