Professional Documents
Culture Documents
y = radius*sin((i+1)*dTheta);
z = radius*cos((i+1)*dTheta)*sin(j*dPhi);
glTexCoord2f(1.0 - j*ds, 0.5 + (i+1)*dt);
glNormal3f(x/radius, y/radius, z/radius);
glVertex3f(x, y, z);
x = radius*cos(i*dTheta)*cos((j+1)*dPhi);
y = radius*sin(i*dTheta);
z = radius*cos(i*dTheta)*sin((j+1)*dPhi);
glTexCoord2f(1.0 - (j+1)*ds, 0.5 + i*dt);
glNormal3f(x/radius, y/radius, z/radius);
glVertex3f(x, y, z);
x = radius*cos((i+1)*dTheta)*cos((j+1)*dPhi);
y = radius*sin((i+1)*dTheta);
z = radius*cos((i+1)*dTheta)*sin((j+1)*dPhi);
glTexCoord2f(1.0 - (j+1)*ds, 0.5 + (i+1)*dt);
glNormal3f(x/radius, y/radius, z/radius);
glVertex3f(x, y, z);
}
glEnd();
}
dTheta = -dTheta;
for(int i = 0; i < stacks; i++)
{
glBegin(GL_QUAD_STRIP);
for(int j
{
x
y
z
y = radius*sin(i*dTheta);
z = radius*cos(i*dTheta)*sin((j+1)*dPhi);
glTexCoord2f(1.0 - (j+1)*ds, 0.5 - i*dt);
glNormal3f(x/radius, y/radius, z/radius);
glVertex3f(x, y, z);
}
glEnd();
}
}
0.0, z);
0.0, z);
y, z);
y, z);
glVertex3f(i, c, j+step);
glTexCoord2f((i+step)/faktorA, (j+step)/faktorB)
;//ista koordinata kao Vertex samo podeljena faktorom
glVertex3f(i+step, c, j+step);
glTexCoord2f(i/faktorA, j/faktorB);//ista koordi
nata kao Vertex samo podeljena faktorom
glVertex3f(i, c, j);
}
}
//levo
glNormal3f(-1.0, 0.0, 0.0);
for(i=0; i<b; i+=step)
{
for(j=0; j<c; j+=step)
{
glVertex3f(0.0, j, i);
glVertex3f(0.0, j+step, i+step);
glVertex3f(0.0, j+step, i);
glVertex3f(0.0, j, i+step);
glVertex3f(0.0, j+step, i+step);
glVertex3f(0.0, j, i);
}
}
//desno
glNormal3f(1.0, 0.0, 0.0);
for(i=0; i<b; i+=step)
{
for(j=0; j<c; j+=step)
{
glVertex3f(a, j, i);
glVertex3f(a, j+step, i);
glVertex3f(a, j+step, i+step);
glVertex3f(a, j, i+step);
glVertex3f(a, j, i);
glVertex3f(a, j+step, i+step);
}
}
//nazad
glNormal3f(0.0, 0.0, -1.0);
for(i=0; i<a; i+=step)
{
for(j=0; j<c; j+=step)
{
glVertex3f(i, j, 0.0);
glVertex3f(i+step, j+step, 0.0);
glVertex3f(i+step, j, 0.0);
glVertex3f(i, j+step, 0.0);
glVertex3f(i+step, j+step, 0.0);
glVertex3f(i, j, 0.0);
}
}
//napred
glNormal3f(0.0, 0.0, 1.0);
for(i=0; i<a; i+=step)
{
void CGLRenderer::COMPLEXDrawWall(double a)
{
float faktor;
faktor = a/6;
//slozenije iscrtavanje sa deljenjem za 5-tu vezbu
double step;
step = 0.05;
glNormal3f(0.0, 0.0, 1.0);
glBegin(GL_TRIANGLES);
glTexCoord2f(1, 1);
glutSolidSphere(0.5,10.0,10.0);
glDisable(GL_CLIP_PLANE0);
glPopMatrix();
}
///KUPA
How about glutSolidCone or glutWireCone.
You can also use gluCylinder with one end having a radius of zero.
void WINAPI gluCylinder(
GLUquadric *qobj,
GLdouble baseRadius,
GLdouble topRadius,
GLdouble height,
GLint slices,
GLint stacks
);
///
GLUquadricObj *qo;
qo = gluNewQuadric();
if (qo==NULL) /* error ... */
gluQuadricDrawStyle(qo,GLU_FILL);
gluQuadricNormals(qo,GLU_SMOOTH);
gluQuadricOrientation(qo,GLU_OUTSIDE);
gluCylinder(qobj,baseRadius,topRadius,height,segments,1);
gluDeleteQuadric(qo);
///
void CGLRenderer::DrawCone(double radius, int vcount, double lenght)
{
glBegin(GL_TRIANGLE_FAN);
glVertex3f(0.0f,0.0f,0.0f);
for(i=0; i<vcount; ++i);
{
glVertex3f(radius*sin(i*PI/vcount),radius*cos(i*PI/vcount),-leng
th);
}
glEnd();
}
///
////KRETANJE KROZ SCENU
ON_WM_KEYDOWN()
void CGLView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
CView::OnKeyDown(nChar, nRepCnt, nFlags);
if(nChar == 'A')
{
m_glRenderer.ugaoPostolja += 10;
Invalidate();
}
if (nChar == VK_RIGHT)
{
double hip;
double tempz = m_glRenderer.lookz;
double tempx = m_glRenderer.lookx;
tempz -= 0.2;
hip = pow(m_glRenderer.lookx, 2) + pow(m_glRenderer.lookz, 2);
tempx = sqrt(hip - pow(tempz, 2));
m_glRenderer.lookz = tempz;
m_glRenderer.lookx = tempx;
Invalidate();
}
}
////OSVETLJENJE I MATERIJALI
void CGLRenderer::SvetloSijalica()
{
GLfloat l_ambient[] = {0.5, 0.5, 0.0, 1.0};//ambijentalno
GLfloat l_dif[] = {1.0, 1.0, 0.0, 1.0};//difuzno
GLfloat l_spec[] = {1.0, 1.0, 0.0, 1.0};//spekularno
glLightfv(GL_LIGHT1, GL_AMBIENT, l_ambient);//postavljanje ambijentalnog
glLightfv(GL_LIGHT1, GL_DIFFUSE, l_dif);//postavljanje difuznog
glLightfv(GL_LIGHT1, GL_SPECULAR, l_spec);//postavljanje spekularnog
float l_pos[] = {0.0, 0.0, 0.0, 1.0};//pozicija (4-ti parametar mora na
1 ako je lokalno, 0=u beskonacnosti OpenGL str.127 pri kraju za w parametar
glLightfv(GL_LIGHT1, GL_POSITION, l_pos);// postavljanje pozicije
glLightf(GL_LIGHT1, GL_CONSTANT_ATTENUATION, 1);//konstantno slabljenje
glLightf(GL_LIGHT1, GL_LINEAR_ATTENUATION, 0.5);//linearno slabljenje
glLightf(GL_LIGHT1, GL_QUADRATIC_ATTENUATION, 0.0);//kvadratno slabljenj
e
//OpenGL str. 128 ruga polovina
float dir[] = {1.0,0.0, 0.0};//smer osvetljenja
//posto moja clip ravan sece loptu po x osi onda smer treba da bude u ne
gativnoj y osi (na dole)
glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, dir);//smer osvetljenja
glLightf(GL_LIGHT1, GL_SPOT_CUTOFF, 22.5);//ugao
glLightf(GL_LIGHT1, GL_SPOT_EXPONENT, 2.0);//eksponent opadanja
//OpenGL str.129
glEnable(GL_LIGHT1);//ukljucivanje svetlosti
}
void CGLRenderer::SijalicaMaterial()
{
GLfloat ambient[] = {0.2, 0.0, 0.0, 1.0};
glMaterialfv(GL_FRONT, GL_AMBIENT, ambient);
GLfloat dif[] = {1, 1, 0.5, 1.0};
glMaterialfv(GL_FRONT, GL_DIFFUSE, dif);
GLfloat spec[] = {1.0, 1.0, 1.0, 1.0};
glMaterialfv(GL_FRONT, GL_SPECULAR, spec);
glMaterialf(GL_FRONT, GL_SHININESS, 4.0);
/////OSNOVNE F-je
void CGLRenderer::DrawScene(CDC *pDC)
{
wglMakeCurrent(pDC->m_hDC, m_hrc);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//Z-buffer OpenGL str
.94
glEnable(GL_DEPTH_TEST);//Z-buffer OpenGL str.94
//---------------------------------
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 0.0, 0.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(
lookx, looky, lookz, 0.0, 0.0, 0.0,
SetLightModel();//postavljanje svetlosnog modela
....
....
....
//--------------------------------SwapBuffers(pDC->m_hDC);
wglMakeCurrent(NULL, NULL);
}
lx = 20;
ly = 11.5;
lz = 3;
PIXELFORMATDESCRIPTOR pfd ;
memset(&pfd, 0, sizeof(PIXELFORMATDESCRIPTOR));
pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);
pfd.nVersion = 1;
pfd.dwFlags
= PFD_DOUBLEBUFFER | PFD_SUPPORT_OPENGL | PFD_DRAW_TO_WIN
DOW;
pfd.iPixelType
pfd.cColorBits
pfd.cDepthBits
pfd.iLayerType
=
=
=
=
PFD_TYPE_RGBA;
32;
24;
PFD_MAIN_PLANE;
////TEXTURE
void CGLRenderer::PrepareTextureMOJE()
{
glPixelStorei(GL_UNPACK_ALIGNMENT, 4);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
//ucitavanje texture stola
glGenTextures(1, &m_tab_id);//generisanje jedinstvenog id-a za texturu i
njegovo pamcenje
glBindTexture(GL_TEXTURE_2D, m_tab_id);//kreiranje i aktiviranje objekta
textura
AUX_RGBImageRec *TableTex;
TableTex = auxDIBImageLoad("ASHSEN512.bmp");
//ukljucivanje LINEARNE teksture
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_L
INEAR);
//glTexImage2D(GL_TEXTURE_2D, 0, 3, TableTex->sizeX, TableTex->sizeY, 0,
GL_RGB, GL_UNSIGNED_BYTE, TableTex->data);//ovako se definise samo za jednu bit
mapu
gluBuild2DMipmaps(GL_TEXTURE_2D, 3, TableTex->sizeX, TableTex->sizeY, GL
_RGB, GL_UNSIGNED_BYTE, TableTex->data);//pomocna funkcija koja pravi i mipmape
glGenTextures(1, &m_floor_id);
glBindTexture(GL_TEXTURE_2D, m_floor_id);
AUX_RGBImageRec *FloorTex;
FloorTex = auxDIBImageLoad("PAT39.bmp");
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_L
INEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
//glTexImage2D(GL_TEXTURE_2D, 0, 3, FloorTex->sizeX, FloorTex->sizeY, 0,
GL_RGB, GL_UNSIGNED_BYTE, FloorTex->data);
gluBuild2DMipmaps(GL_TEXTURE_2D, 3, FloorTex->sizeX, FloorTex->sizeY, GL
_RGB, GL_UNSIGNED_BYTE, FloorTex->data);
glGenTextures(1, &m_oval_id);
glBindTexture(GL_TEXTURE_2D, m_oval_id);
AUX_RGBImageRec *OvalTex;
OvalTex = auxDIBImageLoad("oval2.bmp");
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
gluBuild2DMipmaps(GL_TEXTURE_2D, 3, OvalTex->sizeX, OvalTex->sizeY, GL_R
GB, GL_UNSIGNED_BYTE, OvalTex->data);
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////
#include "StdAfx.h"
#include "GLRenderer.h"
#include
#include
#include
#include
"gl.h"
"glu.h"
"glaux.h"
"glut.h"
#include <math.h>
#include <stdlib.h>
CGLRenderer::CGLRenderer(void)
{
texIDs = new unsigned int[2];
angle = 0.0;
}
CGLRenderer::~CGLRenderer(void)
{
delete [] texIDs;
}
////////////////////////////////////////////////////////////////////////////////
////////////////////////
bool CGLRenderer::CreateGLContext(CDC* pDC)
{
PIXELFORMATDESCRIPTOR pfd;
memset(&pfd, 0, sizeof(PIXELFORMATDESCRIPTOR));
pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);
pfd.nVersion = 1;
pfd.dwFlags = PFD_DOUBLEBUFFER | PFD_SUPPORT_OPENGL | PFD_DRAW_TO_WINDOW
;
pfd.iPixelType
pfd.cColorBits
pfd.cDepthBits
pfd.iLayerType
=
=
=
=
PFD_TYPE_RGBA;
32;
24;
PFD_MAIN_PLANE;
}
void CGLRenderer::PrepareScene(CDC* pDC)
{
wglMakeCurrent(pDC->m_hDC, m_hrc);
glEnable(GL_DEPTH_TEST);
glEnable(GL_NORMALIZE);
glClearColor(0.0, 0.0, 0.0, 1.0);
PrepareTextures();
wglMakeCurrent(NULL, NULL);
}
void CGLRenderer::Reshape(CDC* pDC, int w, int h)
{
wglMakeCurrent(pDC->m_hDC, m_hrc);
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(35.0, (double)w / (double)h, 0.01, 250.0);
glMatrixMode(GL_MODELVIEW);
wglMakeCurrent(NULL, NULL);
}
void CGLRenderer::DestroyScene(CDC* pDC)
{
wglMakeCurrent(pDC->m_hDC, m_hrc);
glDeleteTextures(2, texIDs);
wglMakeCurrent(NULL,NULL);
if(m_hrc)
{
wglDeleteContext(m_hrc);
m_hrc = NULL;
}
}
void CGLRenderer::DrawScene(CDC* pDC)
{
wglMakeCurrent(pDC->m_hDC, m_hrc);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
gluLookAt(5.0, 4.0, 4.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
SetLight();
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texIDs[0]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_L
INEAR);
DrawRoom();
glPushMatrix();
glTranslatef(-1.5, 0.0, 2.0);
DrawPillar(1.0, 4.0, 1.0);
glPopMatrix();
glPushMatrix();
glTranslatef(1.5, 0.0, -2.0);
DrawPillar(1.0, 4.0, 1.0);
glPopMatrix();
glPushMatrix();
glTranslatef(-1.0, 0.0, -0.2);
glBindTexture(GL_TEXTURE_2D, texIDs[1]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_L
INEAR);
DrawSarcophagus(2.0, 1.0, 1.0);
glPopMatrix();
glDisable(GL_TEXTURE_2D);
glTranslatef(-1.0, 1.0, -0.2);
glRotatef(-angle, 1.0, 0.0, 0.0);
SetSarcophagusTopMaterial();
DrawSarcophagusTop(2.0, 0.2, 1.0);
SetNormalMaterial();
glFlush();
SwapBuffers(pDC->m_hDC);
wglMakeCurrent(NULL, NULL);
}
////////////////////////////////////////////////////////////////////////////////
////////////////////////
void CGLRenderer::DrawRoom()
{
glPushMatrix();
glTranslatef(-4.0, 0.0, -4.0);
glBegin(GL_QUADS);
glNormal3f(0.0, 0.0, 1.0);
glTexCoord2f(0.5, 0.5); glVertex3f(0.0,
glTexCoord2f(1.0, 0.5); glVertex3f(8.0,
glTexCoord2f(1.0, 1.0); glVertex3f(8.0,
glTexCoord2f(0.5, 1.0); glVertex3f(0.0,
0.0,
0.0,
8.0,
8.0,
0.0);
0.0);
0.0);
0.0);
0.0,
8.0,
8.0,
0.0,
0.0);
0.0);
8.0);
8.0);
0.0,
0.0,
0.0,
0.0,
0.0);
8.0);
8.0);
0.0);
glEnd();
glPopMatrix();
}
void CGLRenderer::DrawPillar(double x, double y, double z)
{
glBegin(GL_QUADS);
glNormal3f(0.0, 0.0, 1.0);
glTexCoord2f(0.5, 0.5); glVertex3f(0.0,
glTexCoord2f(0.625, 0.5); glVertex3f(x,
glTexCoord2f(0.625, 1.0); glVertex3f(x,
glTexCoord2f(0.5, 1.0); glVertex3f(0.0,
0.0, z);
0.0, z);
y, z);
y, z);
0.0, 0.0);
0.0, z);
y, z);
y, 0.0);
glEnd();
}
void CGLRenderer::DrawSarcophagusTop(double x, double y, double z)
{
glBegin(GL_QUADS);
glNormal3f(0.0, 0.0, 1.0);
glVertex3f(0.0, 0.0, z);
glVertex3f(x, 0.0, z);
glVertex3f(x, y, z);
glVertex3f(0.0, y, z);
glNormal3f(1.0, 0.0, 0.0);
glVertex3f(x, 0.0, z);
glVertex3f(x, 0.0, 0.0);
glVertex3f(x, y, 0.0);
glVertex3f(x, y, z);
glNormal3f(0.0, 0.0, -1.0);
glVertex3f(x, 0.0, 0.0);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(0.0, y, 0.0);
glVertex3f(x, y, 0.0);
glNormal3f(-1.0, 0.0, 0.0);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(0.0, 0.0, z);
glVertex3f(0.0, y, z);
glVertex3f(0.0, y, 0.0);
glNormal3f(0.0, 1.0, 0.0);
glVertex3f(0.0, y, z);
glVertex3f(x, y, z);
glVertex3f(x, y, 0.0);
glVertex3f(0.0, y, 0.0);
glNormal3f(0.0, -1.0, 0.0);
glVertex3f(x, 0.0, 0.0);
glVertex3f(x, 0.0, z);
glVertex3f(0.0, 0.0, z);
glVertex3f(0.0, 0.0, 0.0);
glEnd();
}
////////////////////////////////////////////////////////////////////////////////
////////////////////////
void CGLRenderer::SetLight()
{
float params1[4] = { 0.2, 0.2, 0.2, 1.0 };
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, params1);
glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_TRUE);
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE);
glLightfv(GL_LIGHT0, GL_AMBIENT, params1);
float params2[4] = { 1.0, 1.0, 1.0, 1.0 };
glLightfv(GL_LIGHT0, GL_DIFFUSE, params2);
glLightfv(GL_LIGHT0, GL_SPECULAR, params2);
float params3[4] = { 4.0, 4.0, 4.0, 1.0 };
glLightfv(GL_LIGHT0, GL_POSITION, params3);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
}
void CGLRenderer::SetSarcophagusTopMaterial()
{
float params1[4] = { 0.2, 0.2, 0.2, 1.0 };
glMaterialfv(GL_FRONT, GL_AMBIENT, params1);
float params2[4] = { 0.4, 0.0, 0.0, 1.0 };
glMaterialfv(GL_FRONT, GL_DIFFUSE, params2);
float params3[4] = { 0.0, 0.0, 0.0, 1.0 };
glMaterialfv(GL_FRONT, GL_SPECULAR, params3);
float params4[4] = { 0.0, 0.0, 0.0, 1.0 };
glMaterialfv(GL_FRONT, GL_EMISSION, params4);
}
void CGLRenderer::SetNormalMaterial()
{
float params1[4] = { 0.2, 0.2, 0.2, 1.0 };
glMaterialfv(GL_FRONT, GL_AMBIENT, params1);
float params2[4] = { 0.8, 0.8, 0.8, 1.0 };
glMaterialfv(GL_FRONT, GL_DIFFUSE, params2);
float params3[4] = { 0.0, 0.0, 0.0, 1.0 };
glMaterialfv(GL_FRONT, GL_SPECULAR, params3);
float params4[4] = { 0.0, 0.0, 0.0, 1.0 };
glMaterialfv(GL_FRONT, GL_EMISSION, params4);
}
////////////////////////////////////////////////////////////////////////////////
////////////////////////
void CGLRenderer::PrepareTextures()
{
glPixelStorei(GL_UNPACK_ALIGNMENT, 4);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glGenTextures(2, texIDs);
AUX_RGBImageRec* textureImage = NULL;
CString paths[2] = { CString("Egyptex.BMP"), CString("FE1031-SC.BMP") };
for (int i = 0; i < 2; i++)
{
textureImage = auxDIBImageLoad(paths[i]);
glBindTexture(GL_TEXTURE_2D, texIDs[i]);
gluBuild2DMipmaps(GL_TEXTURE_2D, 3, textureImage->sizeX, texture
Image->sizeY, GL_RGB, GL_UNSIGNED_BYTE, textureImage->data);
if (textureImage)
{
if (textureImage->data) free(textureImage->data);
free(textureImage);
}
}
}
////////////////////////////////////////////////////////////////////////////////
////////////////////////
void CGLRenderer::OnKeyDown(UINT nChar)
{
if (nChar == 'Q')
{
angle += 5.0;
if (angle > 90.0) angle = 90.0;
}
if (nChar == 'W')
{
angle -= 5.0;
if (angle < 0.0) angle = 0.0;
}
}
////////////////////////////////////////////////////////////////////////////////
////////////////////////
///////////////////////////////////
///////////////////////////////////
////////////////////////////////////
////////////////////////////////
///////////////////////////////////
///KOCKA SA TEXTURAMA
GLvoid glDrawCube()
// Draw A Cube
{
glBegin(GL_QUADS);
// Start Drawing Quads
// Front Face
glNormal3f( 0.0f, 0.0f, 1.0f);
// Normal Facing Forward
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); // Bottom Le
ft Of The Texture and Quad
// Bottom Ri
// Top Right
// Top Left
// Bottom Ri
// Top Right
// Top Left
// Bottom Le
// Top Left
// Bottom Le
// Bottom Ri
// Top Right
// Top Right
// Top Left
// Bottom Le
// Bottom Ri
// Bottom Ri
// Top Right
// Top Left
// Bottom Le
// Bottom Le
// Bottom Ri
// Top Right
// Top Left