Я новичок в GLSL. Итак, я прохожу учебник в Интернете .
В учебном примере есть пример, называемый Flatten Shader, который отображает чайник GLUT в виде чайника Flatten. Вот ссылка на Flatten Shader .
Я сделал все точно так же, как шаги, упомянутые в учебнике, но мой чайник не плоский, как выглядит чайник в учебнике. Это выглядит как обычный чайник.
Вот код для вершинного шейдера:
void main()
{
vec4 v = vec4(gl_Vertex);
v.z = 0.0;
gl_Position = gl_ModelViewProjectionMatrix * v;
}
Вот мой фрагментный шейдер:
void main()
{
gl_FragColor = gl_Color;
}
А вот как я рисую Чайник:
void display ( void )
{
glClearDepth(1.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
gluLookAt( 0.0, 0.0, 2.0,
0.0, 0.0, 0.0,
0.0, 1.0, 0.0
);
glMultMatrixd(trackball->getRotation());
const GLfloat diffuseIntensity[] = { 0.8, 0.4, 0.4, 1.0 };
const GLfloat specularIntensity[] = { 0.5, 0.5, 0.5, 1.0 };
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, diffuseIntensity);
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specularIntensity);
glMaterialf( GL_FRONT_AND_BACK, GL_SHININESS, 5.0 );
glutSolidTeapot(1.0);
glutSwapBuffers();
}
Хотя предполагается, что он «плоский», отображаемый чайник похож на обычный чайник. Если вы считаете, что я пропустил некоторые начальные этапы настройки / настройки, то не делайте этого, потому что я их уже сделал:
GLuint createShader ( const GLchar* const source, GLenum type )
{
GLuint shader = glCreateShader( type );
glShaderSource( shader, 1, const_cast<const GLchar**>(&source), 0 );
glCompileShader( shader );
return shader;
}
и
GLuint createProgram ( const GLuint shader )
{
GLuint program = glCreateProgram();
glAttachShader(program, shader);
glLinkProgram(program);
return program;
}
А вот где все собирается вместе:
GLuint vertexShader = createShader(vertexShaderSource, GL_VERTEX_SHADER);
GLuint fragmentShader = createShader(fragmentShaderSource, GL_FRAGMENT_SHADER);
GLuint vertexShaderProgram = createProgram(vertexShader);
GLuint fragmentShaderProgram = createProgram(fragmentShader);
glUseProgram(vertexShaderProgram);
glUseProgram(fragmentShaderProgram);
Я не знаю, что пошло не так. Пожалуйста, помогите!