• 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);
    		}
        }
    }
    
  • 相关阅读:
    改造vant日期选择
    css3元素垂直居中
    npm综合
    (转)网页加水印方法
    Mac下IDEA自带MAVEN插件的全局环境配置
    隐藏注册控件窗口
    High performance optimization and acceleration for randomWalk, deepwalk, node2vec (Python)
    How to add conda env into jupyter notebook installed by pip
    The Power of WordNet and How to Use It in Python
    背单词app测评,2018年
  • 原文地址:https://www.cnblogs.com/xiaobo68688/p/2266648.html
Copyright © 2020-2023  润新知