相反的glColor3ub(red, green, blue)
,请尝试使用glColor3ub(rand()%255, rand()%255, rand()%255)
。
用法:
glBegin(GL_TRIANGLES);
for(int j = 0; j< triangles.size(); j++ )
{
glColor3ub(rand()%255, rand()%255, rand()%255);
//normalize the triangles first
triangles[j][0].normalize();
triangles[j][1].normalize();
triangles[j][2].normalize();
//call to draw vertices
glVertex3f((GLfloat)triangles[j][0].getX(),(GLfloat)triangles[j][0].getY(),
(GLfloat)triangles[j][0].getZ());
glVertex3f((GLfloat)triangles[j][1].getX(),(GLfloat)triangles[j][1].getY(),
(GLfloat)triangles[j][1].getZ());
glVertex3f((GLfloat)triangles[j][2].getX(),(GLfloat)triangles[j][2].getY(),
(GLfloat)triangles[j][2].getZ());
}
glEnd();
编辑:生成,存储和渲染:
#include <GL/glut.h>
#include <vector>
using namespace std;
struct Vertex
{
Vertex(bool random = false)
{
x = y = z = 0;
r = g = b = a = 0;
if(random)
{
x = rand() % 20 - 10;
y = rand() % 20 - 10;
z = rand() % 20 - 10;
r = rand() % 255;
g = rand() % 255;
b = rand() % 255;
a = 1;
}
}
float x, y, z;
unsigned char r, g, b, a;
};
vector<Vertex> verts;
void init()
{
// fill verts array with random vertices
for(size_t i = 0; i < 100; ++i)
{
verts.push_back(Vertex(true));
verts.push_back(Vertex(true));
verts.push_back(Vertex(true));
}
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-10, 10, -10, 10, -1, 1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
// enable vertex and color arrays
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
// set vertex and color pointers
glVertexPointer(3, GL_FLOAT, sizeof(Vertex), &verts[0].x);
glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(Vertex), &verts[0].r);
// draw verts array
glDrawArrays(GL_TRIANGLES, 0, verts.size());
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
glFlush();
glutSwapBuffers();
}
void reshape(int w, int h)
{
glViewport(0, 0, w, h);
}
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE);
glutInitWindowSize(800,600);
glutCreateWindow("Demo");
glutDisplayFunc(display);
glutReshapeFunc(reshape);
init();
glutMainLoop();
return 0;
}
你介意发布结果的屏幕截图吗?另外,你有纹理活动,任何着色器,任何照明等? – nonVirtualThunk
我没有激活任何。我添加了当前结果的屏幕截图。 – mma1480