⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 GLSL tutorial with sourcecode
💻 CPP
字号:
// ************************************************
// Tutorial 10: Toon Shading
//
// (c) 2003 by Martin Christen.
// ************************************************

#include "../cwc/aGLSL.h"
#include "../cwc/simpleGL.h"
#include <GL/glut.h>
#include <iostream>
//#include <GL/glext.h>


using namespace std;

#define FRAG_FILE "tutorial10.frag"
#define VERT_FILE "tutorial10.vert"

void ToonColor(int preset);

// GLobals:
aShaderObject* myShader = 0;  


//*************************************************************
// Draw a primitive (Torus) at x,y,z
int deg =0; // little animation
void primitive(float x, float y, float z)
{
   glPushMatrix();
   glTranslatef(x,y,z);
   glRotatef(deg++,1.0,x,y); if (deg > 359) deg = 0;  // #todo time-based
   glutSolidTorus(0.2,0.5,32,32);
   glPopMatrix();
}




//*************************************************************
//Draw one Frame (don't Swap Buffers)

void DrawFrame(void)
{   
   myShader->begin();
   ToonColor(0); primitive(2.0,  0.0, 0.0);
   ToonColor(1); primitive(-2.0, 0.0, 0.0);
   ToonColor(2); primitive(0.0,  2.0, 0.0);
   ToonColor(3); primitive(0.0, -2.0, 0.0);
   ToonColor(4); primitive(0.0,  0.0, 2.0);
   ToonColor(5); primitive(0.0,  0.0, -2.0);
   ToonColor(6); glutSolidTeapot(1.0);
   myShader->end(); 
}


void AppInit(void)
{ 
  glClearColor(1.0f, 1.0f, 1.0f, 0.0f);

  // Load Shaders
  myShader = DefaultShaderSetup(VERT_FILE, FRAG_FILE);

  // OpenGL Settings
  
  DefaultLighting();
}

//*************************************************************
// use App Exit to clean up
void AppExit(void)
{
  DefaultCleanup();
}

//*************************************************************
// send a Color Setup to Fragment Program (0-6)
void ToonColor(int preset)
{
    switch (preset)
    {
        case 0: // red default
              myShader->sendUniform4f("color0",0.8,0.0,0.0,1.0);
              myShader->sendUniform4f("color1",0.0,0.0,0.0,1.0);
              myShader->sendUniform4f("color2",0.8,0.0,0.0,1.0);
              break;

        case 1:
              myShader->sendUniform4f("color0",0.0,0.8,0.0,1.0);
              myShader->sendUniform4f("color1",0.0,0.0,0.0,1.0);
              myShader->sendUniform4f("color2",0.0,0.8,0.0,1.0);
              break;
        case 2:
              myShader->sendUniform4f("color0",0.0,0.0,0.8,1.0);
              myShader->sendUniform4f("color1",0.0,0.0,0.0,1.0);
              myShader->sendUniform4f("color2",0.0,0.0,0.8,1.0);
              break;
        case 3:
              myShader->sendUniform4f("color0",0.8,0.0,0.8,1.0);
              myShader->sendUniform4f("color1",0.0,0.0,0.0,1.0);
              myShader->sendUniform4f("color2",0.8,0.0,0.8,1.0);
              break;
        case 4:
              myShader->sendUniform4f("color0",0.8,0.8,0.0,1.0);
              myShader->sendUniform4f("color1",0.0,0.0,0.0,1.0);
              myShader->sendUniform4f("color2",0.8,0.8,0.0,1.0);
              break;
        case 5:
              myShader->sendUniform4f("color0",0.0,0.8,0.8,1.0);
              myShader->sendUniform4f("color1",0.0,0.0,0.0,1.0);
              myShader->sendUniform4f("color2",0.0,0.8,0.8,1.0);
              break;
        case 6:
             myShader->sendUniform4f("color0",0.5,0.5,0.5,1.0);
             myShader->sendUniform4f("color1",0.3,0.3,0.3,1.0);
             myShader->sendUniform4f("color2",0.6,0.6,0.6,1.0);
             break;


    }
}
//END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -