Opengl Superbible 4th edition . great book. comes with cd full with tutor files. its dissadvantige is that it doesnt covers 3d model importing or texture importing or shadow mapping.nor normal calculation or smooth shading methods. they have their own functions specially for that book and they use them, without explaining what heppens inside. i personally am stuck on shadows right now. cant get tutors at all
(( in other words it perfect for start but horrible for thous who already knows something. im kinda new in c++ too... try this:
http://www.swiftless.com/tutorials/opengl/gldrivers.html
install dll s into windows/ system 32. i keep glut32.dll in same folder as executable file. but if im not wrong you could install it in system32 aswell.
copy from zip's include into
C:\Program Files (x86)\Microsoft Visual Studio 8\VC\PlatformSDK\Include\gl
and lib files from zip into
C:\Program Files (x86)\Microsoft Visual Studio 8\VC\PlatformSDK\Lib
here is basic c++ opengl thing:
#include <iostream>
#include <stdlib.h>
#include <GL/gl.h> //here is gl.h you'v just installed
#include <GL/glut.h> //here is glut.h you'v just installed
using namespace std;
int k=0,d=0;
float camx=0.0,camy=0.0,camz=-10.0;
float camrotx=0.0,camroty=0.0,camrotz=0.0;
float camrotdeg = 0.0;
void RenderScene(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(camx,camy,camz); //this guy translates the object into any place you like.
//here you could just say glTranslatef(10,2,7); or anything you like.
//however if you need to controll the translation by keys, you need to set float variables here. and controll
//numbers inside variable's . switch statement below does that. if a keyboard key a or s or w was clicked, switch statement
//grabs for example camx and adds 0.1 to it. if before clicking it was 2.0 , ufter clickeng 'a' it will be 2.1. translatef
// will get new coordinate and translate object onto it.
glRotatef(camrotdeg,camrotx,camroty,camrotz);
glPushMatrix();
glBegin(GL_QUADS); //your rectangle drawing starts here
glVertex3f( -0.5, 0.5,0.0);
glColor3f(1.0, 0.0, 255.0);
glVertex3f( 0.5, 0.5,0.0);
glColor3f(0.0, 255.0, 0.0);
glVertex3f( 0.5, -0.5,0.0);
glColor3f(120.0, 15.0, 0.0);
glVertex3f( -0.5, -0.5,0.0);
glColor3f(1.0f, 0.0f, 1.0f);
glVertex3f( 0.5f, -0.5f,0.0f);
glVertex3f( 0.5f, 0.5f,0.0f);
glVertex3f( 0.5f, 0.5f,0.5f);
glVertex3f( 0.5f, -0.5f,0.5f);
glEnd();
glPopMatrix();
glFlush();
}
void SetupRC(void)
{
glClearColor(0.0f, 0.0f, 0.5f, 1.0f);
glEnable(GL_COLOR_MATERIAL);
}
void camcontroll(unsigned char key, int x,int y) //camcontroll grabs keys that are pressed, then switch statement
//checks different cases.
{
switch (key) {
case'a': //in case if key 'a' was clicked, add 0.1 to camx.see glTranslatef above.
camx += 0.1;
glutPostRedisplay(); //without this, translation will happen but you wont see it on screen. it refreshes the screen
break; //its simple switch statement's guy. ufter every "case" ends, add "break".
case'd':
camx -= 0.1;
glutPostRedisplay();
break;
case'w':
camy -=0.1;
glutPostRedisplay();
break;
case's':
camy +=0.1;
glutPostRedisplay();
break;
case'q':
camz+=0.1;
glutPostRedisplay();
break;
case'e':
camz-=0.1;
glutPostRedisplay();
break;
case'f':
camroty=1.0;
camrotdeg-=1.1;
glutPostRedisplay();
break;
case'h':
camroty=1.0;
camrotdeg+=1.1;
glutPostRedisplay();
break;
default :
break;
}
}
int main(int argc, char* argv[]) //program starts here
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(800, 600);
glutCreateWindow("GLRect");
glutDisplayFunc(RenderScene);
SetupRC();
glutKeyboardFunc(camcontroll); //keyboard input starts working here, see function camcontroll.
glutMainLoop();
return 0;
}