Sign in to follow this  
ishkabible

how to make triangles visible from both sides

Recommended Posts

OK so i'm making an icosahedron in this (well i have two triangles right now that don't really make a icosahedron) and i want to know how to make them visible on both sides. also if anyone has some insight on defining the correct triangles please say so.

Share this post


Link to post
Share on other sites
thanks a million!!!!!

o and i have already looked at that Wikipedia page but i cant seem to get the correct triangles even though i think i have the correct vertices (here's my code P1-P12 are vertices)




#include <windows.h>
#include <GL/glut.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <stdlib.h>
#include <stdio.h>
#include <cmath>


const GLfloat G_RATIO=(1.0f - sqrt(5.0f))/2.0f;

GLfloat rtri;

const GLfloat P1[] = {0.0f, 1.0f, G_RATIO};

const GLfloat P2[] = {0.0f,-1.0f, G_RATIO};

const GLfloat P3[] = { 0.0f,-1.0f, -G_RATIO};


const GLfloat P4[] = {0.0f, 1.0f, -G_RATIO};

const GLfloat P5[] = {1.0f,G_RATIO, 0.0f};

const GLfloat P6[] = { -1.0f,G_RATIO, 0.0f};


const GLfloat P7[] = { -1.0f, -G_RATIO, 0.0f};

const GLfloat P8[] = {1.0f,-G_RATIO, 0.0f};

const GLfloat P9[] = { G_RATIO,0.0f, 1.0f};


const GLfloat P10[] = { -G_RATIO, 0.0f, 1.0f};

const GLfloat P11[] = {-G_RATIO,0.0f, - 1.0f};

const GLfloat P12[] = { G_RATIO,0.0f, -1.0f};

static void resize(int width, int height)
{
const float ar = (float) width / (float) height;
glDisable(GL_CULL_FACE);
glEnable(GL_BLEND);
glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-ar, ar, -1.0, 1.0, 2.0, 100.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity() ;
}
static void display(void)
{
const double t = glutGet(GLUT_ELAPSED_TIME) / 1000.0;
const double a = t*90.0;

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0.0f,0.0f,-5.0f);
glRotatef(rtri,0.0f,1.0f,0.0f);
glBegin(GL_TRIANGLES);

glColor3f(1.0f,0.0f,0.0f); // Set Top Point Of Triangle To Red
glVertex3fv( P5); // First Point Of The Triangle
glColor3f(0.0f,1.0f,0.0f); // Set Left Point Of Triangle To Green
glVertex3fv(P1); // Second Point Of The Triangle
glColor3f(0.0f,0.0f,1.0f); // Set Right Point Of Triangle To Blue
glVertex3fv( P4);
glColor3f(1.0f,0.0f,0.0f); // Set Top Point Of Triangle To Red
glVertex3fv( P6); // First Point Of The Triangle
glColor3f(0.0f,1.0f,0.0f); // Set Left Point Of Triangle To Green
glVertex3fv(P1); // Second Point Of The Triangle
glColor3f(0.0f,0.0f,1.0f); // Set Right Point Of Triangle To Blue
glVertex3fv( P12);

glEnd();
rtri+=1.0f;
glutSwapBuffers();
}


static void key(unsigned char key, int x, int y)
{
switch (key)
{

}

glutPostRedisplay();
}

static void idle(void)
{
glutPostRedisplay();
}

const GLfloat light_ambient[] = { 0.0f, 0.0f, 0.0f, 1.0f };
const GLfloat light_diffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f };

const GLfloat mat_ambient[] = { 0.7f, 0.7f, 0.7f, 1.0f };
const GLfloat mat_diffuse[] = { 0.8f, 0.8f, 0.8f, 1.0f };
const GLfloat mat_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat high_shininess[] = { 100.0f };

/* Program entry point */

int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitWindowSize(640,480);
glutInitWindowPosition(10,10);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

glutCreateWindow("GLUT Shapes");

glutReshapeFunc(resize);
glutDisplayFunc(display);
glutKeyboardFunc(key);
glutIdleFunc(idle);

glClearColor(1,1,1,1);
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);

glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);

glEnable(GL_LIGHT0);
glEnable(GL_NORMALIZE);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_LIGHTING);

glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);

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, high_shininess);

glutMainLoop();

return 1;
}

Share this post


Link to post
Share on other sites
You are drawing 2 triangles...

anyway, I don't have time to look into it. Get a piece of paper and a pen, and start sketching...

Share this post


Link to post
Share on other sites
Quote:
Original post by ishkabible
o and i would also like to know how to make it transparent with out using textures.

glEnable(GL_BLEND) + glColor4f(r,g,b, alpha) where alpha = 1 means opaque and alpha = 0 means fully transparent.

Example:

...
glColor4f(1.0f,0.0f,0.0f, 0.5f); // P5 will be red with 50% transparency.
glVertex3fv( P5);
...

You can change the blend equation with glBlendEquation and its factors with glBlendfunc but the default equation should be sufficient.

Edit: Note that in order to get correct results for alpha blended primitives you need to render them back to front, use additive blending (GL_ONE for both factors in glBlendFunc) which results in a brightening (might not be what you want) or use more advanced techniques like alpha-to-coverage (uses a texture) or depth peeling (uses render-to-texture).

Share this post


Link to post
Share on other sites
*nevermind i got it working, took some stuff that didn't need to be in my main and (here's a duzy) changed the colors so there wansn't just one color to display.


ok so i have this but it's just all one solid color not transparent at all so what did i do worng.



#include <windows.h>
#include <GL/glut.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <stdlib.h>
#include <stdio.h>
#include <cmath>


const GLfloat G_RATIO = (1 - sqrt(5))/2;

GLfloat rtri;

const GLfloat P1[] = {0.0f, 1.0f, G_RATIO};
const GLfloat P2[] = {0.0f,-1.0f, G_RATIO};
const GLfloat P3[] = { 0.0f,-1.0f, -G_RATIO};
const GLfloat P4[] = {0.0f, 1.0f, -G_RATIO};
const GLfloat P5[] = {1.0f,G_RATIO, 0.0f};
const GLfloat P6[] = { -1.0f,G_RATIO, 0.0f};
const GLfloat P7[] = { -1.0f, -G_RATIO, 0.0f};
const GLfloat P8[] = {1.0f,-G_RATIO, 0.0f};
const GLfloat P9[] = { G_RATIO,0.0f, 1.0f};
const GLfloat P10[] = { -G_RATIO, 0.0f, 1.0f};
const GLfloat P11[] = {-G_RATIO,0.0f, - 1.0f};
const GLfloat P12[] = { G_RATIO,0.0f, -1.0f};

char *one;
char *two;
char *three;
char *four;
char *five;
char *six;
char *seven;
char *eight;
char *nine;
char *ten;
char *eleven;
char *twelve;

const GLfloat light_ambient[] = { 0.0f, 0.0f, 0.0f, 1.0f };
const GLfloat light_diffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f };

const GLfloat mat_ambient[] = { 0.7f, 0.7f, 0.7f, 1.0f };
const GLfloat mat_diffuse[] = { 0.8f, 0.8f, 0.8f, 1.0f };
const GLfloat mat_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat high_shininess[] = { 100.0f };

static void resize(int width, int height)
{
const float ar = (float) width / (float) height;
glDisable(GL_CULL_FACE);
glEnable(GL_BLEND);
glViewport(0, 0, width, height);
glShadeModel(GL_SMOOTH);
glLightfv(GL_LIGHT1, GL_AMBIENT, light_ambient);
glLightfv(GL_LIGHT1, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT1, GL_SPECULAR, light_specular);
glLightfv(GL_LIGHT1, GL_POSITION, light_position);
glEnable(GL_LIGHT1);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-ar, ar, -1.0, 1.0, 2.0, 100.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity() ;
}
static void display(void)
{
const double t = glutGet(GLUT_ELAPSED_TIME) / 1000.0;
const double a = t*90.0;
one = "1";
two = "2";
three = "3";
four = "4";
five = "5";
six = "6";
seven = "7";
eight = "8";
nine = "9";
ten = "t";
eleven = "e";
twelve = "w";
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glLoadIdentity();
glTranslatef(0.0f,0.0f,-5.0f);
glRotatef(rtri,0.0f,1.0f,0.0f);

glBegin(GL_TRIANGLES);

glRasterPos3fv(P1);
glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, *one);
glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Top Point Of Triangle To Red
glVertex3fv( P1); // First Point Of The Triangle
glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Left Point Of Triangle To Green
glVertex3fv(P4); // Second Point Of The Triangle
glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Right Point Of Triangle To Blue
glVertex3fv( P7);

glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Top Point Of Triangle To Red
glVertex3fv( P1); // First Point Of The Triangle
glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Left Point Of Triangle To Green
glVertex3fv(P4); // Second Point Of The Triangle
glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Right Point Of Triangle To Blue
glVertex3fv( P8);

glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Top Point Of Triangle To Red
glVertex3fv( P1); // First Point Of The Triangle
glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Left Point Of Triangle To Green
glVertex3fv(P11); // Second Point Of The Triangle
glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Right Point Of Triangle To Blue
glVertex3fv( P12);

glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Top Point Of Triangle To Red
glVertex3fv( P4); // First Point Of The Triangle
glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Left Point Of Triangle To Green
glVertex3fv(P9); // Second Point Of The Triangle
glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Right Point Of Triangle To Blue
glVertex3fv( P10);

glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Top Point Of Triangle To Red
glVertex3fv( P4); // First Point Of The Triangle
glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Left Point Of Triangle To Green
glVertex3fv(P9); // Second Point Of The Triangle
glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Right Point Of Triangle To Blue
glVertex3fv( P7);

glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Top Point Of Triangle To Red
glVertex3fv( P1); // First Point Of The Triangle
glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Left Point Of Triangle To Green
glVertex3fv(P11); // Second Point Of The Triangle
glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Right Point Of Triangle To Blue
glVertex3fv( P8);

glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Top Point Of Triangle To Red
glVertex3fv( P1); // First Point Of The Triangle
glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Left Point Of Triangle To Green
glVertex3fv(P12); // Second Point Of The Triangle
glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Right Point Of Triangle To Blue
glVertex3fv( P7);

glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Top Point Of Triangle To Red
glVertex3fv( P4); // First Point Of The Triangle
glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Left Point Of Triangle To Green
glVertex3fv(P10); // Second Point Of The Triangle
glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Right Point Of Triangle To Blue
glVertex3fv( P8);

glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Top Point Of Triangle To Red
glVertex3fv( P8); // First Point Of The Triangle
glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Left Point Of Triangle To Green
glVertex3fv(P5); // Second Point Of The Triangle
glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Right Point Of Triangle To Blue
glVertex3fv( P10);

glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Top Point Of Triangle To Red
glVertex3fv( P8); // First Point Of The Triangle
glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Left Point Of Triangle To Green
glVertex3fv(P11); // Second Point Of The Triangle
glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Right Point Of Triangle To Blue
glVertex3fv( P5);

glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Top Point Of Triangle To Red
glVertex3fv( P7); // First Point Of The Triangle
glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Left Point Of Triangle To Green
glVertex3fv(P12); // Second Point Of The Triangle
glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Right Point Of Triangle To Blue
glVertex3fv( P6);

glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Top Point Of Triangle To Red
glVertex3fv( P7); // First Point Of The Triangle
glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Left Point Of Triangle To Green
glVertex3fv(P9); // Second Point Of The Triangle
glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Right Point Of Triangle To Blue
glVertex3fv( P6);

glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Top Point Of Triangle To Red
glVertex3fv( P12); // First Point Of The Triangle
glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Left Point Of Triangle To Green
glVertex3fv(P11); // Second Point Of The Triangle
glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Right Point Of Triangle To Blue
glVertex3fv( P2);

glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Top Point Of Triangle To Red
glVertex3fv( P12); // First Point Of The Triangle
glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Left Point Of Triangle To Green
glVertex3fv(P2); // Second Point Of The Triangle
glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Right Point Of Triangle To Blue
glVertex3fv( P6);

glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Top Point Of Triangle To Red
glVertex3fv( P9); // First Point Of The Triangle
glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Left Point Of Triangle To Green
glVertex3fv(P10); // Second Point Of The Triangle
glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Right Point Of Triangle To Blue
glVertex3fv( P3);

glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Top Point Of Triangle To Red
glVertex3fv( P11); // First Point Of The Triangle
glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Left Point Of Triangle To Green
glVertex3fv(P5); // Second Point Of The Triangle
glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Right Point Of Triangle To Blue
glVertex3fv( P2);

glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Top Point Of Triangle To Red
glVertex3fv( P5); // First Point Of The Triangle
glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Left Point Of Triangle To Green
glVertex3fv(P10); // Second Point Of The Triangle
glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Right Point Of Triangle To Blue
glVertex3fv( P3);

glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Top Point Of Triangle To Red
glVertex3fv( P5); // First Point Of The Triangle
glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Left Point Of Triangle To Green
glVertex3fv(P2); // Second Point Of The Triangle
glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Right Point Of Triangle To Blue
glVertex3fv( P3);

glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Top Point Of Triangle To Red
glVertex3fv( P9); // First Point Of The Triangle
glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Left Point Of Triangle To Green
glVertex3fv(P6); // Second Point Of The Triangle
glColor4f(1.0f,0.0f,0.0f,0.5f); // Set Right Point Of Triangle To Blue
glVertex3fv( P3);


glEnd();

glRasterPos3fv(P1);
glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, *one);
glRasterPos3fv(P2);
glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, *two);
glRasterPos3fv(P3);
glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, *three);
glRasterPos3fv(P4);
glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, *four);
glRasterPos3fv(P5);
glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, *five);
glRasterPos3fv(P6);
glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, *six);
glRasterPos3fv(P7);
glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, *seven);
glRasterPos3fv(P8);
glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, *eight);
glRasterPos3fv(P9);
glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, *nine);
glRasterPos3fv(P10);
glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, *ten);
glRasterPos3fv(P11);
glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, *eleven);
glRasterPos3fv(P12);
glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, *twelve);
rtri+=1.0f;
glutSwapBuffers();
}
void renderBitmapString(
float x,
float y,
float z,
void *font,
char *string) {
char *c;
glRasterPos3f(x, y,z);
for (c=string; *c != '\0'; c++) {
glutBitmapCharacter(font, *c);
}
}

static void key(unsigned char key, int x, int y)
{
switch (key)
{

}

glutPostRedisplay();
}

static void idle(void)
{
glutPostRedisplay();
}

int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitWindowSize(640,480);
glutInitWindowPosition(10,10);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);

glutCreateWindow("GLUT Shapes");

glutReshapeFunc(resize);
glutDisplayFunc(display);
glutKeyboardFunc(key);
glutIdleFunc(idle);

glClearColor(1,1,1,1);
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);

glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);

glEnable(GL_LIGHT0);
glEnable(GL_NORMALIZE);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_LIGHTING);

glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);

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, high_shininess);

glutMainLoop();

return 1;
}


Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this