笔记:OpenGL SuperBible - First Triangle
来源:互联网 发布:java免费视频教程 编辑:程序博客网 时间:2024/05/21 08:55
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
#version 430 corevoid main(void) { // Declare a hard-coded array of positionsconst 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_TRIANGLEStoglDrawArrays()instead ofGL_POINTS:
// Our rendering functionvoid 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); }
...
0 0
- 笔记:OpenGL SuperBible - First Triangle
- 笔记:OpenGL SuperBible - First Program
- 笔记:OpenGL SuperBible - overview
- 笔记:OpenGL SuperBible - Intro
- 笔记:OpenGL SuperBible - Shaders
- 笔记:OpenGL SuperBible - Tessellation
- OpenGL SuperBible阅读笔记
- 笔记:OpenGL SuperBible - Shaders 2
- OpenGL Superbible 7 02 Our First OpenGL Program
- OpenGL SuperBible
- OpenGL SUPERBIBLE Fifth Edition 学习笔记1
- OpenGL教程翻译 第三课 First Triangle
- OpenGL Tutorial 2 : The first triangle
- opengl superbible第一个程序
- OpenGL Superbible 7 01 Introduction
- Opengl SuperBible 7th摘抄
- openGL SuperBible 7th 初编译
- OpenGL SuperBible 7th源码编译记录
- 【axure手机原型】移动应用原型设计新手引导
- 将KEEL源代码打包成jar包
- hdu 1856
- 安装Sitescope老是提示重启解决方案
- 最简单的基于FFmpeg的推流器(以推送RTMP为例)
- 笔记:OpenGL SuperBible - First Triangle
- 优先队列
- 瀑布流(UIScrollView实现)
- HP-Mercury SiteScope安装及监控Weblogic操作
- 如何区分新闻的核心词和龙套词
- AFNetworking源码之Serialization模块
- Ways to uninstall software
- HyperLink的绑定用法
- 我与C++设计模式(十五)——观察者模式