Xcode+Opengl學習(8)高級——使用自己的着色器

利用GLSL
我的Xcode版本version130打不開,所以改了.vp和.fp文件

  1. .vp
#version 120
attribute vec4 vColor;
attribute vec4 vVertex;

varying vec4 vVaryingColor;
void main(void)
{
vVaryingColor = vColor;
gl_Position = vVertex;
}

  1. .fp
#version 120
varying vec4 vVaryingColor;

void main(void)
{
gl_FragColor = vVaryingColor;
}
#include<GLTools.h>
#include<GLShaderManager.h>
#include<GLUT/GLUT.h>

GLBatch triangleBatch;
GLShaderManager shaderManager;

GLint myIdentityShader;

void ChangeSize(int w,int h)
{
    glViewport(0,0,w,h);
}

void SetupRC()
{
    glClearColor(0.0f,0.0f,0.0f,1.0f);
    
    shaderManager.InitializeStockShaders();
    
    GLfloat vVertes[]={-0.5f,0.0f,0.0f,
                       0.5f,0.0f,0.0f,
                       0.0f,0.5f,0.0f};
    GLfloat vColors[]{1.0f, 0.0f, 0.0f, 1.0f,
                      0.0f, 1.0f, 0.0f, 1.0f,
                      0.0f, 0.0f, 1.0f, 1.0f};
    
    triangleBatch.Begin(GL_TRIANGLES,3);
    triangleBatch.CopyVertexData3f(vVertes);
    triangleBatch.CopyColorData4f(vColors);
    triangleBatch.End();
    
    myIdentityShader=gltLoadShaderPairWithAttributes("/Users/mac/Downloads/1/ShadedIdentity.vp","/Users/mac/Downloads/1/ShadedIdentity.fp",2,GLT_ATTRIBUTE_VERTEX,"vVertex",GLT_ATTRIBUTE_COLOR,"vColor");
}

void ShutdownRC()
{
    glDeleteProgram(myIdentityShader);
}

void RenderScene(void)
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);
    
    glUseProgram(myIdentityShader);
    triangleBatch.Draw();
    
    glutSwapBuffers();
}

int main(int argc, char* argv[])
{
    gltSetWorkingDirectory(argv[0]);
    
    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_DEPTH|GLUT_STENCIL);
    glutInitWindowSize(800,600);
    glutCreateWindow("Shaded Triangle");
    glutReshapeFunc(ChangeSize);
    glutDisplayFunc(RenderScene);
    
    GLenum err = glewInit();
    if (GLEW_OK != err) {
        fprintf(stderr, "GLEW Error: %s\n", glewGetErrorString(err));
        return 1;
    }
    
    SetupRC();
    glutMainLoop();
    ShutdownRC();
    
    return 0;
}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章