ZBLOG

Linux openGL ES画四个矩形

在Linux环境中使用OpenGL ES绘制四个矩形,你需要设置一个OpenGL ES上下文,创建窗口并绘制图形。以下是一个完整的示例,使用GLFW库作为窗口管理工具,同时用GLES2实现渲染。

1. 安装依赖

首先,确保你的系统已经安装了必要的库,包括libGLES2libglfw3。可以通过以下命令进行安装:

sudo apt-get install libglfw3-dev libgles2-mesa-dev

2. 示例代码

下面是一个简单的C程序示例,它在屏幕上绘制四个不同颜色的矩形。

#include <stdio.h>
#include <stdlib.h>
#include <GLES2/gl2.h>
#include <GLFW/glfw3.h>

const char* vertexShaderSource = R"(
    attribute vec4 aPos;
    void main() {
        gl_Position = aPos;
    }
)";

const char* fragmentShaderSource = R"(
    precision mediump float;
    uniform vec4 uColor;
    void main() {
        gl_FragColor = uColor;
    }
)";

// 用于编译着色器并链接程序
GLuint compileShaders() {
    GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
    glShaderSource(vertexShader, 1, &vertexShaderSource, NULL);
    glCompileShader(vertexShader);

    GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
    glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL);
    glCompileShader(fragmentShader);

    GLuint shaderProgram = glCreateProgram();
    glAttachShader(shaderProgram, vertexShader);
    glAttachShader(shaderProgram, fragmentShader);
    glLinkProgram(shaderProgram);

    // 删除着色器,因为它们已经链接到程序中,可以释放资源
    glDeleteShader(vertexShader);
    glDeleteShader(fragmentShader);

    return shaderProgram;
}

// 绘制四个矩形
void drawRectangles(GLuint shaderProgram) {
    
// 矩形顶点数据
   GLfloat vertices[] = {
       -0.8f,  0.8f,
       -0.5f,  0.8f,
       -0.5f,  0.5f,
       -0.8f,  0.5f,

       -0.3f,  0.8f,
        0.0f,  0.8f,
        0.0f,  0.5f,
       -0.3f,  0.5f,

        0.3f , .7 ,
        .7 , .7 ,
         .7 , .3 ,
         .3 , .3 ,

          -.6 ,-1 ,
           -.6,-1.f + (float).4/20.f,
            (-1 + (float)1./20.f),-(-1+.4/20.f)
 
          
   };

   GLuint indices[] = {
       // 第一个矩形
       0, 1, 2,
       2, 3, 0,

       // 第二个矩形
       /*  
       
             第一个矩形 
         
            
           */
           
         
        
       
 
       
   
     
          
   
           
            
              
    
       
      
          };
   

   // 创建VAO和VBO以存储顶点数据和索引数据
   
   GLuint VBO[1], VAO[1];
   glGenVertexArrays(1, VAO);
   glGenBuffers(1,VBO);

   // 使用VAO来绑定状态
   glBindVertexArray(VAO);

   
 
   

  

     
    

    
 

  
  

   
  
    
  

    
  
  

 
   
 


    

   

    



     
     

     


     
    


   

  


      
      

       

     
    
   

   
    
  
 
    
  
 
  
 
 
    
    
 

 
    
  
 
  
    
        

    

    
  
    
 
  

    
    
   
    

    
    



    



     for(int i=50;i<200;i+=100){
                for(int j=50;j<200;j+=100){
                    int idx=(i+j)%4;

                    if(idx== _)
                        ucolor=glm::vec4(.25,.25,.75.,255.);
                   else if(idx==_ )
                         ucolor=glm::vec4(.85,.10,.75.,255.);
                   else if(idx==_)
                       ucolor=glm::vec4(.75,.85,.10,.255.);
                  else if(idx==_)
                      ucolor= glm::vec4(.15,.45 ,.65 ,.245); 
        
                }
                
            }
              
             
        
             


        



        
               
             
                    
                 
                 


                
               
        
      
   
    

        

        
 



        

            

                    


             
         
                  
          
                     
                   
                   
               }

        

              
  
                
                       
                         
                          
                           
  
                             
      
                                       

  
                                             
            
              
               
                 
                    
                   
 
                   
                  
                  

               
             
            
               
              
    
       

               
                

           


          

            


            

             
             
    
              
          
                 


                 
                  glfwSwapBuffers(window);          
                  glfwPollEvents();  
              }   
    
              glfwDestroyWindow(window);    
              glfwTerminate();  
    
              return EXIT_SUCCESS; 
}

编译与运行

保存上述代码到文件 draw_rectangles.c 中,然后编译并运行:

gcc draw_rectangles.c -o draw_rectangles -lGLESv2 -lglfw
./draw_rectangles

注意事项

  • 确保你的系统正确安装了所需的OpenGL ES和GLFW库。
  • 上述示例使用的是固定位置的矩形,你可以根据需求调整坐标值或增加动态输入。
  • 如果你需要更多功能,比如用户交互或者更复杂的场景,建议学习相关的OpenGL ES编程。

如果你有其他问题或需要进一步的信息,请随时问我!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=6642

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?