簡體   English   中英

OpenGL ES2彩色三角形

[英]OpenGL ES2 coloured triangle

我正在嘗試在opengl es 2中創建基本三角形,但是無論我做什么,它似乎都無法正常工作。我得到的只是一個白色三角形。 但是,我認為在鏈接程序時可能會出現問題(也就是說,我已禁用返回檢查“ if”的鏈接,否則它將根本無法運行)。 另外,當我在控制台上運行時,我得到的輸出是“錯誤:1281”。 我的代碼:

int loadShader(int type, char * shaderCode)
{
    int length = strlen(shaderCode);

    int shader = glCreateShader(type);
    glShaderSource(shader, 1, (const char **) &shaderCode, NULL);
    glCompileShader(shader);

    return shader;
}

// Initializes the application data
int Init(void) 
{
    // Vertex shaders
    char * vertexShaderCode = 
        "attribute vec4 vPosition; \n" 
        "void main() {             \n" 
        " gl_Position = vPosition; \n"  
        "}                         \n";

    char * fragmentShaderCode = 
        "precision mediump float;                 \n"
        "void main() {                            \n"
        " gl_FragColor = vec4(0.5, 0.5, 0.5, 1.0);\n"
        "}                                        \n";

    GLuint vertexShader = loadShader(GL_VERTEX_SHADER, vertexShaderCode);
    GLuint fragmentShader = loadShader(GL_FRAGMENT_SHADER, fragmentShaderCode);
    GLint linked;

    program = glCreateProgram();

    glAttachShader(program, vertexShader);
    glAttachShader(program, fragmentShader);
    glBindAttribLocation(program, 0, "vPosition");
    glLinkProgram(program);

    glGetProgramiv(program, GL_LINK_STATUS, &linked);

    if(!linked)
    {
       GLint infoLen = 0;
       glGetProgramiv(program, GL_INFO_LOG_LENGTH, &infoLen);
       if(infoLen > 1)
       {
          char* infoLog = (char *) malloc(sizeof(char) * infoLen);
          glGetProgramInfoLog(program, infoLen, NULL, infoLog);
          free(infoLog);
       }
       glDeleteProgram(program);
       //return 0;
    }

    // Basic GL setup
    glClearColor    (0.0, 0.0, 0.0, 1.0);

    return GL_TRUE;
}



// Main-loop workhorse function for displaying the object
void Display(void)
{
    // Clear the screen
    glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glClearColor(0.0, 0.0, 0.0, 1.0);   


    GLfloat vertices[] = {
        -0.5f, 0.0f, -1.0f,
        0.0f, 1.0f, -1.0f,
        0.5f, 0.0f, -1.0f,
    };

    GLfloat colors[] = {
        0.0f, 0.0f, 1.0f, 1.0f,
        0.0f, 1.0f, 0.0f, 1.0f,
        1.0f, 0.0f, 0.0f, 1.0f,
    };


    glUseProgram(program);


    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, vertices);
    glEnableVertexAttribArray(0);


    glVertexAttribPointer(1, 4, GL_FLOAT, GL_FALSE, 0, colors);
    glEnableVertexAttribArray(1);

    glDrawArrays(GL_TRIANGLES,  0, 3);
}

首先啟用頂點attrib數組,然后傳遞指針...

glEnableVertexAttribArray(0);    
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, vertices);

glDrawArrays(GL_TRIANGLES,  0, 3);

另外,您正在“ 1”屬性數組中發送顏色,但着色器中沒有這樣的屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM