笔记:OpenGL SuperBible - First Triangle
2014-10-05 15:31
459 查看
gl_VertexID:
the index of the vertex that is being processed at the time, a special input to the vertex shader.
The gl_VertexIDinput
starts counting from the value given by the1st para ofglDrawArrays()and
counts upwards one vertex at a time forcountvertices (the 3rd para
of glDrawArrays())
built-in variable.
We can use this index to assign adifferent position to each vertex
modify our rendering function to passGL_TRIANGLESto
glDrawArrays()instead of
GL_POINTS:
REFERENCE: Ch1, OpenGL SB 6th
附:
P.S. 原本按照教材上的代码,编译是通过的,但是图形始终没有显示。于是考虑应为shader那里的问题。在学习之前运行教材配备的代码时,就遇到这个情况,有一些程序能够正常运行,有一些则没有任何显示。于是我再去看了可以正确显示结果的代码,发现它们的那个OpenGL版本是写到version 410而非430(430那些的都无法正确运行)。因此,我将version 430 改为
410 就OK了。
the index of the vertex that is being processed at the time, a special input to the vertex shader.
The gl_VertexIDinput
starts counting from the value given by the1st para ofglDrawArrays()and
counts upwards one vertex at a time forcountvertices (the 3rd para
of glDrawArrays())
built-in variable.
We can use this index to assign adifferent position to each vertex
#version 430 core void main(void) { // Declare a hard-coded array of positions const vec4 vertices[3] = vec4[3](vec4( 0.25, -0.25, 0.5, 1.0), vec4(-0.25, -0.25, 0.5, 1.0), vec4( 0.25, 0.25, 0.5, 1.0)); // Index into our array using gl_VertexID gl_Position = vertices[gl_VertexID]; }
modify our rendering function to passGL_TRIANGLESto
glDrawArrays()instead of
GL_POINTS:
// Our rendering function void render(double currentTime) { const GLfloat color[] = { 0.0f, 0.2f, 0.0f, 1.0f }; glClearBufferfv(GL_COLOR, 0, color); // Use the program object we created earlier for rendering glUseProgram(rendering_program); // Draw one triangle glDrawArrays(GL_TRIANGLES, 0, 3); }
REFERENCE: Ch1, OpenGL SB 6th
附:
P.S. 原本按照教材上的代码,编译是通过的,但是图形始终没有显示。于是考虑应为shader那里的问题。在学习之前运行教材配备的代码时,就遇到这个情况,有一些程序能够正常运行,有一些则没有任何显示。于是我再去看了可以正确显示结果的代码,发现它们的那个OpenGL版本是写到version 410而非430(430那些的都无法正确运行)。因此,我将version 430 改为
410 就OK了。
GLuint compile_shaders(void) { GLuint vertex_shader; GLuint fragment_shader; GLuint program; // Source code for vertex shader static const GLchar * vertex_shader_source[] = { "#version 410 core \n" " \n" "void main(void) \n" "{ \n" "const vec4 vertices[3] = vec4[3](vec4( 0.25, -0.25, 0.5, 1.0), \n" " vec4(-0.25, -0.25, 0.5, 1.0), \n" " vec4( 0.25, 0.25, 0.5, 1.0)); \n" //" gl_Position = vec4(0.0, 0.0, 0.5, 1.0); \n" " gl_Position = vertices[gl_VertexID]; \n" "} \n" }; // Source code for fragment shader static const GLchar * fragment_shader_source[] = { "#version 410 core \n" " \n" "out vec4 color; \n" " \n" "void main(void) \n" "{ \n" " color = vec4(0.0, 0.8, 1.0, 1.0); \n" "} \n" }; // Create and compile vertex shader vertex_shader = glCreateShader(GL_VERTEX_SHADER); glShaderSource(vertex_shader, 1, vertex_shader_source, NULL); glCompileShader(vertex_shader); // Create and compile fragment shader fragment_shader = glCreateShader(GL_FRAGMENT_SHADER); glShaderSource(fragment_shader, 1, fragment_shader_source, NULL); glCompileShader(fragment_shader); // Create program, attach shaders to it, and link it program = glCreateProgram(); glAttachShader(program, vertex_shader); glAttachShader(program, fragment_shader); glLinkProgram(program); // Delete the shaders as the program has them now glDeleteShader(vertex_shader); glDeleteShader(fragment_shader); return program; }
<p style="margin-top: 0px; margin-bottom: 0px; font-size: 11px; font-family: Menlo;"><pre name="code" class="cpp">... // Our rendering function void render(double currentTime) { const GLfloat color[] = { 0.0f, 0.2f, 0.0f, 1.0f }; glClearBufferfv(GL_COLOR, 0, color); // Use the program object we created earlier for rendering glUseProgram(rendering_program); // Draw one triangle glDrawArrays(GL_TRIANGLES, 0, 3); }
...
相关文章推荐
- 笔记:OpenGL SuperBible - overview
- OpenGL super bible(5th) 学习笔记 -- 像素缓冲区对象(PBO)
- 笔记:OpenGL SuperBible - First Program
- 笔记:OpenGL SuperBible - Intro
- 笔记:OpenGL SuperBible - Tessellation
- 笔记:OpenGL SuperBible - Shaders
- OpenGL super bible(5th) 学习笔记 -- 缓冲区
- OpenGL SUPERBIBLE Fifth Edition 学习笔记1
- OpenGL SuperBible阅读笔记
- 笔记:OpenGL SuperBible - Shaders 2
- opengl super bible(超级宝典)第五版阅读笔记
- OpenGL SuperBible
- OpenGL SuperBible --- 第三节:使用辅助库来学习OpenGL
- 《OpenGL 超级宝典(Super Bible)第五版》 有关 PBO 的 Example
- openGL SuperBible 7th 初编译
- 学习OpenGL超级宝典(OpenGL superbible)的第一个程序
- OpenGL Superbible 7 03 Following the Pipeline
- opengl superbible第一个程序
- 《OpenGL 超级宝典(Super Bible)第七版》 有关 PBO 的 Example
- opengl super bible 方块动画的改进代码