데이터 베이스 MySQL 튜토리얼 OpenGL ES2.0编程实例

OpenGL ES2.0编程实例

Jun 07, 2016 pm 03:19 PM
opengl 저장 전반적인 상황 변하기 쉬운 데이터 프로그램 작성

1. 保存全局变量的数据结构 以下例子程序均基于Linux平台。 [cpp] view plaincopy typedef struct _escontext { void *userData; //Putyouruserdatahere... GLintwidth; //Windowwidth GLintheight; //Windowheight EGLNativeWindowTypehWnd; //Windowhandle

1. 保存全局变量的数据结构

以下例子程序均基于Linux平台。

[cpp] view plaincopy

  1. typedef struct _escontext  
  2. {  
  3.    void*       userData;                    // Put your user data here...  
  4.    GLint       width;                          // Window width  
  5.    GLint       height;                         // Window height  
  6.    EGLNativeWindowType  hWnd;  // Window handle  
  7.    EGLDisplay  eglDisplay;             // EGL display  
  8.    EGLContext  eglContext;            // EGL context  
  9.    EGLSurface  eglSurface;            // EGL surface  
  10.   
  11.    // Callbacks  
  12.    void (ESCALLBACK *drawFunc) ( struct _escontext * );  
  13.    void (ESCALLBACK *keyFunc) ( struct _escontext *, unsigned charintint );  
  14.    void (ESCALLBACK *updateFunc) ( struct _escontext *, float deltaTime );  
  15. }ESContext;  

[cpp] view plaincopy

  1. typedef struct  
  2. {  
  3.    // Handle to a program object  
  4.    GLuint programObject;  
  5.   
  6.    // Atrribute Location  
  7.    GLint positionLoc;  
  8.    GLint textureLoc;  
  9.   
  10.    // Uniform location  
  11.    GLint matrixModeLoc;  
  12.    GLint matrixViewLoc;  
  13.    GLint matrixPerspectiveLoc;  
  14.   
  15.    // Sampler location  
  16.    GLint samplerLoc;  
  17.   
  18.    // texture  
  19.    GLuint texture;  
  20. } UserData;  



2. 初始化EGL渲染环境和相关元素(第一步曲)

[cpp] view plaincopy

  1. int InitEGL(ESContext * esContext)  
  2. {  
  3.      NativeWindowType eglWindow = NULL;  
  4.   
  5.      EGLDisplay display;  
  6.      EGLContext context;  
  7.      EGLSurface surface;  
  8.   
  9.      EGLConfig configs[2];  
  10.      EGLBoolean eRetStatus;  
  11.      EGLint majorVer, minorVer;  
  12.      EGLint context_attribs[] = {EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE};  
  13.   
  14.      EGLint numConfigs;  
  15.      EGLint cfg_attribs[] = {EGL_BUFFER_SIZE,    EGL_DONT_CARE,  
  16.                              EGL_DEPTH_SIZE,     16,  
  17.                              EGL_RED_SIZE,       5,  
  18.                              EGL_GREEN_SIZE,     6,  
  19.                              EGL_BLUE_SIZE,      5,  
  20.                              EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,  
  21.                              EGL_NONE};  
  22.   
  23.      // Get default display connection   
  24.      display = eglGetDisplay((EGLNativeDisplayType)EGL_DEFAULT_DISPLAY);  
  25.      if ( display == EGL_NO_DISPLAY )  
  26.      {  
  27.           return EGL_FALSE;  
  28.      }  
  29.   
  30.      // Initialize EGL display connection  
  31.      eRetStatus = eglInitialize(display, &majorVer, &minorVer);  
  32.      if( eRetStatus != EGL_TRUE )  
  33.      {  
  34.           return EGL_FALSE;  
  35.      }  
  36.   
  37.      //Get a list of all EGL frame buffer configurations for a display  
  38.      eRetStatus = eglGetConfigs (display, configs, 2, &numConfigs);  
  39.      if( eRetStatus != EGL_TRUE )  
  40.      {  
  41.           return EGL_FALSE;  
  42.      }  
  43.   
  44.      // Get a list of EGL frame buffer configurations that match specified attributes  
  45.      eRetStatus = eglChooseConfig (display, cfg_attribs, configs, 2, &numConfigs);  
  46.      if( eRetStatus != EGL_TRUE  || !numConfigs)  
  47.      {  
  48.           return EGL_FALSE;  
  49.      }  
  50.   
  51.      // Create a new EGL window surface  
  52.      surface = eglCreateWindowSurface(display, configs[0], eglWindow, NULL);  
  53.      if (surface == EGL_NO_SURFACE)  
  54.      {  
  55.           return EGL_FALSE;  
  56.      }  
  57.   
  58.      // Set the current rendering API (EGL_OPENGL_API, EGL_OPENGL_ES_API,EGL_OPENVG_API)  
  59.      eRetStatus = eglBindAPI(EGL_OPENGL_ES_API);  
  60.      if (eRetStatus != EGL_TRUE)  
  61.      {  
  62.           return EGL_FALSE;  
  63.      }  
  64.   
  65.      // Create a new EGL rendering context  
  66.      context = eglCreateContext (display, configs[0], EGL_NO_CONTEXT, context_attribs);  
  67.      if (context == EGL_NO_CONTEXT)  
  68.      {  
  69.           return EGL_FALSE;  
  70.      }  
  71.   
  72.      // Attach an EGL rendering context to EGL surfaces  
  73.      eRetStatus = eglMakeCurrent (display, surface, surface, context);  
  74.      if( eRetStatus != EGL_TRUE )  
  75.      {  
  76.           return EGL_FALSE;  
  77.      }  
  78.      //If interval is set to a value of 0, buffer swaps are not synchronized to a video frame, and the swap happens as soon as the render is complete.  
  79.      eglSwapInterval(display,0);  
  80.   
  81.      // Return the context elements  
  82.      esContext->eglDisplay = display;  
  83.      esContext->eglSurface = surface;  
  84.      esContext->eglContext = context;  
  85.   
  86.      return EGL_TRUE;  
  87. }  


3. 生成Program (第二步曲)

3.1 LoadShader

LoadShader主要实现以下功能:

       1) 创建Shader对象

       2) 装载Shader源码

       3) 编译Shader

      其实现参考代码如下:

 

[cpp] view plaincopy

  1. /* type specifies the Shader type: GL_VERTEX_SHADER or GL_FRAGMENT_SHADER */  
  2. GLuint LoadShader ( GLenum type, const char *shaderSrc )  
  3. {  
  4.    GLuint shader;  
  5.    GLint compiled;  
  6.      
  7.    // Create an empty shader object, which maintain the source code strings that define a shader  
  8.    shader = glCreateShader ( type );  
  9.   
  10.    if ( shader == 0 )  
  11.     return 0;  
  12.   
  13.    // Replaces the source code in a shader object  
  14.    glShaderSource ( shader, 1, &shaderSrc, NULL );  
  15.      
  16.    // Compile the shader object  
  17.    glCompileShader ( shader );  
  18.   
  19.    // Check the shader object compile status  
  20.    glGetShaderiv ( shader, GL_COMPILE_STATUS, &compiled );  
  21.   
  22.    if ( !compiled )   
  23.    {  
  24.       GLint infoLen = 0;  
  25.   
  26.       glGetShaderiv ( shader, GL_INFO_LOG_LENGTH, &infoLen );  
  27.         
  28.       if ( infoLen > 1 )  
  29.       {  
  30.          char* infoLog = malloc (sizeof(char) * infoLen );  
  31.   
  32.          glGetShaderInfoLog ( shader, infoLen, NULL, infoLog );  
  33.          esLogMessage ( "Error compiling shader:\n%s\n", infoLog );              
  34.            
  35.          free ( infoLog );  
  36.       }  
  37.   
  38.       glDeleteShader ( shader );  
  39.       return 0;  
  40.    }  
  41.   
  42.    return shader;  
  43. }  

1)glCreateShader 
       它创建一个空的shader对象,它用于维护用来定义shader的源码字符串。支持以下两种shader:
      (1) GL_VERTEX_SHADER: 它运行在可编程的“顶点处理器”上,用于代替固定功能的顶点处理;
      ( 2) GL_FRAGMENT_SHADER: 它运行在可编程的“片断处理器”上,用于代替固定功能的片段处理;

2)glShaderSource
        shader对象中原来的源码全部被新的源码所代替。

3)glCompileShader
       编译存储在shader对象中的源码字符串,编译结果被当作shader对象状态的一部分被保存起来,可通过glGetShaderiv函数获取编译状态。

4)glGetShaderiv
       获取shader对象参数,参数包括:GL_SHADER_TYPE, GL_DELETE_STATUS, GL_COMPILE_STATUS, GL_INFO_LOG_LENGTH, GL_SHADER_SOURCE_LENGTH.

3.2 LoadProgram

其参考代码如下:

 

[cpp] view plaincopy

  1. GLuint LoadProgram ( const char *vShaderStr, const char *fShaderStr )  
  2. {  
  3.    GLuint vertexShader;  
  4.    GLuint fragmentShader;  
  5.    GLuint programObject;  
  6.    GLint linked;  
  7.   
  8.    // Load the vertex/fragment shaders  
  9.    vertexShader = LoadShader ( GL_VERTEX_SHADER, vShaderStr );  
  10.    fragmentShader = LoadShader ( GL_FRAGMENT_SHADER, fShaderStr );  
  11.   
  12.    // Create the program object  
  13.    programObject = glCreateProgram ( );  
  14.    if ( programObject == 0 )  
  15.       return 0;  
  16.   
  17.    // Attaches a shader object to a program object  
  18.    glAttachShader ( programObject, vertexShader );  
  19.    glAttachShader ( programObject, fragmentShader );  
  20.    // Bind vPosition to attribute 0     
  21.    glBindAttribLocation ( programObject, 0, "vPosition" );  
  22.    // Link the program object  
  23.    glLinkProgram ( programObject );  
  24.   
  25.    // Check the link status  
  26.    glGetProgramiv ( programObject, GL_LINK_STATUS, &linked );  
  27.   
  28.    if ( !linked )   
  29.    {  
  30.       GLint infoLen = 0;  
  31.   
  32.       glGetProgramiv ( programObject, GL_INFO_LOG_LENGTH, &infoLen );  
  33.         
  34.       if ( infoLen > 1 )  
  35.       {  
  36.          char* infoLog = malloc (sizeof(char) * infoLen );  
  37.   
  38.          glGetProgramInfoLog ( programObject, infoLen, NULL, infoLog );  
  39.          esLogMessage ( "Error linking program:\n%s\n", infoLog );              
  40.            
  41.          free ( infoLog );  
  42.       }  
  43.   
  44.       glDeleteProgram ( programObject );  
  45.       return GL_FALSE;  
  46.    }  
  47.    
  48.    // Free no longer needed shader resources  
  49.    glDeleteShader ( vertexShader );  
  50.    glDeleteShader ( fragmentShader );  
  51.   
  52.    return programObject;  
  53. }  

 

1)glCreateProgram
      建立一个空的program对象,shader对象可以被连接到program对像
2)glAttachShader
      program对象提供了把需要做的事连接在一起的机制。在一个program中,在shader对象被连接在一起之前,必须先把shader连接到program上。
3)glBindAttribLocation 
       把program的顶点属性索引与顶点shader中的变量名进行绑定。
4)glLinkProgram
       连接程序对象。如果任何类型为GL_VERTEX_SHADER的shader对象连接到program,它将产生在“可编程顶点处理器”上可执行的程序;如果任何类型为GL_FRAGMENT_SHADER的shader对象连接到program,它将产生在“可编程片断处理器”上可执行的程序。
5)glGetProgramiv
       获取program对象的参数值,参数有:GL_DELETE_STATUS, GL_LINK_STATUS, GL_VALIDATE_STATUS, GL_INFO_LOG_LENGTH, GL_ATTACHED_SHADERS, GL_ACTIVE_ATTRIBUTES, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, GL_ACTIVE_UNIFORMS, GL_ACTIVE_UNIFORM_MAX_LENGTH.

3.3 CreateProgram

       在3.1中只实现了Shader的编译,在3.2中只实现了Program的链接,现在还缺少真正供进行编译和链接的源码,其参考代码如下:

 

[cpp] view plaincopy

  1. int CreateProgram(ESContext * esContext)  
  2. {  
  3.      GLuint programObject;  
  4.   
  5.      GLbyte vShaderStr[] =    
  6.       "attribute vec4 vPosition;    \n"  
  7.       "void main()                  \n"  
  8.       "{                            \n"  
  9.       "   gl_Position = vPosition;  \n"  
  10.       "}                            \n";  
  11.      
  12.      GLbyte fShaderStr[] =    
  13.       "precision mediump float;\n"\  
  14.       "void main()                                  \n"  
  15.       "{                                            \n"  
  16.       "  gl_FragColor = vec4 ( 1.0, 0.0, 0.0, 1.0 );\n"  
  17.       "}                                                    \n";  
  18.       
  19.     // Create user data   
  20.     esContext->userData = malloc(sizeof(UserData));  
  21.     UserData *userData = esContext->userData;  
  22.   
  23.     // Load the shaders and get a linked program object  
  24.     programObject = LoadProgram ( (const char*)vShaderStr, (const char*)fShaderStr );  
  25.     if(programObject == 0)  
  26.     {  
  27.     return GL_FALSE;  
  28.     }  
  29.   
  30.     // Store the program object  
  31.     userData->programObject = programObject;  
  32.   
  33.     // Get the attribute locations  
  34.     userData->positionLoc = glGetAttribLocation ( g_programObject, "v_position" );  
  35.     glClearColor ( 0.0f, 0.0f, 0.0f, 1.0f );  
  36.     return 0;  
  37. }  

4. 安装并执行Program(第三步) 

[cpp] view plaincopy

  1. void Render ( ESContext *esContext )  
  2. {  
  3.    UserData *userData = esContext->userData;  
  4.    GLfloat vVertices[] = {  0.0f,  0.5f, 0.0f,   
  5.                            -0.5f, -0.5f, 0.0f,  
  6.                             0.5f, -0.5f, 0.0f };  
  7.         
  8.    // Set the viewport  
  9.    glViewport ( 0, 0, esContext->width, esContext->height );  
  10.      
  11.    // Clear the color buffer  
  12.    glClear ( GL_COLOR_BUFFER_BIT );  
  13.   
  14.    // Use the program object  
  15.    glUseProgram ( userData->programObject );  
  16.   
  17.    // Load the vertex data  
  18.    glVertexAttribPointer ( 0, 3, GL_FLOAT, GL_FALSE, 0, vVertices );  
  19.    glEnableVertexAttribArray ( 0 );  
  20.    glDrawArrays ( GL_TRIANGLES, 0, 3 );  
  21.    eglSwapBuffers(esContext->eglDisplay, esContext->eglSurface);  

[cpp] view plaincopy

  1. }  

4.1 glClear

      清除指定的buffer到预设值。可清除以下四类buffer:

      1)GL_COLOR_BUFFER_BIT

      2)GL_DEPTH_BUFFER_BIT

      3)GL_ACCUM_BUFFER_BIT

      4)GL_STENCIL_BUFFER_BIT

      预设值通过glClearColor, glClearIndex, glClearDepth, glClearStencil, 和glClearAccum来设置。

1)gClearColor

       指定color buffer的清除值,当调用glClear(GL_COLOR_BUFFER_BIT)时才真正用设定的颜色值清除color buffer。参数值的范围为:0~1。

      void glClearColor( GLclampf   red, GLclampf   green,  GLclampf   blue,  GLclampf   alpha);

2)glClearIndex

       指定color index buffer清除值。void glClearIndex( GLfloat   c);

3)glClearDepth

       指定depth buffer的清除值,取值范围为:0~1,默认值为1。

       void glClearDepth( GLclampd   depth);

4)glClearStencil

       指定stencil buffer清除值的索引,初始值为0。void glClearStencil( GLint   s);

5)glClearAccum

       指定accumulation buffer的清除值,初始值为0,取值范围为:-1~1

       void glClearAccum( GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha);

4.2 glUseProgram

       安装一个program object,并把它作为当前rendering state的一部分。

       1) 当一个可执行程序被安装到vertex processor,下列OpenGL固定功能将被disable:

  • The modelview matrix is not applied to vertex coordinates.
  • The projection matrix is not applied to vertex coordinates.
  • The texture matrices are not applied to texture coordinates.
  • Normals are not transformed to eye coordinates.
  • Normals are not rescaled or normalized.
  • Normalization of GL_AUTO_NORMAL evaluated normals is not performed.
  • Texture coordinates are not generated automatically.
  • Per-vertex lighting is not performed.
  • Color material computations are not performed.
  • Color index lighting is not performed.
  • This list also applies when setting the current raster position.

    2) 当一个可执行程序被安装到fragment processor,下列OpenGL固定功能将被disable:

  • Texture environment and texture functions are not applied.
  • Texture application is not applied.
  • Color sum is not applied.
  • Fog is not applied.

4.3 glVertexAttribPointer

       定义一个通用顶点属性数组。当渲染时,它指定了通用顶点属性数组从索引index处开始的位置数据格式其定义如下:

 

[cpp] view plaincopy

  1. void glVertexAttribPointer(  
  2.       GLuint   index,           // 指示将被修改的通用顶点属性的索引  
  3.        GLint   size,             // 指点每个顶点元素个数(1~4)  
  4.       GLenum   type,            // 数组中每个元素的数据类型  
  5.        GLboolean   normalized,   //指示定点数据值是否被归一化(归一化:GL_TRUE,直接使用:GL_FALSE)  
  6.       GLsizei   stride,         // 连续顶点属性间的偏移量,如果为0,相邻顶点属性间紧紧相邻  
  7.        const GLvoid *   pointer);//顶点数组  
  8. :其index应该小于#define GL_MAX_VERTEX_ATTRIBS               0x8869  


4.4 glEnableVertexAttribArray

      Enable由索引index指定的通用顶点属性数组。

      void glEnableVertexAttribArray( GLuint   index);
      void glDisableVertexAttribArray( GLuint   index);

      默认状态下,所有客户端的能力被disabled,包括所有通用顶点属性数组。如果被Enable,通用顶点属性数组中的值将被访问并被用于rendering,通过调用顶点数组命令:glDrawArrays, glDrawElements, glDrawRangeElements, glArrayElement, glMultiDrawElements, or glMultiDrawArrays.

4.5 glDrawArrays

    void glDrawArrays( GLenum   mode,  
                                  GLint   first,  
                                  GLsizei   count);

    1) mode:指明render原语,如:GL_POINTS, GL_LINE_STRIP, GL_LINE_LOOP, GL_LINES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN, GL_TRIANGLES, GL_QUAD_STRIP, GL_QUADS, 和 GL_POLYGON。

    2) first: 指明Enable数组中起始索引。

    3) count: 指明被render的原语个数。

    可以预先使用单独的数据定义vertex、normal和color,然后通过一个简单的glDrawArrays构造一系列原语。当调用glDrawArrays时,它使用每个enable的数组中的count个连续的元素,来构造一系列几何原语,从第first个元素开始。

4.6 eglSwapBuffers

      把EGL surface中的color buffer提交到native window进行显示。 

      EGLBoolean eglSwapBuffers(EGLDisplay display,EGLSurface surface)

5. 协调组织

    在前面的描述中,三步曲已经完成了:

    1)初始化EGL环境,为绘图做好准备

    2)生成Program

    3)安装并执行Program

    只有这三个关键人物,还不能运行,还需要一个协调组织者。其参考代码如下:   

[cpp] view plaincopy

  1. int main(int argc, char** argv)  
  2. {  
  3.     ESContext esContext;  
  4.     UserData  userData;  
  5.     int iFrames;   
  6.     unsigned long iStartTime,iEndTime;  
  7.     int iDeltaTime;  
  8.   
  9.     memset( &esContext, 0, sizeof( ESContext) );  
  10.     esContext.userData = &userData;  
  11.   
  12.     esContext.width = 1280;  
  13.     esContext.height = 720;  
  14.     // Init EGL display, surface and context  
  15.     if(!InitEGL(&esContext))  
  16.     {  
  17.         printf("Init EGL fail\n");  
  18.         return GL_FALSE;  
  19.     }  
  20.     // compile shader, link program   
  21.     if(!CreateProgram(&esContext))  
  22.     {  
  23.         printf("Create Program fail\n");  
  24.         return GL_FALSE;  
  25.     }  
  26.   
  27.   
  28.     iStartTime = GetCurTime();  
  29.     iFrames = 0;  
  30.   
  31.     while(1)  
  32.     {    // render a frame  
  33.          Render();  
  34.          iFrames++;  
  35.           
  36.          iEndTime = GetCurTime();  
  37.     iDeltaTime  = iEndTime - iStartTime;  
  38.     if(iDeltaTime >= 5000)  
  39.     {  
  40.             iStartTime = iEndTime;  
  41.         float fFrame = iFrames * 1000.0 / iDeltaTime;  
  42.         iFrames = 0;  
  43.   
  44.         printf("Frame: %f\n", fFrame);  
  45.     }  
  46.     }  
  47.     glDeleteProgram (esContext.userData->programObject);  
  48.     return GL_TRUE;  
  49. }  
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

초지능의 생명력이 깨어난다! 하지만 자동 업데이트 AI가 등장하면서 엄마들은 더 이상 데이터 병목 현상을 걱정할 필요가 없습니다. 초지능의 생명력이 깨어난다! 하지만 자동 업데이트 AI가 등장하면서 엄마들은 더 이상 데이터 병목 현상을 걱정할 필요가 없습니다. Apr 29, 2024 pm 06:55 PM

세상은 미친 듯이 큰 모델을 만들고 있습니다. 인터넷의 데이터만으로는 충분하지 않습니다. 훈련 모델은 '헝거게임'처럼 생겼고, 전 세계 AI 연구자들은 이러한 데이터를 탐식하는 사람들에게 어떻게 먹이를 줄지 고민하고 있습니다. 이 문제는 다중 모드 작업에서 특히 두드러집니다. 아무것도 할 수 없던 시기에, 중국 인민대학교 학과의 스타트업 팀은 자체 새로운 모델을 사용하여 중국 최초로 '모델 생성 데이터 피드 자체'를 현실화했습니다. 또한 이해 측면과 생성 측면의 두 가지 접근 방식으로 양측 모두 고품질의 다중 모드 새로운 데이터를 생성하고 모델 자체에 데이터 피드백을 제공할 수 있습니다. 모델이란 무엇입니까? Awaker 1.0은 중관촌 포럼에 최근 등장한 대형 멀티모달 모델입니다. 팀은 누구입니까? 소폰 엔진. 런민대학교 힐하우스 인공지능대학원 박사과정 학생인 Gao Yizhao가 설립했습니다.

iPhone의 느린 셀룰러 데이터 인터넷 속도: 수정 사항 iPhone의 느린 셀룰러 데이터 인터넷 속도: 수정 사항 May 03, 2024 pm 09:01 PM

지연이 발생하고 iPhone의 모바일 데이터 연결 속도가 느립니까? 일반적으로 휴대폰의 셀룰러 인터넷 강도는 지역, 셀룰러 네트워크 유형, 로밍 유형 등과 같은 여러 요소에 따라 달라집니다. 더 빠르고 안정적인 셀룰러 인터넷 연결을 얻기 위해 할 수 있는 일이 몇 가지 있습니다. 수정 1 – iPhone 강제 다시 시작 때로는 장치를 강제로 다시 시작하면 셀룰러 연결을 포함한 많은 항목이 재설정됩니다. 1단계 – 볼륨 높이기 키를 한 번 눌렀다가 놓습니다. 그런 다음 볼륨 작게 키를 눌렀다가 다시 놓습니다. 2단계 - 프로세스의 다음 부분은 오른쪽에 있는 버튼을 누르는 것입니다. iPhone이 다시 시작되도록 하세요. 셀룰러 데이터를 활성화하고 네트워크 속도를 확인하세요. 다시 확인하세요 수정 2 – 데이터 모드 변경 5G는 더 나은 네트워크 속도를 제공하지만 신호가 약할 때 더 잘 작동합니다

미 공군이 주목할만한 최초의 AI 전투기를 선보였습니다! 전 과정에 걸쳐 장관이 직접 간섭 없이 테스트를 진행했고, 10만 줄의 코드를 21차례 테스트했다. 미 공군이 주목할만한 최초의 AI 전투기를 선보였습니다! 전 과정에 걸쳐 장관이 직접 간섭 없이 테스트를 진행했고, 10만 줄의 코드를 21차례 테스트했다. May 07, 2024 pm 05:00 PM

최근 군계는 미군 전투기가 이제 AI를 활용해 완전 자동 공중전을 완수할 수 있다는 소식에 충격을 받았다. 네, 얼마 전 미군의 AI 전투기가 최초로 공개되면서 그 미스터리가 드러났습니다. 이 전투기의 정식 명칭은 VISTA(Variable Stability Flight Simulator Test Aircraft)로 미 공군 장관이 직접 조종해 일대일 공중전을 모의 실험한 것이다. 5월 2일, 미 공군 장관 프랭크 켄달(Frank Kendall)이 X-62AVISTA를 타고 에드워드 공군 기지에서 이륙했습니다. 1시간의 비행 동안 모든 비행 작업은 AI에 의해 자동으로 완료되었습니다. Kendall은 "지난 수십 년 동안 우리는 자율 공대공 전투의 무한한 잠재력에 대해 생각해 왔지만 항상 도달할 수 없는 것처럼 보였습니다."라고 말했습니다. 그러나 지금은,

정규 표현식을 사용하여 PHP 배열에서 중복 값 제거 정규 표현식을 사용하여 PHP 배열에서 중복 값 제거 Apr 26, 2024 pm 04:33 PM

정규식을 사용하여 PHP 배열에서 중복 값을 제거하는 방법: 정규식 /(.*)(.+)/i를 사용하여 중복 항목을 일치시키고 바꿉니다. 배열 요소를 반복하고 preg_match를 사용하여 일치하는지 확인합니다. 일치하면 값을 건너뛰고, 그렇지 않으면 중복 값이 ​​없는 새 배열에 추가합니다.

공장에서 일하는 테슬라 로봇, 머스크 : 올해 손의 자유도가 22도에 달할 것! 공장에서 일하는 테슬라 로봇, 머스크 : 올해 손의 자유도가 22도에 달할 것! May 06, 2024 pm 04:13 PM

테슬라의 로봇 옵티머스(Optimus)의 최신 영상이 공개됐는데, 이미 공장에서 작동이 가능한 상태다. 정상 속도에서는 배터리(테슬라의 4680 배터리)를 다음과 같이 분류합니다. 공식은 또한 20배 속도로 보이는 모습을 공개했습니다. 작은 "워크스테이션"에서 따고 따고 따고 : 이번에 출시됩니다. 영상에는 옵티머스가 공장에서 이 작업을 전 과정에 걸쳐 사람의 개입 없이 완전히 자율적으로 완료하는 모습이 담겨 있습니다. 그리고 Optimus의 관점에서 보면 자동 오류 수정에 중점을 두고 구부러진 배터리를 집어 넣을 수도 있습니다. NVIDIA 과학자 Jim Fan은 Optimus의 손에 대해 높은 평가를 했습니다. Optimus의 손은 세계의 다섯 손가락 로봇 중 하나입니다. 가장 능숙합니다. 손은 촉각적일 뿐만 아니라

단일 카드는 듀얼 카드보다 Llama를 70B 더 빠르게 실행합니다. Microsoft는 A100에 FP6을 넣었습니다 | 단일 카드는 듀얼 카드보다 Llama를 70B 더 빠르게 실행합니다. Microsoft는 A100에 FP6을 넣었습니다 | Apr 29, 2024 pm 04:55 PM

FP8 이하의 부동 소수점 수량화 정밀도는 더 이상 H100의 "특허"가 아닙니다! Lao Huang은 모든 사람이 INT8/INT4를 사용하기를 원했고 Microsoft DeepSpeed ​​팀은 NVIDIA의 공식 지원 없이 A100에서 FP6을 실행하기 시작했습니다. 테스트 결과에 따르면 A100에 대한 새로운 방법 TC-FPx의 FP6 양자화는 INT4에 가깝거나 때로는 더 빠르며 후자보다 정확도가 더 높은 것으로 나타났습니다. 또한 오픈 소스로 제공되고 DeepSpeed와 같은 딥 러닝 추론 프레임워크에 통합된 엔드투엔드 대규모 모델 지원도 있습니다. 이 결과는 대형 모델 가속화에도 즉각적인 영향을 미칩니다. 이 프레임워크에서는 단일 카드를 사용하여 Llama를 실행하면 처리량이 듀얼 카드보다 2.65배 더 높습니다. 하나

70B 모델은 몇 초 안에 1,000개의 토큰을 생성하고 코드 재작성은 OpenAI가 투자한 코드 아티팩트인 Cursor 팀의 GPT-4o를 능가합니다. 70B 모델은 몇 초 안에 1,000개의 토큰을 생성하고 코드 재작성은 OpenAI가 투자한 코드 아티팩트인 Cursor 팀의 GPT-4o를 능가합니다. Jun 13, 2024 pm 03:47 PM

70B 모델에서는 1000개의 토큰을 몇 초 만에 생성할 수 있으며 이는 거의 4000자로 변환됩니다! 연구진은 Llama3를 미세 조정하고 가속 알고리즘을 도입하여 기본 버전과 비교하여 속도가 13배 빨라졌습니다. 속도가 빠를 뿐만 아니라 코드 재작성 작업 성능도 GPT-4o를 능가합니다. 이 성과는 인기 있는 AI 프로그래밍 아티팩트인 Cursor를 개발한 팀과 OpenAI도 투자에 참여한 anysphere에서 이루어졌습니다. 빠른 추론 가속 프레임워크로 잘 알려진 Groq에서는 70BLlama3의 추론 속도가 초당 300개 토큰이 조금 넘는다는 사실을 아셔야 합니다. Cursor의 속도 덕분에 거의 즉각적인 완전한 코드 파일 편집이 가능하다고 할 수 있습니다. 어떤 사람들은 좋은 사람이라고 커스를 넣으면

AI 스타트업들이 집단적으로 OpenAI로 직무를 전환했고, Ilya가 떠난 후 보안팀이 재편성되었습니다! AI 스타트업들이 집단적으로 OpenAI로 직무를 전환했고, Ilya가 떠난 후 보안팀이 재편성되었습니다! Jun 08, 2024 pm 01:00 PM

지난주 내부 사퇴와 외부 비판의 물결 속에서 OpenAI는 대내외적 난관에 봉착했다. - 미망인 여동생의 침해로 글로벌 열띤 논의가 촉발됐다. - '대군주 조항'에 서명한 직원들이 잇달아 폭로됐다. - 네티즌들은 울트라맨의 '' 일곱 가지 대죄" ” 소문 파기: Vox가 입수한 유출된 정보와 문서에 따르면 Altman을 포함한 OpenAI의 고위 경영진은 이러한 지분 회수 조항을 잘 알고 있었고 이에 서명했습니다. 또한 OpenAI가 직면한 심각하고 시급한 문제인 AI 보안이 있습니다. 최근 가장 눈에 띄는 직원 2명을 포함해 보안 관련 직원 5명이 퇴사하고, '슈퍼얼라인먼트' 팀이 해체되면서 OpenAI의 보안 문제가 다시 한 번 주목을 받고 있다. 포춘지는 OpenA가

See all articles