OpenGL着色器(二)
来源:互联网 发布:局域网qq监控软件 编辑:程序博客网 时间:2024/06/05 04:01
ProvokingVertex.vp
// ProvokingVertex flat shader demo// Vertex Shader// Richard S. Wright Jr.// OpenGL SuperBible#version 130in vec4 vColor;in vec4 vVertex;flat out vec4 vVaryingColor;void main(void) { vVaryingColor = vColor; gl_Position = vVertex; }
ProvokingVertex.fp
// ProvokingVertex flat shader demo// Fragment Shader// Richard S. Wright Jr.// OpenGL SuperBible#version 130out vec4 vFragColor;flat in vec4 vVaryingColor;void main(void) { vFragColor = vVaryingColor; }
ProvokingVertex.cpp
// ProvokingVertex.cpp// Our first OpenGL program that will just draw a triangle on the screen.#include <GLTools.h> // OpenGL toolkit#include <GLShaderManager.h> // Shader Manager Class#ifdef __APPLE__#include <glut/glut.h> // OS X version of GLUT#else#define FREEGLUT_STATIC#include <GL/glut.h> // Windows FreeGlut equivalent#endifGLBatchtriangleBatch;GLShaderManagershaderManager;GLintmyIdentityShader;///////////////////////////////////////////////////////////////////////////////// Window has changed size, or has just been created. In either case, we need// to use the window dimensions to set the viewport and the projection matrix.void ChangeSize(int w, int h) {glViewport(0, 0, w, h); }///////////////////////////////////////////////////////////////////////////////// This function does any needed initialization on the rendering context. // This is the first opportunity to do any OpenGL related tasks.void SetupRC(){// Blue backgroundglClearColor(0.0f, 0.0f, 0.0f, 1.0f ); shaderManager.InitializeStockShaders();// Load up a triangleGLfloat vVerts[] = { -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(vVerts);triangleBatch.CopyColorData4f(vColors);triangleBatch.End();myIdentityShader = gltLoadShaderPairWithAttributes("ProvokingVertex.vp", "ProvokingVertex.fp", 2, GLT_ATTRIBUTE_VERTEX, "vVertex", GLT_ATTRIBUTE_COLOR, "vColor");glProvokingVertex(GL_FIRST_VERTEX_CONVENTION);}///////////////////////////////////////////////////////////////////////////////// Cleanupvoid ShutdownRC() { glDeleteProgram(myIdentityShader); }///////////////////////////////////////////////////////////////////////////////// Called to draw scenevoid RenderScene(void){// Clear the window with current clearing colorglClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);glUseProgram(myIdentityShader);triangleBatch.Draw();// Perform the buffer swap to display back bufferglutSwapBuffers();}int nToggle = 1;void KeyPressFunc(unsigned char key, int x, int y){if(key == 32){nToggle++;if(nToggle %2 == 0) {glProvokingVertex(GL_LAST_VERTEX_CONVENTION);glutSetWindowTitle("Provoking Vertex - Last Vertex - Press Space Bars");}else {glProvokingVertex(GL_FIRST_VERTEX_CONVENTION);glutSetWindowTitle("Provoking Vertex - First Vertex - Press Space Bars");}glutPostRedisplay();}} ///////////////////////////////////////////////////////////////////////////////// Main entry point for GLUT based programsint main(int argc, char* argv[]){gltSetWorkingDirectory(argv[0]);glutInit(&argc, argv);glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL);glutInitWindowSize(800, 600);glutCreateWindow("Provoking Vertex - First Vertex - Press Space Bars"); glutReshapeFunc(ChangeSize); glutDisplayFunc(RenderScene);glutKeyboardFunc(KeyPressFunc);GLenum err = glewInit();if (GLEW_OK != err) {fprintf(stderr, "GLEW Error: %s\n", glewGetErrorString(err));return 1;}SetupRC();glutMainLoop();ShutdownRC();return 0;}
0 0
- OpenGL着色器(二)
- OpenGL 动态波纹效果(着色器)
- openGL着色器学习(一)
- Opengl(四)——着色器
- OpenGL基础教程(2):着色器
- OpenGL 着色器语言
- OpenGL着色器语言
- opengl顶点着色器
- OpenGL ES 着色器
- OpenGL着色器介绍
- 【OpenGL】着色器 Shader
- OpenGL--着色器
- OpenGL--着色器2
- OpenGL 着色器基础
- OpenGL ES着色器语言之变量和数据类型(二)(官方文档第四章)
- OpenGL ES着色器语言之变量和数据类型(二)(官方文档第四章)
- OpenGL ES着色器语言之变量和数据类型(二)
- OpenGL(二十四) VAO、VBO和着色器使用示例
- 使用php判断浏览器的类型和语言的函数代码
- Maximum FPS: Three Tips for Faster Code
- Linux系统下安装rz/sz命令及使用说明
- Spring与Struts集成笔记
- 20个超实用的JavaScript技巧及最佳实践(上)
- OpenGL着色器(二)
- shoelace源代码分析之bootlace
- CodeForces Good Bye 2013
- 服务器-apache-common-httpclient测试
- HTML5实战与剖析之自定义数据属性(dataset)
- php xmlrpc的简单实用
- 电子商务马志伟C#实验报告
- js 读取cookie 添加 删除
- 加载性能优化ViewHolder