2016-11-20 81 views
0

所以我还是用OpenGL新手,我用这个教程作为参考glColor不改变其他三角形的颜色在OpenGL

https://www.youtube.com/watch?v=8p76pJsUP44

我现在想画一组4个三角形是由一个平方(这是我的项目转让),这是我的代码

#include <Windows.h> 
#include <GL\glew.h> 
#include <GL\freeglut.h> 
#include <iostream> 

using namespace std; 

void changeViewPort(int w, int h) 
{ 
    glViewport(0, 0, w, h); 
} 


void draw() { 
    glBegin(GL_TRIANGLES); 

     glColor3f(0.0, 0.0, 255.0); 
     glVertex3f(0.0, 0.0, 0.0); // top triangle 
     glVertex3f(-1.0,1.0, 0.0); 
     glVertex3f(1.0, 1.0, 0.0); 

     glColor3f(50.0, 50.0, 255.0); 
     glVertex3f(0.0, 0.0, 0.0); // right triangle 
     glVertex3f(1.0, 1.0, 0.0); 
     glVertex3f(1.0, -1.0, 0.0); 

     glColor3f(75.0, 75.0, 255.0); 
     glVertex3f(0.0, 0.0, 0.0);//bottom triangle 
     glVertex3f(1.0, -1.0, 0.0); 
     glVertex3f(-1.0, -1.0, 0.0); 

     glColor3f(50.0, 50.0, 255.0); 
     glVertex3f(0.0, 0.0, 0.0); //left triangle 
     glVertex3f(-1.0, -1.0, 0.0); 
     glVertex3f(-1.0, 1.0, 0.0); 
     glEnd(); 
} 

void render() 
{ 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    draw(); 
    glutSwapBuffers(); 
} 




int main(int argc, char* argv[]) { 

    // Initialize GLUT 
    glutInit(&argc, argv); 
    // Set up some memory buffers for our display 
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH); 
    // Set the window size 
    glutInitWindowSize(350, 300); 
    // Create the window with the title "Hello,GL" 
    glutCreateWindow("Hello, GL"); 
    // Bind the two functions (above) to respond when necessary 
    glutReshapeFunc(changeViewPort); 
    glutDisplayFunc(render); 
    //glutDisplayFunc(draw); 

    // Very important! This initializes the entry points in the OpenGL driver so we can 
    // call all the functions in the API. 
    GLenum err = glewInit(); 
    if (GLEW_OK != err) { 
     fprintf(stderr, "GLEW error"); 
     return 1; 
    } 


    glutMainLoop(); 
    return 0; 
} 

通知,在我的绘制函数,我只是想为Cr吃掉4个不同的蓝色不同的三角形。 然而,每当执行该代码,只有最上面的三角形是蓝色的,而其余保持白色

有谁知道为什么这难道不工作?我甚至试图创建一个for循环版本绘制函数的,但它也没有工作

void draw() { 
    double x = 1.0; 
    double y = 1.0; 
    double coords[8] = { -x,y,x,y,x,-y,-x,-y }; 

    for (int i = 0; i < 7; i=i+2) { // i = [0,2,4,6] 
     switch (i) { 
     case 0: 
      glColor3f(0, 0, 255); 
      break; 
     case 2: 
      glColor3f(50, 50, 255); 
      break; 
     case 4: 
      glColor3f(75, 75, 255); 
      break; 
     case 6: 
      glColor3f(50, 50, 255); 
      break; 
     } 

     if (i == 6) { //4th and 1st coordinate 
      glBegin(GL_TRIANGLES); 
      glVertex3f(0.0, 0.0, 0.0); 
      glVertex3f(coords[i], coords[i + 1], 0.0); 
      glVertex3f(coords[0], coords[1], 0.0); 
      glEnd(); 
     } 
     else { 
      glBegin(GL_TRIANGLES); 
      glVertex3f(0.0, 0.0, 0.0); 
      glVertex3f(coords[i], coords[i + 1], 0.0); 
      glVertex3f(coords[i + 2], coords[i + 3], 0.0); 
      glEnd(); 
     } 

    } 


} 

回答

2

glColor3f需要颜色分量在[0,1]的范围作为输入,而不是[0,255]作为当前使用的。

+0

我看到非常感谢!这工作! –