Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <vector>
- #pragma region Zmienne globalne
- SCameraState player, Car;
- double T = 0.0;
- int mouseX = 0;
- int mouseY = 0;
- bool captureMouse = true;
- bool free3DMovement = false;
- float mouseSensitivity = .15f;
- // Zmienne przechowujące identyfikatory tekstur
- GLuint cartexture;
- GLuint trasatextura;
- GLuint SkyTexture;
- GLuint GrassTexture;
- GLuint displayListId;
- // Zmienne przechowujące identyfikatory modeli
- GLuint car;
- GLuint trasa;
- #pragma endregion
- // Funkcja odczytująca bitmapę i tworząca na jej podstawie teksturę z zadanym rodzajem filtracji
- GLuint LoadTexture(char * file, int magFilter, int minFilter) {
- // Odczytanie bitmapy
- Bitmap *tex = new Bitmap();
- if (!tex->loadBMP(file)) {
- printf("ERROR: Cannot read texture file \"%s\".\n", file);
- return -1;
- }
- // Utworzenie nowego id wolnej tekstury
- GLuint texId;
- glGenTextures(1, &texId);
- // "Bindowanie" tekstury o nowoutworzonym id
- glBindTexture(GL_TEXTURE_2D, texId);
- // Określenie parametrów filtracji dla tekstury
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, magFilter); // Filtracja, gdy tekstura jest powiększana
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, minFilter); // Filtracja, gdy tekstura jest pomniejszana
- // Wysłanie tekstury do pamięci karty graficznej zależnie od tego, czy chcemy korzystać z mipmap czy nie
- if (minFilter == GL_LINEAR_MIPMAP_LINEAR || minFilter == GL_LINEAR_MIPMAP_NEAREST) {
- // Automatyczne zbudowanie mipmap i wysłanie tekstury do pamięci karty graficznej
- gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA, tex->width, tex->height, GL_RGB, GL_UNSIGNED_BYTE, tex->data);
- }
- else {
- // Wysłanie tekstury do pamięci karty graficznej
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex->width, tex->height, 0, GL_RGB, GL_UNSIGNED_BYTE, tex->data);
- }
- // Zwolnienie pamięci, usunięcie bitmapy z pamięci - bitmapa jest już w pamięci karty graficznej
- delete tex;
- // Zwrócenie id tekstury
- return texId;
- }
- //struktura do ladowanie obiektu
- struct SFace {
- int v[3];
- int n[3];
- int t[3];
- };
- //ladowanie obiektu
- GLuint LoadObj(char * file) {
- FILE * fp = fopen(file, "r");
- if (fp == NULL) {
- printf("ERROR: Cannot read model file \"%s\".\n", file);
- return -1;
- }
- std::vector<vec3> * v = new std::vector<vec3>();
- std::vector<vec3> * n = new std::vector<vec3>();
- std::vector<vec3> * t = new std::vector<vec3>();
- std::vector<SFace> * f = new std::vector<SFace>();
- char buf[128];
- while (fgets(buf, 128, fp) != NULL) {
- if (buf[0] == 'v' && buf[1] == ' ') {
- vec3 * vertex = new vec3();
- sscanf(buf, "v %f %f %f", &vertex->x, &vertex->y, &vertex->z);
- v->push_back(*vertex);
- }
- if (buf[0] == 'v' && buf[1] == 't') {
- vec3 * vertex = new vec3();
- sscanf(buf, "vt %f %f", &vertex->x, &vertex->y);
- t->push_back(*vertex);
- }
- if (buf[0] == 'v' && buf[1] == 'n') {
- vec3 * vertex = new vec3();
- sscanf(buf, "vn %f %f %f", &vertex->x, &vertex->y, &vertex->z);
- n->push_back(*vertex);
- }
- if (buf[0] == 'f' && buf[1] == ' ') {
- SFace * face = new SFace();
- sscanf(buf, "f %d/%d/%d %d/%d/%d %d/%d/%d",
- &face->v[0], &face->t[0], &face->n[0],
- &face->v[1], &face->t[1], &face->n[1],
- &face->v[2], &face->t[2], &face->n[2]
- );
- f->push_back(*face);
- }
- }
- fclose(fp);
- GLuint dlId;
- dlId = glGenLists(1);
- glNewList(dlId, GL_COMPILE);
- glBegin(GL_TRIANGLES);
- for (int i = 0; i < f->size(); ++i) {
- for (int j = 0; j < 3; ++j) {
- vec3 * cv = &(*v)[((*f)[i].v[j] - 1)];
- vec3 * ct = &(*t)[((*f)[i].t[j] - 1)];
- vec3 * cn = &(*n)[((*f)[i].n[j] - 1)];
- glTexCoord2f(ct->x, ct->y);
- glNormal3f(cn->x, cn->y, cn->z);
- glVertex3f(cv->x, cv->y, cv->z);
- }
- }
- glEnd();
- glEndList();
- delete v;
- delete n;
- delete t;
- delete f;
- return dlId;
- }
- // Funkcja, która odpowiada za załadowanie tekstur
- void LoadTextures() {
- cartexture = LoadTexture("Resources\\carmap.bmp", GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR);
- trasatextura = LoadTexture("Resources\\trasa.bmp", GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR);
- GrassTexture = LoadTexture("Resources\\Grass.bmp", GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR);
- SkyTexture = LoadTexture("Resources\\Skydome.bmp", GL_LINEAR, GL_LINEAR_MIPMAP_LINEAR);
- }
- void LoadModels()
- {
- car = LoadObj("Resources\\car.obj");
- trasa = LoadObj("Resources\\trasa.obj");
- }
- int main(int argc, char* argv[])
- {
- glutInit(&argc, argv);
- glutInitWindowPosition(100, 100);
- glutInitWindowSize(640, 360);
- glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
- glutCreateWindow("wyscig");
- glutDisplayFunc(OnRender);
- glutReshapeFunc(OnReshape);
- glutKeyboardFunc(OnKeyPress);
- glutKeyboardUpFunc(OnKeyUp);
- glutPassiveMotionFunc(OnMouseMove);
- glutMotionFunc(OnMouseMove);
- glutTimerFunc(17, OnTimer, 0);
- glEnable(GL_DEPTH_TEST);
- glEnable(GL_CULL_FACE);
- glCullFace(GL_BACK);
- glFrontFace(GL_CCW);
- glEnable(GL_LIGHTING);
- glEnable(GL_LIGHT0);
- glEnable(GL_LIGHT1);
- float gl_amb[] = { 0.0f, 0.0f, 0.0f, 1.0f };
- glLightModelfv(GL_LIGHT_MODEL_AMBIENT, gl_amb);
- player.pos.x = 0.0f;
- player.pos.y = 1.0f;
- player.pos.z = 4.0f;
- player.dir.x = 0.0f;
- player.dir.y = 0.0f;
- player.dir.z = -1.0f;
- player.speed = .4f;
- glutWarpPointer(glutGet(GLUT_WINDOW_WIDTH) / 2, glutGet(GLUT_WINDOW_HEIGHT) / 2);
- mouseX = glutGet(GLUT_WINDOW_WIDTH) / 2;
- mouseY = glutGet(GLUT_WINDOW_HEIGHT) / 2;
- glutSetCursor(GLUT_CURSOR_NONE);
- LoadTextures(); // Każdą teksturę ładujemy *raz* (nie w każdej klatce!), np. przed wejściem do pętli głównej
- LoadModels();
- glutMainLoop();
- return 0;
- }
- #pragma region Obsluga wejscia
- bool keystate[255];
- void OnKeyPress(unsigned char key, int x, int y) {
- if (!keystate[key]) {
- keystate[key] = true;
- OnKeyDown(key, x, y);
- }
- }
- void OnKeyDown(unsigned char key, int x, int y) {
- if (key == 27) {
- glutLeaveMainLoop();
- }
- if (key == 'm' || key == 'M') {
- if (captureMouse) {
- captureMouse = false;
- glutSetCursor(GLUT_CURSOR_LEFT_ARROW);
- }
- else {
- captureMouse = true;
- glutWarpPointer(glutGet(GLUT_WINDOW_WIDTH) / 2, glutGet(GLUT_WINDOW_HEIGHT) / 2);
- glutSetCursor(GLUT_CURSOR_NONE);
- }
- }
- if (key == 'l' || key == 'L') {
- free3DMovement = !free3DMovement;
- }
- }
- void OnKeyUp(unsigned char key, int x, int y) {
- keystate[key] = false;
- }
- void OnMouseMove(int x, int y) {
- mouseX = x;
- mouseY = y;
- }
- #pragma endregion
- void OnTimer(int id) {
- glutTimerFunc(17, OnTimer, 0);
- #pragma region Ruch kamery
- if (captureMouse) {
- player.velRY = -mouseSensitivity * (glutGet(GLUT_WINDOW_WIDTH) / 2 - mouseX);
- player.velRX = mouseSensitivity * (glutGet(GLUT_WINDOW_HEIGHT) / 2 - mouseY);
- glutWarpPointer(glutGet(GLUT_WINDOW_WIDTH) / 2, glutGet(GLUT_WINDOW_HEIGHT) / 2);
- }
- if (keystate['w']) {
- player.velM = player.speed*2;
- }
- if (keystate['s']) {
- player.velM = -player.speed*2;
- }
- if (keystate['a']) {
- player.velS = -player.speed*2;
- }
- if (keystate['d']) {
- player.velS = player.speed*2;
- }
- if (keystate['q']) {
- player.velRY = -player.speed*2;
- }
- if (keystate['e']) {
- player.velRY = player.speed*2;
- }
- if (keystate['f']) {
- player.velRX = -player.speed*2;
- }
- if (keystate['c']) {
- player.velRX = player.speed*2;
- }
- float T = acos(player.dir.y);
- float G = atan2(player.dir.z, player.dir.x);
- T -= player.velRX * .03f;
- G += player.velRY * .03f;
- player.dir.x = sin(T) * cos(G);
- player.dir.y = cos(T);
- player.dir.z = sin(T) * sin(G);
- vec3 per;
- per.x = -player.dir.z;
- per.y = 0;
- per.z = player.dir.x;
- player.pos.x += player.dir.x * player.velM * .1f;
- if (free3DMovement) {
- player.pos.y += player.dir.y * player.velM * .1f;
- }
- else {
- player.pos.y = 1.0f;
- }
- player.pos.z += player.dir.z * player.velM * .1f;
- player.pos.x += per.x * player.velS * .1f;
- if (free3DMovement) {
- player.pos.y += player.dir.y * player.velM * .1f;
- }
- else {
- player.pos.y = 1.0f;
- }
- player.pos.z += per.z * player.velS * .1f;
- player.velRX /= 1.2;
- player.velRY /= 1.2;
- player.velM /= 1.2;
- player.velS /= 1.2;
- #pragma endregion
- }
- void OnRender() {
- T = glutGet(GLUT_ELAPSED_TIME);
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
- /*gluLookAt(
- player.pos.x, player.pos.y, player.pos.z,
- player.pos.x + player.dir.x, player.pos.y + player.dir.y, player.pos.z + player.dir.z,
- 0.0f, 1.0f, 0.0f
- );
- */
- gluLookAt(
- player.pos.x + 0, player.pos.y + 4, player.pos.z + 4, // Pozycja kamery
- player.pos.x, player.pos.y, player.pos.z, // Punkt na ktory patrzy kamera (pozycja + kierunek)
- 0.0f, 0.5f, 0.0f // Wektor wyznaczajacy pion
- );
- #pragma region Swiatlo
- float l0_amb[] = { 0.2f, 0.2f, 0.2f, 1.0f };
- float l0_dif[] = { 1.0f, 1.0f, 1.0f, 1.0f };
- float l0_spe[] = { 1.0f, 1.0f, 1.0f, 1.0f };
- float l0_pos[] = { 1.0f, 5.0f, 4.0f, 1.0f };
- glLightfv(GL_LIGHT0, GL_AMBIENT, l0_amb);
- glLightfv(GL_LIGHT0, GL_DIFFUSE, l0_dif);
- glLightfv(GL_LIGHT0, GL_SPECULAR, l0_spe);
- glLightfv(GL_LIGHT0, GL_POSITION, l0_pos);
- #pragma endregion
- #pragma region Rysowanie scian
- #pragma region Podloga
- {
- glBindTexture(GL_TEXTURE_2D, GrassTexture);
- glPushMatrix();
- glTranslatef(0.0f, 0.0f, 0.0f);
- glBegin(GL_QUADS);
- float m_amb[] = { 1.0f, 1.0f, 1.0f, 1.0f };
- float m_dif[] = { 1.0f, 1.0f, 1.0f, 1.0f };
- float m_spe[] = { 0.0f, 0.0f, 0.0f, 1.0f };
- glMaterialfv(GL_FRONT, GL_AMBIENT, m_amb);
- glMaterialfv(GL_FRONT, GL_DIFFUSE, m_dif);
- glMaterialfv(GL_FRONT, GL_SPECULAR, m_spe);
- glTexCoord2f(0.0f, 0.0f);
- glNormal3f(0.0f, 1.0f, 0.0f);
- glVertex3f(-2.0f, 0.0f, -14.0f);
- glTexCoord2f(0.0f, 1.0f);
- glNormal3f(0.0f, 1.0f, 0.0f);
- glVertex3f(-2.0f, 0.0f, 5.0f);
- glTexCoord2f(1.0f, 1.0f);
- glNormal3f(0.0f, 1.0f, 0.0f);
- glVertex3f(2.0f, 0.0f, 5.0f);
- glTexCoord2f(1.0f, 0.0f);
- glNormal3f(0.0f, 1.0f, 0.0f);
- glVertex3f(2.0f, 0.0f, -14.0f);
- }
- #pragma endregion
- /*
- #pragma region niebo
- int Np = 36;
- float radius = 20.0f;
- glEnable(GL_TEXTURE_2D);
- glBindTexture(GL_TEXTURE_2D, SkyTexture);
- glNewList(displayListId, GL_COMPILE);
- glBegin(GL_QUAD_STRIP);
- for (int j = -1; j < Np / 2; ++j) {
- for (int i = 0; i <= Np; ++i) {
- float t1 = PI * j / Np - PI / 2;
- float t2 = PI * (j + 1) / Np - PI / 2;
- float p = PI * 2.0f * i / Np;
- float tx1 = sin(t1) * cos(p);
- float tx2 = sin(t2) * cos(p);
- float tz1 = sin(t1) * sin(p);
- float tz2 = sin(t2) * sin(p);
- float ty1 = cos(t1);
- float ty2 = cos(t2);
- float tr1 = -sin(t1);
- float tr2 = -sin(t2);
- float x1 = radius * tx1;
- float x2 = radius * tx2;
- float z1 = radius * tz1;
- float z2 = radius * tz2;
- float y1 = radius * ty1;
- float y2 = radius * ty2;
- glTexCoord2f(.5f + .5f * tr2 * tx2, .5f + .5f * tr2 * tz2);
- glNormal3f(x2, y2, z2);
- glVertex3f(x2, y2, z2);
- glTexCoord2f(.5f + .5f * tr1 * tx1, .5f + .5f * tr1 * tz1);
- glNormal3f(x1, y1, z1);
- glVertex3f(x1, y1, z1);
- }
- }
- #pragma endregion
- */
- /*
- #pragma region ziemia
- float size = 8.0f;
- glBindTexture(GL_TEXTURE_2D, GrassTexture);
- glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
- glCallList(displayListId);
- glDisable(GL_TEXTURE_2D);
- glTexCoord2f(size, 0.0f);
- glVertex3f(size, 0.0f, -size);
- glTexCoord2f(0.0f, 0.0f);
- glVertex3f(-size, 0.0f, -size);
- glTexCoord2f(0.0f, size);
- glVertex3f(-size, 0.0f, size);
- glTexCoord2f(size, size);
- glVertex3f(size, 0.0f, size);
- #pragma endregion
- */
- glEnd();
- #pragma endregion
- #pragma region Rysowanie oteksturowanych quadów
- // Włączamy teksturowanie
- glEnable(GL_TEXTURE_2D);
- // Ustawienie sposobu teksturowania - GL_MODULATE sprawia, że światło ma wpływ na teksturę; GL_DECAL i GL_REPLACE rysują teksturę tak jak jest
- glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
- // Ustawienie materiału
- float m_amb[] = { 0.7f, 0.7f, 0.7f, 1.0f };
- float m_dif[] = { 1.0f, 1.0f, 1.0f, 1.0f };
- float m_spe[] = { 0.0f, 0.0f, 0.0f, 1.0f };
- glMaterialfv(GL_FRONT, GL_AMBIENT, m_amb);
- glMaterialfv(GL_FRONT, GL_DIFFUSE, m_dif);
- glMaterialfv(GL_FRONT, GL_SPECULAR, m_spe);
- // Kąt obrotu quadów
- //float rot = T / 50.0f;
- //float rot = 0.0f;
- #pragma region car
- //TUTAJ rysuje swoj obiekt
- glPushMatrix();
- glBindTexture(GL_TEXTURE_2D, cartexture);
- glTranslatef(player.pos.x, player.pos.y, player.pos.z);
- //glScalef(0.5, 0.5, 0.5);
- //glRotatef(270, 0, 0, 0);
- glCallList(car);
- glPopMatrix();
- #pragma endregion
- /*
- #pragma region trasa
- glPushMatrix();
- glBindTexture(GL_TEXTURE_2D, trasatextura);
- glTranslatef(0.0, -5.0, 0.0);
- glScalef(20.0, 20.0, 20.0);
- //glRotatef(270, 0, 0, 0);
- glCallList(trasa);
- glPopMatrix();
- #pragma endregion
- */
- /*#pragma region nearest
- // Wybór tekstury korzystając z jej id
- glBindTexture(GL_TEXTURE_2D, texCheckboard_nearest);
- glPushMatrix();
- glScalef(.5f, .5f, .5f);
- glTranslatef(-4.5f, 2.0f, 3.0f);
- glRotatef(rot, 0.0f, 1.0f, 0.0f);
- glBegin(GL_QUADS);
- glTexCoord2f( 0.0f, 1.0f);
- glNormal3f( 0.0f, 0.0f, 1.0f);
- glVertex3f(-1.0f, 1.0f, 0.0f);
- glTexCoord2f( 0.0f, 0.0f);
- glNormal3f( 0.0f, 0.0f, 1.0f);
- glVertex3f(-1.0f, -1.0f, 0.0f);
- glTexCoord2f( 1.0f, 0.0f);
- glNormal3f( 0.0f, 0.0f, 1.0f);
- glVertex3f( 1.0f, -1.0f, 0.0f);
- glTexCoord2f( 1.0f, 1.0f);
- glNormal3f( 0.0f, 0.0f, 1.0f);
- glVertex3f( 1.0f, 1.0f, 0.0f);
- glTexCoord2f( 0.0f, 0.0f);
- glNormal3f( 0.0f, 0.0f, -1.0f);
- glVertex3f(-1.0f, -1.0f, 0.0f);
- glTexCoord2f( 0.0f, 1.0f);
- glNormal3f( 0.0f, 0.0f, -1.0f);
- glVertex3f(-1.0f, 1.0f, 0.0f);
- glTexCoord2f( 1.0f, 1.0f);
- glNormal3f( 0.0f, 0.0f, -1.0f);
- glVertex3f( 1.0f, 1.0f, 0.0f);
- glTexCoord2f( 1.0f, 0.0f);
- glNormal3f( 0.0f, 0.0f, -1.0f);
- glVertex3f( 1.0f, -1.0f, 0.0f);
- glEnd();
- glPopMatrix();
- #pragma endregion
- #pragma region linear
- // Wybór tekstury korzystając z jej id
- glBindTexture(GL_TEXTURE_2D, texCheckboard_linear);
- glPushMatrix();
- glScalef(.5f, .5f, .5f);
- glTranslatef(-1.5f, 2.0f, 3.0f);
- glRotatef(rot, 0.0f, 1.0f, 0.0f);
- glBegin(GL_QUADS);
- glTexCoord2f( 0.0f, 1.0f);
- glNormal3f( 0.0f, 0.0f, 1.0f);
- glVertex3f(-1.0f, 1.0f, 0.0f);
- glTexCoord2f( 0.0f, 0.0f);
- glNormal3f( 0.0f, 0.0f, 1.0f);
- glVertex3f(-1.0f, -1.0f, 0.0f);
- glTexCoord2f( 1.0f, 0.0f);
- glNormal3f( 0.0f, 0.0f, 1.0f);
- glVertex3f( 1.0f, -1.0f, 0.0f);
- glTexCoord2f( 1.0f, 1.0f);
- glNormal3f( 0.0f, 0.0f, 1.0f);
- glVertex3f( 1.0f, 1.0f, 0.0f);
- glTexCoord2f( 0.0f, 0.0f);
- glNormal3f( 0.0f, 0.0f, -1.0f);
- glVertex3f(-1.0f, -1.0f, 0.0f);
- glTexCoord2f( 0.0f, 1.0f);
- glNormal3f( 0.0f, 0.0f, -1.0f);
- glVertex3f(-1.0f, 1.0f, 0.0f);
- glTexCoord2f( 1.0f, 1.0f);
- glNormal3f( 0.0f, 0.0f, -1.0f);
- glVertex3f( 1.0f, 1.0f, 0.0f);
- glTexCoord2f( 1.0f, 0.0f);
- glNormal3f( 0.0f, 0.0f, -1.0f);
- glVertex3f( 1.0f, -1.0f, 0.0f);
- glEnd();
- glPopMatrix();
- #pragma endregion
- #pragma region linear_mm
- // Wybór tekstury korzystając z jej id
- glBindTexture(GL_TEXTURE_2D, texCheckboard_linear_mm);
- glPushMatrix();
- glScalef(.5f, .5f, .5f);
- glTranslatef(1.5f, 2.0f, 3.0f);
- glRotatef(rot, 0.0f, 1.0f, 0.0f);
- glBegin(GL_QUADS);
- glTexCoord2f( 0.0f, 1.0f);
- glNormal3f( 0.0f, 0.0f, 1.0f);
- glVertex3f(-1.0f, 1.0f, 0.0f);
- glTexCoord2f( 0.0f, 0.0f);
- glNormal3f( 0.0f, 0.0f, 1.0f);
- glVertex3f(-1.0f, -1.0f, 0.0f);
- glTexCoord2f( 1.0f, 0.0f);
- glNormal3f( 0.0f, 0.0f, 1.0f);
- glVertex3f( 1.0f, -1.0f, 0.0f);
- glTexCoord2f( 1.0f, 1.0f);
- glNormal3f( 0.0f, 0.0f, 1.0f);
- glVertex3f( 1.0f, 1.0f, 0.0f);
- glTexCoord2f( 0.0f, 0.0f);
- glNormal3f( 0.0f, 0.0f, -1.0f);
- glVertex3f(-1.0f, -1.0f, 0.0f);
- glTexCoord2f( 0.0f, 1.0f);
- glNormal3f( 0.0f, 0.0f, -1.0f);
- glVertex3f(-1.0f, 1.0f, 0.0f);
- glTexCoord2f( 1.0f, 1.0f);
- glNormal3f( 0.0f, 0.0f, -1.0f);
- glVertex3f( 1.0f, 1.0f, 0.0f);
- glTexCoord2f( 1.0f, 0.0f);
- glNormal3f( 0.0f, 0.0f, -1.0f);
- glVertex3f( 1.0f, -1.0f, 0.0f);
- glEnd();
- glPopMatrix();
- #pragma endregion
- #pragma region linear_mm_linear
- // Wybór tekstury korzystając z jej id
- glBindTexture(GL_TEXTURE_2D, texCheckboard_linear_mm_linear);
- glPushMatrix();
- glScalef(.5f, .5f, .5f);
- glTranslatef(4.5f, 2.0f, 3.0f);
- glRotatef(rot, 0.0f, 1.0f, 0.0f);
- glBegin(GL_QUADS);
- glTexCoord2f( 0.0f, 1.0f);
- glNormal3f( 0.0f, 0.0f, 1.0f);
- glVertex3f(-1.0f, 1.0f, 0.0f);
- glTexCoord2f( 0.0f, 0.0f);
- glNormal3f( 0.0f, 0.0f, 1.0f);
- glVertex3f(-1.0f, -1.0f, 0.0f);
- glTexCoord2f( 1.0f, 0.0f);
- glNormal3f( 0.0f, 0.0f, 1.0f);
- glVertex3f( 1.0f, -1.0f, 0.0f);
- glTexCoord2f( 1.0f, 1.0f);
- glNormal3f( 0.0f, 0.0f, 1.0f);
- glVertex3f( 1.0f, 1.0f, 0.0f);
- glTexCoord2f( 0.0f, 0.0f);
- glNormal3f( 0.0f, 0.0f, -1.0f);
- glVertex3f(-1.0f, -1.0f, 0.0f);
- glTexCoord2f( 0.0f, 1.0f);
- glNormal3f( 0.0f, 0.0f, -1.0f);
- glVertex3f(-1.0f, 1.0f, 0.0f);
- glTexCoord2f( 1.0f, 1.0f);
- glNormal3f( 0.0f, 0.0f, -1.0f);
- glVertex3f( 1.0f, 1.0f, 0.0f);
- glTexCoord2f( 1.0f, 0.0f);
- glNormal3f( 0.0f, 0.0f, -1.0f);
- glVertex3f( 1.0f, -1.0f, 0.0f);
- glEnd();
- glPopMatrix();
- #pragma endregion
- #pragma region nearest x10
- // Wybór tekstury korzystając z jej id
- glBindTexture(GL_TEXTURE_2D, texCheckboard_nearest);
- glPushMatrix();
- glScalef(.5f, .5f, .5f);
- glTranslatef(-4.5f, 2.0f, -3.0f);
- glRotatef(rot, 0.0f, 1.0f, 0.0f);
- glBegin(GL_QUADS);
- glTexCoord2f( 0.0f, 10.0f);
- glNormal3f( 0.0f, 0.0f, 1.0f);
- glVertex3f(-1.0f, 1.0f, 0.0f);
- glTexCoord2f( 0.0f, 0.0f);
- glNormal3f( 0.0f, 0.0f, 1.0f);
- glVertex3f(-1.0f, -1.0f, 0.0f);
- glTexCoord2f(10.0f, 0.0f);
- glNormal3f( 0.0f, 0.0f, 1.0f);
- glVertex3f( 1.0f, -1.0f, 0.0f);
- glTexCoord2f(10.0f, 10.0f);
- glNormal3f( 0.0f, 0.0f, 1.0f);
- glVertex3f( 1.0f, 1.0f, 0.0f);
- glTexCoord2f( 0.0f, 0.0f);
- glNormal3f( 0.0f, 0.0f, -1.0f);
- glVertex3f(-1.0f, -1.0f, 0.0f);
- glTexCoord2f( 0.0f, 10.0f);
- glNormal3f( 0.0f, 0.0f, -1.0f);
- glVertex3f(-1.0f, 1.0f, 0.0f);
- glTexCoord2f(10.0f, 10.0f);
- glNormal3f( 0.0f, 0.0f, -1.0f);
- glVertex3f( 1.0f, 1.0f, 0.0f);
- glTexCoord2f(10.0f, 0.0f);
- glNormal3f( 0.0f, 0.0f, -1.0f);
- glVertex3f( 1.0f, -1.0f, 0.0f);
- glEnd();
- glPopMatrix();
- #pragma endregion
- #pragma region linear x10
- // Wybór tekstury korzystając z jej id
- glBindTexture(GL_TEXTURE_2D, texCheckboard_linear);
- glPushMatrix();
- glScalef(.5f, .5f, .5f);
- glTranslatef(-1.5f, 2.0f, -3.0f);
- glRotatef(rot, 0.0f, 1.0f, 0.0f);
- glBegin(GL_QUADS);
- glTexCoord2f( 0.0f, 10.0f);
- glNormal3f( 0.0f, 0.0f, 1.0f);
- glVertex3f(-1.0f, 1.0f, 0.0f);
- glTexCoord2f( 0.0f, 0.0f);
- glNormal3f( 0.0f, 0.0f, 1.0f);
- glVertex3f(-1.0f, -1.0f, 0.0f);
- glTexCoord2f(10.0f, 0.0f);
- glNormal3f( 0.0f, 0.0f, 1.0f);
- glVertex3f( 1.0f, -1.0f, 0.0f);
- glTexCoord2f(10.0f, 10.0f);
- glNormal3f( 0.0f, 0.0f, 1.0f);
- glVertex3f( 1.0f, 1.0f, 0.0f);
- glTexCoord2f( 0.0f, 0.0f);
- glNormal3f( 0.0f, 0.0f, -1.0f);
- glVertex3f(-1.0f, -1.0f, 0.0f);
- glTexCoord2f( 0.0f, 10.0f);
- glNormal3f( 0.0f, 0.0f, -1.0f);
- glVertex3f(-1.0f, 1.0f, 0.0f);
- glTexCoord2f(10.0f, 10.0f);
- glNormal3f( 0.0f, 0.0f, -1.0f);
- glVertex3f( 1.0f, 1.0f, 0.0f);
- glTexCoord2f(10.0f, 0.0f);
- glNormal3f( 0.0f, 0.0f, -1.0f);
- glVertex3f( 1.0f, -1.0f, 0.0f);
- glEnd();
- glPopMatrix();
- #pragma endregion
- #pragma region linear_mm x10
- // Wybór tekstury korzystając z jej id
- glBindTexture(GL_TEXTURE_2D, texCheckboard_linear_mm);
- glPushMatrix();
- glScalef(.5f, .5f, .5f);
- glTranslatef(1.5f, 2.0f, -3.0f);
- glRotatef(rot, 0.0f, 1.0f, 0.0f);
- glBegin(GL_QUADS);
- glTexCoord2f( 0.0f, 10.0f);
- glNormal3f( 0.0f, 0.0f, 1.0f);
- glVertex3f(-1.0f, 1.0f, 0.0f);
- glTexCoord2f( 0.0f, 0.0f);
- glNormal3f( 0.0f, 0.0f, 1.0f);
- glVertex3f(-1.0f, -1.0f, 0.0f);
- glTexCoord2f(10.0f, 0.0f);
- glNormal3f( 0.0f, 0.0f, 1.0f);
- glVertex3f( 1.0f, -1.0f, 0.0f);
- glTexCoord2f(10.0f, 10.0f);
- glNormal3f( 0.0f, 0.0f, 1.0f);
- glVertex3f( 1.0f, 1.0f, 0.0f);
- glTexCoord2f( 0.0f, 0.0f);
- glNormal3f( 0.0f, 0.0f, -1.0f);
- glVertex3f(-1.0f, -1.0f, 0.0f);
- glTexCoord2f( 0.0f, 10.0f);
- glNormal3f( 0.0f, 0.0f, -1.0f);
- glVertex3f(-1.0f, 1.0f, 0.0f);
- glTexCoord2f(10.0f, 10.0f);
- glNormal3f( 0.0f, 0.0f, -1.0f);
- glVertex3f( 1.0f, 1.0f, 0.0f);
- glTexCoord2f(10.0f, 0.0f);
- glNormal3f( 0.0f, 0.0f, -1.0f);
- glVertex3f( 1.0f, -1.0f, 0.0f);
- glEnd();
- glPopMatrix();
- #pragma endregion
- #pragma region linear_mm_linear x10
- // Wybór tekstury korzystając z jej id
- glBindTexture(GL_TEXTURE_2D, texCheckboard_linear_mm_linear);
- glPushMatrix();
- glScalef(.5f, .5f, .5f);
- glTranslatef(4.5f, 2.0f, -3.0f);
- glRotatef(rot, 0.0f, 1.0f, 0.0f);
- glBegin(GL_QUADS);
- glTexCoord2f( 0.0f, 10.0f);
- glNormal3f( 0.0f, 0.0f, 1.0f);
- glVertex3f(-1.0f, 1.0f, 0.0f);
- glTexCoord2f( 0.0f, 0.0f);
- glNormal3f( 0.0f, 0.0f, 1.0f);
- glVertex3f(-1.0f, -1.0f, 0.0f);
- glTexCoord2f(10.0f, 0.0f);
- glNormal3f( 0.0f, 0.0f, 1.0f);
- glVertex3f( 1.0f, -1.0f, 0.0f);
- glTexCoord2f(10.0f, 10.0f);
- glNormal3f( 0.0f, 0.0f, 1.0f);
- glVertex3f( 1.0f, 1.0f, 0.0f);
- glTexCoord2f( 0.0f, 0.0f);
- glNormal3f( 0.0f, 0.0f, -1.0f);
- glVertex3f(-1.0f, -1.0f, 0.0f);
- glTexCoord2f( 0.0f, 10.0f);
- glNormal3f( 0.0f, 0.0f, -1.0f);
- glVertex3f(-1.0f, 1.0f, 0.0f);
- glTexCoord2f(10.0f, 10.0f);
- glNormal3f( 0.0f, 0.0f, -1.0f);
- glVertex3f( 1.0f, 1.0f, 0.0f);
- glTexCoord2f(10.0f, 0.0f);
- glNormal3f( 0.0f, 0.0f, -1.0f);
- glVertex3f( 1.0f, -1.0f, 0.0f);
- glEnd();
- glPopMatrix();
- #pragma endregion*/
- // Wyłączenie teksturowania - geometria renderowana od tego miejsca nie będzie już oteksturowana
- glDisable(GL_TEXTURE_2D);
- #pragma endregion
- glutSwapBuffers();
- glFlush();
- glutPostRedisplay();
- }
- void OnReshape(int width, int height) {
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glViewport(0, 0, width, height);
- gluPerspective(60.0f, (float) width / height, .01f, 100.0f);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement