• 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);
    		}
        }
    }
    
  • 相关阅读:
    随笔 JS 字符串 分割成字符串数组 并动态添加到指定ID的DOM 里
    phpmyadmin查看创建表的SQL语句
    thinkphp 3.2响应头 x-powered-by 修改
    Centos 7.0查看硬盘使用情况 命令
    centos 7.0安装花生壳
    centos 7.0 菜鸟接触命令 记录
    centos 7.0 ssh 登陆
    Sphinx 2.2.6 window下安装全过程 未完 持续标记~~~~
    c#多线程编程实战(原书第二版)文摘
    分布式锁的几种实现方式(转)
  • 原文地址:https://www.cnblogs.com/xiaobo68688/p/2266648.html
Copyright © 2020-2023  润新知