Esempio n. 1
0
void drawcube() {
	int pt[][3] = { { 10, 10, 10 }, { 10, -10, 10 }, { -10, -10, 10 }, { -10, 10, 10 },
	{ 10, 10, -10 }, { 10, -10, -10 }, { -10, -10, -10 }, { -10, 10, -10 } };

	int face[][4] = { { 0, 3, 2, 1 }, { 3, 7, 6, 2 }, { 7, 4, 5, 6 }, { 4, 0, 1, 5 }, { 0, 4, 7, 3 }, { 1, 2, 6, 5 } };
	float norm[][3] = { { 0, 0, 1.0 }, { -1.0, 0, 0 }, { 0, 0, -1.0 }, { 1.0, 0, 0 }, { 0, 1.0, 0 }, { 0, -1.0, 0 } };
	int i;
	GLfloat mat_ambient[] = { 0.0215, 0.1745, 0.0215, 1.0 };
	GLfloat mat_diffuse[] = { 0.0757, 0.6142, 0.1757, 1.0 };
	GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 };
	GLfloat mat_shininess[] = { 77.0 };

	glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
	glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
	glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
	glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);

	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	glMatrixMode(GL_MODELVIEW);
	glRotatef(global.angle[X], 1.0, 0.0, 0.0);
	glRotatef(global.angle[Y], 0.0, 1.0, 0.0);
	glRotatef(global.angle[Z], 0.0, 0.0, 1.0);

	for (i = 0; i < 6; ++i) {
		glNormal3fv(norm[i]);
		glBegin(GL_POLYGON);
		glVertex3iv(pt[face[i][0]]);
		glVertex3iv(pt[face[i][1]]);
		glVertex3iv(pt[face[i][2]]);
		glVertex3iv(pt[face[i][3]]);
		glEnd();
	}
	glutSwapBuffers();
}
Esempio n. 2
0
void draw_triangle(GLint a[], GLint b[], GLint c[]) {
	glBegin(GL_TRIANGLES);
	glVertex3iv(a);
	glVertex3iv(b);
	glVertex3iv(c);
	glEnd();
}
Esempio n. 3
0
void Mesh::render(const vec3b& color, bool texturing, bool selected) const {
  bool use_texture = texturing && !tex_coord.empty();

  glEnable(GL_NORMALIZE);
  glEnable(GL_LIGHTING);

  if (use_texture) {
    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D, texture_id);
  }

  auto& mesh = *this;

  auto triangles = mesh.triangles;
  triangles << top_cover.triangles;
  triangles << bottom_cover.triangles;
  glBegin(GL_TRIANGLES);
  for (auto& tri : triangles) {
    if (selected) glColor3ub(255, 0, 0);
    else if (use_texture) glColor3ub(255, 255, 255);
    else glColor3ubv(color.coords);

    glNormal3dv(tri.normal.coords);
    if (use_texture) glTexCoord2dv(tex(tri[0]).coords);
    glVertex3iv(mesh[tri[0]].coords);

    glNormal3dv(tri.normal.coords);
    if (use_texture) glTexCoord2dv(tex(tri[1]).coords);
    glVertex3iv(mesh[tri[1]].coords);

    glNormal3dv(tri.normal.coords);
    if (use_texture) glTexCoord2dv(tex(tri[2]).coords);
    glVertex3iv(mesh[tri[2]].coords);
  }
  glEnd();

  if (use_texture) {
    glDisable(GL_TEXTURE_2D);
  }

  glDisable(GL_LIGHTING);
  glDisable(GL_NORMALIZE);

#ifndef NDEBUG
  if (selected && use_texture) {
    glLineWidth(5);
    glColor3d(1, 0, 0);
    glBegin(GL_LINE_STRIP);
    for(auto &e: anchor_points) glVertex2iv(e[0].coords);
    glEnd();
    glBegin(GL_LINE_STRIP);
    for (auto &e: anchor_points) glVertex2iv(e[1].coords);
    glEnd();
    glLineWidth(1);
  }
#endif
  glColor3d(1, 1, 1);
}
Esempio n. 4
0
// I thought about making a lookup table for this, but it would involve an STL map of STL vectors
// and some weird function casts, so I'm doing it the naive way instead.
void GeomRenderer::sendVertex(GLuint vertexIndex)
{
    assert(vertexData.size >= 2 && vertexData.size <= 4);

    switch(vertexData.type)
    {
        case GL_SHORT:
            if (vertexData.size == 2) glVertex2sv((const GLshort*)((const char*)vertexData.pointer + vertexIndex*vertexData.stride));
            if (vertexData.size == 3) glVertex3sv((const GLshort*)((const char*)vertexData.pointer + vertexIndex*vertexData.stride));
            if (vertexData.size == 4) glVertex4sv((const GLshort*)((const char*)vertexData.pointer + vertexIndex*vertexData.stride));
            break;

        case GL_INT:
            if (vertexData.size == 2) glVertex2iv((const GLint*)((const char*)vertexData.pointer + vertexIndex*vertexData.stride));
            if (vertexData.size == 3) glVertex3iv((const GLint*)((const char*)vertexData.pointer + vertexIndex*vertexData.stride));
            if (vertexData.size == 4) glVertex4iv((const GLint*)((const char*)vertexData.pointer + vertexIndex*vertexData.stride));
            break;

        case GL_FLOAT:
            if (vertexData.size == 2) glVertex2fv((const GLfloat*)((const char*)vertexData.pointer + vertexIndex*vertexData.stride));
            if (vertexData.size == 3) glVertex3fv((const GLfloat*)((const char*)vertexData.pointer + vertexIndex*vertexData.stride));
            if (vertexData.size == 4) glVertex4fv((const GLfloat*)((const char*)vertexData.pointer + vertexIndex*vertexData.stride));
            break;

        case GL_DOUBLE:
            if (vertexData.size == 2) glVertex2dv((const GLdouble*)((const char*)vertexData.pointer + vertexIndex*vertexData.stride));
            if (vertexData.size == 3) glVertex3dv((const GLdouble*)((const char*)vertexData.pointer + vertexIndex*vertexData.stride));
            if (vertexData.size == 4) glVertex4dv((const GLdouble*)((const char*)vertexData.pointer + vertexIndex*vertexData.stride));
            break;
    }
}
Esempio n. 5
0
template< > inline void glVertex3v< Vector3i >		( const Vector3i v )		{	glVertex3iv((int*)&v);		};
inline void glVertex(Vector< GLint, 3 > const &v)
{
  glVertex3iv(v.c);
}
Esempio n. 7
0
M(void, glVertex3iv, jobject v) {
	glVertex3iv(BUFF(GLint, v));
}
Esempio n. 8
0
void Vector3D<GLint>::SendOGLVertex(){glVertex3iv(V);}
Esempio n. 9
0
File: g_render.c Progetto: aosm/X11
void __glXDisp_Vertex3iv(GLbyte *pc)
{
	glVertex3iv( 
		(GLint    *)(pc + 0)
	);
}
Esempio n. 10
0
/////////////////////////////////////////////////////////
// Render
//
void GEMglVertex3iv :: render(GemState *state)
{
  glVertex3iv (v);
}