· 6 years ago · Dec 04, 2019, 10:32 PM
1Skip to content
2Search or jump to…
3
4Pull requests
5Issues
6Marketplace
7Explore
8
9@MatPasGit
10Learn Git and GitHub without any code!
11Using the Hello World guide, you’ll start a branch, write comments, and open a pull request.
12
13
141
1500Torak28/GrafikaKomputerowa
16 Code Issues 0 Pull requests 0 Actions Projects 0 Wiki Security Insights
17GrafikaKomputerowa/Ćw6 OpenGL - teksturowanie powierzchni obiektów.cpp
18@Torak28 Torak28 Dodanie lab 5
191c58e91 on 23 Jan 2017
20611 lines (573 sloc) 22 KB
21
22#include <windows.h>
23#include <gl/gl.h>
24#include <gl/glut.h>
25#include <cmath>
26#include <iostream>
27#include <fstream>
28
29typedef float point3[3];
30static GLfloat viewer[] = { 0.0, 0.0, 0.0 };
31GLfloat theta = 0.0;
32GLfloat phi = 0.0;
33GLfloat R = 10.0;
34static GLfloat pix2angle;
35static GLint status = 0;
36static int x_pos_old = 0;
37static int y_pos_old = 0;
38static int z_pos_old = 0;
39float fix = 1.0;
40
41#define M_PI 3.14159265358979323846
42typedef float point3[3];
43
44using namespace std;
45
46static int delta_x = 0;
47static int delta_y = 0;
48static int delta_z = 0;
49
50void Mouse(int btn, int state, int x, int y)
51{
52 if (btn == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
53 {
54 x_pos_old = x;
55 y_pos_old = y;
56 status = 1;
57 }
58 else if (btn == GLUT_RIGHT_BUTTON && state == GLUT_DOWN) {
59 y_pos_old = y;
60 status = 2;
61 }
62 else
63 status = 0;
64}
65
66void Motion(GLsizei x, GLsizei y)
67{
68 delta_x = x - x_pos_old;
69 delta_y = y - y_pos_old;
70 x_pos_old = x;
71 y_pos_old = y;
72 glutPostRedisplay();
73}
74
75GLbyte *LoadTGAImage(const char *FileName, GLint *ImWidth, GLint *ImHeight, GLint *ImComponents, GLenum *ImFormat)
76{
77#pragma pack(1)
78 typedef struct
79 {
80 GLbyte idlength;
81 GLbyte colormaptype;
82 GLbyte datatypecode;
83 unsigned short colormapstart;
84 unsigned short colormaplength;
85 unsigned char colormapdepth;
86 unsigned short x_orgin;
87 unsigned short y_orgin;
88 unsigned short width;
89 unsigned short height;
90 GLbyte bitsperpixel;
91 GLbyte descriptor;
92 }TGAHEADER;
93#pragma pack(8)
94
95
96 FILE *pFile;
97 TGAHEADER tgaHeader;
98 unsigned long lImageSize;
99 short sDepth;
100 GLbyte *pbitsperpixel = NULL;
101 *ImWidth = 0;
102 *ImHeight = 0;
103 *ImFormat = GL_BGR_EXT;
104 *ImComponents = GL_RGB8;
105 fopen_s(&pFile, FileName, "rb");
106 if (pFile == NULL)
107 return NULL;
108 fread(&tgaHeader, sizeof(TGAHEADER), 1, pFile);
109 *ImWidth = tgaHeader.width;
110 *ImHeight = tgaHeader.height;
111 sDepth = tgaHeader.bitsperpixel / 8;
112 if (tgaHeader.bitsperpixel != 8 && tgaHeader.bitsperpixel != 24 && tgaHeader.bitsperpixel != 32)
113 return NULL;
114 lImageSize = tgaHeader.width * tgaHeader.height * sDepth;
115 pbitsperpixel = (GLbyte*)malloc(lImageSize * sizeof(GLbyte));
116 if (pbitsperpixel == NULL)
117 return NULL;
118 if (fread(pbitsperpixel, lImageSize, 1, pFile) != 1)
119 {
120 free(pbitsperpixel);
121 return NULL;
122 }
123 switch (sDepth)
124 {
125 case 3:
126 *ImFormat = GL_BGR_EXT;
127 *ImComponents = GL_RGB8;
128 break;
129 case 4:
130 *ImFormat = GL_BGRA_EXT;
131 *ImComponents = GL_RGBA8;
132 break;
133 case 1:
134 *ImFormat = GL_LUMINANCE;
135 *ImComponents = GL_LUMINANCE8;
136 break;
137 };
138 fclose(pFile);
139 return pbitsperpixel;
140}
141
142void Axes(void)
143{
144 point3 x_min = { -5.0, 0.0, 0.0 };
145 point3 x_max = { 5.0, 0.0, 0.0 };
146 point3 y_min = { 0.0, -5.0, 0.0 };
147 point3 y_max = { 0.0, 5.0, 0.0 };
148 point3 z_min = { 0.0, 0.0, -5.0 };
149 point3 z_max = { 0.0, 0.0, 5.0 };
150 glColor3f(1.0f, 0.0f, 0.0f);
151 glBegin(GL_LINES);
152 glVertex3fv(x_min);
153 glVertex3fv(x_max);
154 glEnd();
155 glColor3f(0.0f, 1.0f, 0.0f);
156 glBegin(GL_LINES);
157 glVertex3fv(y_min);
158 glVertex3fv(y_max);
159 glEnd();
160
161 glColor3f(0.0f, 0.0f, 1.0f);
162 glBegin(GL_LINES);
163 glVertex3fv(z_min);
164 glVertex3fv(z_max);
165 glEnd();
166}
167
168float wyliczX(float u, float v) {
169 float PIV = M_PI * v;
170 return ((-90 * pow(u, 5) + 225 * pow(u, 4) - 270 * pow(u, 3) + 180 * pow(u, 2) - 45 * u) * cos(PIV));
171}
172float wyliczY(float u, float v) {
173 return (160 * pow(u, 4) - 320 * pow(u, 3) + 160 * pow(u, 2));
174}
175float wyliczZ(float u, float v) {
176 float PIV = M_PI * v;
177 return ((-90 * pow(u, 5) + 225 * pow(u, 4) - 270 * pow(u, 3) + 180 * pow(u, 2) - 45 * u) * sin(PIV));
178}
179float wyliczXu(float u, float v) {
180 float PIV = M_PI * v;
181 return (-450 * pow(u, 4) + 900 * pow(u, 3) - 810 * pow(u, 2) + 360 * u - 45) * cos(PIV);
182}
183float wyliczXv(float u, float v) {
184 float PIV = M_PI * v;
185 return M_PI * (90 * pow(u, 5) - 225 * pow(u, 4) + 270 * pow(u, 3) - 180 * pow(u, 2) + 45 * u) * sin(PIV);
186}
187float wyliczYu(float u, float v) {
188 return (640 * pow(u, 3) - 960 * pow(u, 2) + 320 * u);
189}
190float wyliczYv(float u, float v) {
191 return 0;
192}
193float wyliczZu(float u, float v) {
194 float PIV = M_PI * v;
195 return (-450 * pow(u, 4) + 900 * pow(u, 3) - 810 * pow(u, 2) + 360 * u - 45) * sin(PIV);
196}
197float wyliczZv(float u, float v) {
198 float PIV = M_PI * v;
199 return -M_PI * (90 * pow(u, 5) - 225 * pow(u, 4) + 270 * pow(u, 3) - 180 * pow(u, 2) + 45 * u) * cos(PIV);
200}
201float dlugoscWektora(float xv, float yv, float zv) {
202 return sqrt(pow(xv, 2) + pow(yv, 2) + pow(zv, 2));
203}
204
205struct Punkt {
206 float x;
207 float y;
208 float z;
209 float xRGB;
210 float yRGB;
211 float zRGB;
212 float xV;
213 float yV;
214 float zV;
215 float i;
216 float j;
217};
218
219
220/********************************OBSŁUGA********************************/
221// 1- punkty, 2- siatka, 3 - wypełnione trójkąty, 4 - czjniczek
222int model = 3;
223int ruch = 1;
224float KAT = 90.0;
225
226// Ilosc podzialow boku kwadratu jednostkowego
227const int N = 250;
228// Obrot
229static GLfloat obrot[] = { 0.0, 0.0, 0.0 };
230// Tablica sluzaca do zapisywania punktow
231struct Punkt punktyJaja[N][N];
232
233float krok = 1.0 / N;
234
235float x_swiatla = 0;
236float y_swiatla = 0;
237float x_swiatla2 = 0;
238float y_swiatla2 = 0;
239
240/********************************KONIEC********************************/
241
242void nic() {
243 // Liczenie Punktow
244 for (int i = 0; i < N; i++) {
245 for (int j = 0; j < N; j++) {
246 punktyJaja[i][j].x = wyliczX(i * krok, j * krok);
247 punktyJaja[i][j].y = wyliczY(i * krok, j * krok);
248 punktyJaja[i][j].z = wyliczZ(i * krok, j * krok);
249 //Kolorki
250 punktyJaja[i][j].xRGB = ((double)rand() / (RAND_MAX));
251 punktyJaja[i][j].yRGB = ((double)rand() / (RAND_MAX));
252 punktyJaja[i][j].zRGB = ((double)rand() / (RAND_MAX));
253
254 float xU = wyliczXu(i * krok, j * krok);
255 float xV = wyliczXv(i * krok, j * krok);
256 float yU = wyliczYu(i * krok, j * krok);
257 float yV = wyliczYv(i * krok, j * krok);
258 float zU = wyliczZu(i * krok, j * krok);
259 float zV = wyliczZv(i * krok, j * krok);
260 float xVector = (yU * zV - zU * yV);
261 float yVector = (zU * xV - xU * zV);
262 float zVector = (xU * yV - yU * xV);
263 float dl = dlugoscWektora(xVector, yVector, zVector);
264 punktyJaja[i][j].xV = xVector / dl;
265 punktyJaja[i][j].yV = yVector / dl;
266 punktyJaja[i][j].zV = zVector / dl;
267 punktyJaja[i][j].i = i * krok;
268 punktyJaja[i][j].j = j * krok;
269 }
270 }
271}
272
273void Jajo() {
274 nic();
275 // Punkty
276 if (model == 1) {
277 for (int i = 0; i < N; i++) {
278 for (int j = 0; j < N; j++) {
279 glBegin(GL_POINTS);
280 glColor3f(1.0f, 0.0f, 0.0f);
281 glVertex3f(punktyJaja[i][j].x, punktyJaja[i][j].y - 5, punktyJaja[i][j].z);
282 glEnd();
283 }
284 }
285 }
286 // Linie
287 else if (model == 2) {
288 glBegin(GL_LINES);
289 glColor3f(1.0f, 1.0f, 1.0f);
290 //Poziome Linie
291 for (int i = 0; i < N; i++) {
292 int pom = N - i;
293 for (int j = 0; j < N - 1; j++) {
294 glVertex3f(punktyJaja[i][j].x, punktyJaja[i][j].y - 5, punktyJaja[i][j].z);
295 glVertex3f(punktyJaja[i][j + 1].x, punktyJaja[i][j + 1].y - 5, punktyJaja[i][j + 1].z);
296 }
297 // Problem z nie rysowaniem łączeń w okregu
298 if (pom != N) {
299 glVertex3f(punktyJaja[i][0].x, punktyJaja[i][0].y - 5, punktyJaja[i][0].z);
300 glVertex3f(punktyJaja[pom][N - 1].x, punktyJaja[pom][N - 1].y - 5, punktyJaja[pom][N - 1].z);
301 }
302 }
303
304 //Poionowe Linie
305 glColor3f(1.0f, 1.0f, 0.0f);
306 for (int i = 0; i < N; i++) {
307 int pom = N - i;
308 for (int j = 0; j < N; j++) {
309 // Problem w nierysowaniu łączenia z punktem [0][0]
310 if (i == N - 1) {
311 glVertex3f(punktyJaja[i][j].x, punktyJaja[i][j].y - 5, punktyJaja[i][j].z);
312 glVertex3f(punktyJaja[0][0].x, punktyJaja[0][0].y - 5, punktyJaja[0][0].z);
313 }
314 else {
315 glVertex3f(punktyJaja[i][j].x, punktyJaja[i][j].y - 5, punktyJaja[i][j].z);
316 glVertex3f(punktyJaja[i + 1][j].x, punktyJaja[i + 1][j].y - 5, punktyJaja[i + 1][j].z);
317 }
318 }
319 }
320
321 //Skośne Linie
322 glColor3f(0.294f, 0.0f, 0.510f);
323 for (int i = N / 2; i < N; i++) {
324 int pom = N - i;
325 for (int j = 0; j < N - 1; j++) {
326 if (i == N - 1) {
327 glVertex3f(punktyJaja[i][j].x, punktyJaja[i][j].y - 5, punktyJaja[i][j].z);
328 glVertex3f(punktyJaja[0][0].x, punktyJaja[0][0].y - 5, punktyJaja[0][0].z);
329 }
330 else {
331 glVertex3f(punktyJaja[i][j].x, punktyJaja[i][j].y - 5, punktyJaja[i][j].z);
332 glVertex3f(punktyJaja[i + 1][j + 1].x, punktyJaja[i + 1][j + 1].y - 5, punktyJaja[i + 1][j + 1].z);
333 }
334 if (pom != N) {
335 glVertex3f(punktyJaja[i][0].x, punktyJaja[i][0].y - 5, punktyJaja[i][0].z);
336 glVertex3f(punktyJaja[pom + 1][N - 1].x, punktyJaja[pom + 1][N - 1].y - 5, punktyJaja[pom + 1][N - 1].z);
337 }
338 }
339 }
340 glVertex3f(punktyJaja[0][0].x, punktyJaja[0][0].y - 5, punktyJaja[0][0].z);
341 glVertex3f(punktyJaja[1][N - 1].x, punktyJaja[1][N - 1].y - 5, punktyJaja[1][N - 1].z);
342
343 glVertex3f(punktyJaja[0][0].x, punktyJaja[0][0].y - 5, punktyJaja[0][0].z);
344 glVertex3f(punktyJaja[N - 1][N - 1].x, punktyJaja[N - 1][N - 1].y - 5, punktyJaja[N - 1][N - 1].z);
345 for (int i = 1; i < N / 2 + 1; i++) {
346 int pom = N - i;
347 for (int j = 0; j < N - 1; j++) {
348 glVertex3f(punktyJaja[i][j].x, punktyJaja[i][j].y - 5, punktyJaja[i][j].z);
349 glVertex3f(punktyJaja[i - 1][j + 1].x, punktyJaja[i - 1][j + 1].y - 5, punktyJaja[i - 1][j + 1].z);
350 if (pom != N) {
351 glVertex3f(punktyJaja[i][0].x, punktyJaja[i][0].y - 5, punktyJaja[i][0].z);
352 glVertex3f(punktyJaja[pom - 1][N - 1].x, punktyJaja[pom - 1][N - 1].y - 5, punktyJaja[pom - 1][N - 1].z);
353 }
354 }
355 }
356
357 glEnd();
358 }
359 // Kolorki
360 else if (model == 3) {
361 glBegin(GL_TRIANGLES);
362 for (int i = N / 2; i < N; i++) {
363 int pom = N - i;
364 for (int j = 0; j < N - 1; j++) {
365 if (i == N - 1) {
366 glNormal3f(-punktyJaja[i][j].xV, -punktyJaja[i][j].yV, -punktyJaja[i][j].zV);
367 glTexCoord2f(-punktyJaja[i][j].i, -punktyJaja[i][j].j);
368 glVertex3f(punktyJaja[i][j].x, punktyJaja[i][j].y - 5, punktyJaja[i][j].z);
369 glNormal3f(-punktyJaja[i][j + 1].xV, -punktyJaja[i][j + 1].yV, -punktyJaja[i][j + 1].zV);
370 glTexCoord2f(-punktyJaja[i][j + 1].i, -punktyJaja[i][j + 1].j);
371 glVertex3f(punktyJaja[i][j + 1].x, punktyJaja[i][j + 1].y - 5, punktyJaja[i][j + 1].z);
372 glNormal3f(-punktyJaja[0][0].xV, -punktyJaja[0][0].yV, -punktyJaja[0][0].zV);
373 glTexCoord2f(-punktyJaja[0][0].i, -punktyJaja[0][0].j);
374 glVertex3f(punktyJaja[0][0].x, punktyJaja[0][0].y - 5, punktyJaja[0][0].z);
375 }
376 else {
377 glNormal3f(-punktyJaja[i][j].xV, -punktyJaja[i][j].yV, -punktyJaja[i][j].zV);
378 glTexCoord2f(-punktyJaja[i][j].i, -punktyJaja[i][j].j);
379 glVertex3f(punktyJaja[i][j].x, punktyJaja[i][j].y - 5, punktyJaja[i][j].z);
380 glNormal3f(-punktyJaja[i + 1][j].xV, -punktyJaja[i + 1][j].yV, -punktyJaja[i + 1][j].zV);
381 glTexCoord2f(-punktyJaja[i + 1][j].i, -punktyJaja[ i+ 1][j].j);
382 glVertex3f(punktyJaja[i + 1][j].x, punktyJaja[i + 1][j].y - 5, punktyJaja[i + 1][j].z);
383 glNormal3f(-punktyJaja[i + 1][j + 1].xV, -punktyJaja[i + 1][j + 1].yV, -punktyJaja[i + 1][j + 1].zV);
384 glTexCoord2f(-punktyJaja[i + 1][j].i, -punktyJaja[i + 1][j].j);
385 glVertex3f(punktyJaja[i + 1][j + 1].x, punktyJaja[i + 1][j + 1].y - 5, punktyJaja[i + 1][j + 1].z);
386
387 glNormal3f(-punktyJaja[i][j].xV, -punktyJaja[i][j].yV, -punktyJaja[i][j].zV);
388 glTexCoord2f(-punktyJaja[i][j].i, -punktyJaja[i][j].j);
389 glVertex3f(punktyJaja[i][j].x, punktyJaja[i][j].y - 5, punktyJaja[i][j].z);
390 glNormal3f(-punktyJaja[i][j + 1].xV, -punktyJaja[i][j + 1].yV, -punktyJaja[i][j + 1].zV);
391 glTexCoord2f(-punktyJaja[i][j + 1].i, -punktyJaja[i][j + 1].j);
392 glVertex3f(punktyJaja[i][j + 1].x, punktyJaja[i][j + 1].y - 5, punktyJaja[i][j + 1].z);
393 glNormal3f(-punktyJaja[i + 1][j + 1].xV, -punktyJaja[i + 1][j + 1].yV, -punktyJaja[i + 1][j + 1].zV);
394 glTexCoord2f(-punktyJaja[i + 1][j + 1].i, -punktyJaja[i + 1][j + 1].j);
395 glVertex3f(punktyJaja[i + 1][j + 1].x, punktyJaja[i + 1][j + 1].y - 5, punktyJaja[i + 1][j + 1].z);
396 }
397 if (pom != N) {
398 glNormal3f(-punktyJaja[i][0].xV, -punktyJaja[i][0].yV, -punktyJaja[i][0].zV);
399 glTexCoord2f(-punktyJaja[i][0].i, -punktyJaja[i][0].j);
400 glVertex3f(punktyJaja[i][0].x, punktyJaja[i][0].y - 5, punktyJaja[i][0].z);
401 glNormal3f(punktyJaja[pom][N - 1].xV, punktyJaja[pom][N - 1].yV, punktyJaja[pom][N - 1].zV);
402 glTexCoord2f(punktyJaja[pom][N - 1].i, punktyJaja[pom][N - 1].j);
403 glVertex3f(punktyJaja[pom][N - 1].x, punktyJaja[pom][N - 1].y - 5, punktyJaja[pom][N - 1].z);
404 glNormal3f(punktyJaja[pom + 1][N - 1].xV, punktyJaja[pom + 1][N - 1].yV, punktyJaja[pom + 1][N - 1].zV);
405 glTexCoord2f(punktyJaja[pom + 1][N - 1].i, punktyJaja[pom + 1][N - 1].j);
406 glVertex3f(punktyJaja[pom + 1][N - 1].x, punktyJaja[pom + 1][N - 1].y - 5, punktyJaja[pom + 1][N - 1].z);
407
408 if (i != N / 2) {
409 glNormal3f(-punktyJaja[i][0].xV, -punktyJaja[i][0].yV, -punktyJaja[i][0].zV);
410 glTexCoord2f(-punktyJaja[i][0].i, -punktyJaja[i][0].j);
411 glVertex3f(punktyJaja[i][0].x, punktyJaja[i][0].y - 5, punktyJaja[i][0].z);
412 glNormal3f(-punktyJaja[i - 1][0].xV, -punktyJaja[i - 1][0].yV, -punktyJaja[i - 1][0].zV);
413 glTexCoord2f(-punktyJaja[i - 1][0].i, -punktyJaja[i - 1][0].j);
414 glVertex3f(punktyJaja[i - 1][0].x, punktyJaja[i - 1][0].y - 5, punktyJaja[i - 1][0].z);
415 glNormal3f(punktyJaja[pom + 1][N - 1].xV, punktyJaja[pom + 1][N - 1].yV, punktyJaja[pom + 1][N - 1].zV);
416 glTexCoord2f(punktyJaja[pom + 1][N - 1].i, punktyJaja[pom + 1][N - 1].j);
417 glVertex3f(punktyJaja[pom + 1][N - 1].x, punktyJaja[pom + 1][N - 1].y - 5, punktyJaja[pom + 1][N - 1].z);
418 }
419 }
420 }
421 }
422 glNormal3f(-punktyJaja[0][0].xV, -punktyJaja[0][0].yV, -punktyJaja[0][0].zV);
423 glTexCoord2f(-punktyJaja[0][0].i, -punktyJaja[0][0].j);
424 glVertex3f(punktyJaja[0][0].x, punktyJaja[0][0].y - 5, punktyJaja[0][0].z);
425 glNormal3f(-punktyJaja[N - 1][0].xV, -punktyJaja[N - 1][0].yV, -punktyJaja[N - 1][0].zV);
426 glTexCoord2f(-punktyJaja[N - 1][0].i,- punktyJaja[N - 1][0].j);
427 glVertex3f(punktyJaja[N - 1][0].x, punktyJaja[N - 1][0].y - 5, punktyJaja[N - 1][0].z);
428 glNormal3f(punktyJaja[1][N - 1].xV, punktyJaja[1][N - 1].yV, punktyJaja[1][N - 1].zV);
429 glTexCoord2f(punktyJaja[1][N - 1].i, punktyJaja[1][N - 1].j);
430 glVertex3f(punktyJaja[1][N - 1].x, punktyJaja[1][N - 1].y - 5, punktyJaja[1][N - 1].z);
431
432 glNormal3f(punktyJaja[0][0].xV, punktyJaja[0][0].yV, punktyJaja[0][0].zV);
433 glTexCoord2f(punktyJaja[0][0].i, punktyJaja[0][0].j);
434 glVertex3f(punktyJaja[0][0].x, punktyJaja[0][0].y - 5, punktyJaja[0][0].z);
435 glNormal3f(punktyJaja[1][0].xV, punktyJaja[1][0].yV, punktyJaja[1][0].zV);
436 glTexCoord2f(punktyJaja[1][0].i, punktyJaja[1][0].j);
437 glVertex3f(punktyJaja[1][0].x, punktyJaja[1][0].y - 5, punktyJaja[1][0].z);
438 glNormal3f(-punktyJaja[N - 1][N - 1].xV, -punktyJaja[N - 1][N - 1].yV, -punktyJaja[N - 1][N - 1].zV);
439 glTexCoord2f(-punktyJaja[N - 1][N - 1].i, -punktyJaja[N - 1][N - 1].j);
440 glVertex3f(punktyJaja[N - 1][N - 1].x, punktyJaja[N - 1][N - 1].y - 5, punktyJaja[N - 1][N - 1].z);
441
442 for (int i = 0; i < N/ 2 + 1; i++) {
443 int pom = N - i;
444 for (int j = 0; j < N - 1; j++) {
445 if (i == 1) {
446 glNormal3f(punktyJaja[i][j].xV, punktyJaja[i][j].yV, punktyJaja[i][j].zV);
447 glTexCoord2f(punktyJaja[i][j].i, punktyJaja[i][j].j);
448 glVertex3f(punktyJaja[i][j].x, punktyJaja[i][j].y - 5, punktyJaja[i][j].z);
449 glNormal3f(punktyJaja[i][j + 1].xV, punktyJaja[i][j + 1].yV, punktyJaja[i][j + 1].zV);
450 glTexCoord2f(punktyJaja[i][j + 1].i, punktyJaja[i][j + 1].j);
451 glVertex3f(punktyJaja[i][j + 1].x, punktyJaja[i][j + 1].y - 5, punktyJaja[i][j + 1].z);
452 glNormal3f(punktyJaja[0][0].xV, punktyJaja[0][0].yV, punktyJaja[0][0].zV);
453 glTexCoord2f(punktyJaja[0][0].i, punktyJaja[0][0].j);
454 glVertex3f(punktyJaja[0][0].x, punktyJaja[0][0].y - 5, punktyJaja[0][0].z);
455 }
456 else {
457 if (i != 0) {
458 glNormal3f(punktyJaja[i][j].xV, punktyJaja[i][j].yV, punktyJaja[i][j].zV);
459 glTexCoord2f(punktyJaja[i][j].i, punktyJaja[i][j].j);
460 glVertex3f(punktyJaja[i][j].x, punktyJaja[i][j].y - 5, punktyJaja[i][j].z);
461 glNormal3f(punktyJaja[i - 1][j].xV, punktyJaja[i - 1][j].yV, punktyJaja[i - 1][j].zV);
462 glTexCoord2f(punktyJaja[i - 1][j].i, punktyJaja[i - 1][j].j);
463 glVertex3f(punktyJaja[i - 1][j].x, punktyJaja[i - 1][j].y - 5, punktyJaja[i - 1][j].z);
464 glNormal3f(punktyJaja[i - 1][j + 1].xV, punktyJaja[i - 1][j + 1].yV, punktyJaja[i - 1][j + 1].zV);
465 glTexCoord2f(punktyJaja[i - 1][j + 1].i, punktyJaja[i - 1][j + 1].j);
466 glVertex3f(punktyJaja[i - 1][j + 1].x, punktyJaja[i - 1][j + 1].y - 5, punktyJaja[i - 1][j + 1].z);
467 }
468 glNormal3f(punktyJaja[i][j].xV, punktyJaja[i][j].yV, punktyJaja[i][j].zV);
469 glTexCoord2f(punktyJaja[i][j].i, punktyJaja[i][j].j);
470 glVertex3f(punktyJaja[i][j].x, punktyJaja[i][j].y - 5, punktyJaja[i][j].z);
471 glNormal3f(punktyJaja[i][j + 1].xV, punktyJaja[i][j + 1].yV, punktyJaja[i][j + 1].zV);
472 glTexCoord2f(punktyJaja[i][j + 1].i, punktyJaja[i][j + 1].j);
473 glVertex3f(punktyJaja[i][j + 1].x, punktyJaja[i][j + 1].y - 5, punktyJaja[i][j + 1].z);
474 glNormal3f(punktyJaja[i - 1][j + 1].xV, punktyJaja[i - 1][j + 1].yV, punktyJaja[i - 1][j + 1].zV);
475 glTexCoord2f(punktyJaja[i - 1][j + 1].i, punktyJaja[i - 1][j + 1].j);
476 glVertex3f(punktyJaja[i - 1][j + 1].x, punktyJaja[i - 1][j + 1].y - 5, punktyJaja[i - 1][j + 1].z);
477 }
478 if (pom != N) {
479 glNormal3f(punktyJaja[i][0].xV, punktyJaja[i][0].yV, punktyJaja[i][0].zV);
480 glTexCoord2f(punktyJaja[i][0].i, punktyJaja[i][0].j);
481 glVertex3f(punktyJaja[i][0].x, punktyJaja[i][0].y - 5, punktyJaja[i][0].z);
482 glNormal3f(-punktyJaja[pom][N - 1].xV, -punktyJaja[pom][N - 1].yV, -punktyJaja[pom][N - 1].zV);
483 glTexCoord2f(-punktyJaja[pom][N - 1].i, -punktyJaja[pom][N - 1].j);
484 glVertex3f(punktyJaja[pom][N - 1].x, punktyJaja[pom][N - 1].y - 5, punktyJaja[pom][N - 1].z);
485 glNormal3f(-punktyJaja[pom - 1][N - 1].xV, -punktyJaja[pom - 1][N - 1].yV, -punktyJaja[pom - 1][N - 1].zV);
486 glTexCoord2f(-punktyJaja[pom - 1][N - 1].i, -punktyJaja[pom - 1][N - 1].j);
487 glVertex3f(punktyJaja[pom - 1][N - 1].x, punktyJaja[pom - 1][N - 1].y - 5, punktyJaja[pom - 1][N - 1].z);
488 glNormal3f(punktyJaja[i][0].xV, punktyJaja[i][0].yV, punktyJaja[i][0].zV);
489 glTexCoord2f(punktyJaja[i][0].i, punktyJaja[i][0].j);
490 glVertex3f(punktyJaja[i][0].x, punktyJaja[i][0].y - 5, punktyJaja[i][0].z);
491 glNormal3f(punktyJaja[i + 1][0].xV, punktyJaja[i + 1][0].yV, punktyJaja[i + 1][0].zV);
492 glTexCoord2f(punktyJaja[i + 1][0].i, punktyJaja[i + 1][0].j);
493 glVertex3f(punktyJaja[i + 1][0].x, punktyJaja[i + 1][0].y - 5, punktyJaja[i + 1][0].z);
494 glNormal3f(-punktyJaja[pom - 1][N - 1].xV, -punktyJaja[pom - 1][N - 1].yV, -punktyJaja[pom - 1][N - 1].zV);
495 glTexCoord2f(-punktyJaja[pom - 1][N - 1].i, -punktyJaja[pom - 1][N - 1].j);
496 glVertex3f(punktyJaja[pom - 1][N - 1].x, punktyJaja[pom - 1][N - 1].y - 5, punktyJaja[pom - 1][N - 1].z);
497 }
498 }
499 }
500 glEnd();
501 }
502 else if (model == 4) {
503 glutSolidTeapot(3.0); // Narysowanie obrazu czajnika do herbaty
504 }
505}
506
507void RenderScene(void)
508{
509 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
510 glLoadIdentity();
511 if (status == 1) {
512 theta += delta_x*pix2angle / 20.0;
513 phi += delta_y*pix2angle / 20.;
514 if (phi>2 * M_PI)
515 phi = 0;
516 if (phi<0)
517 phi = 2 * M_PI;
518 if (phi>M_PI / 2)
519 fix = -1.0;
520 else
521 fix = 1.0;
522 if (phi>M_PI + (M_PI / 2))
523 fix = 1.0;
524 }
525 else if (status == 2)
526 {
527 R += delta_y*pix2angle / 20.0;
528 }
529 viewer[0] = R * cos(theta) * cos(phi);
530 viewer[1] = R * sin(phi);
531 viewer[2] = R * sin(theta) * cos(phi);
532 if (R > 18.00) {
533 R = 9.00;
534 }
535 if (R < 0.50) {
536 R = 9.00;
537 }
538 gluLookAt(viewer[0], viewer[1], viewer[2], 0.0, 0.0, 0.0, 0.0, fix, 0.0);
539
540 glColor3f(1.0f, 1.0f, 1.0f);
541 Axes();
542 Jajo();
543 glFlush();
544 glutSwapBuffers();
545}
546
547void MyInit(void)
548{
549 GLbyte *pBytes;
550 GLint ImWidth, ImHeight, ImComponents;
551 GLenum ImFormat;
552 glColor3f(1.0f, 0.0f, 0.0f);
553 GLfloat mat_ambient[] = { 1.0, 1.0, 1.0, 1.0 };
554 GLfloat mat_diffuse[] = { 1.0, 1.0, 1.0, 1.0 };
555 GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 };
556 GLfloat mat_shininess = { 50.0 };
557 GLfloat light_position[] = { 0.0, 0.0, 10.0, 1.0 };
558 GLfloat light_ambient[] = { 0.2, 0.2, 0.2, 1.0 };
559 GLfloat light_diffuse[] = { 1.0, 1.0, 1.0, 1.0 };
560 GLfloat light_specular[] = { 1.0, 1.0, 1.0, 1.0 };
561 GLfloat att_constant = 1.0;
562 GLfloat att_linear = 0.05;
563 GLfloat att_quadratic = 0.001;
564 glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
565 glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
566 glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
567 glMaterialf(GL_FRONT, GL_SHININESS, mat_shininess);
568 glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
569 glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
570 glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
571 glLightfv(GL_LIGHT0, GL_POSITION, light_position);
572 glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, att_constant);
573 glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, att_linear);
574 glLightf(GL_LIGHT0, GL_QUADRATIC_ATTENUATION, att_quadratic);
575 glShadeModel(GL_SMOOTH);
576 glEnable(GL_LIGHTING);
577 glEnable(GL_LIGHT0);
578 glEnable(GL_DEPTH_TEST);
579 nic();
580 //glEnable(GL_CULL_FACE);
581 pBytes = LoadTGAImage("mojapisanka3.tga", &ImWidth, &ImHeight, &ImComponents, &ImFormat);
582 glTexImage2D(GL_TEXTURE_2D, 0, ImComponents, ImWidth, ImHeight, 0, ImFormat, GL_UNSIGNED_BYTE, pBytes);
583 free(pBytes);
584 glEnable(GL_TEXTURE_2D);
585 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
586 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
587 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
588 glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
589}
590
591void keys(unsigned char key, int x, int y)
592{
593 if (key == 'q') model = 1;
594 if (key == 'w') model = 2;
595 if (key == 'e') model = 3;
596 if (key == 'r') model = 4;
597
598 RenderScene();
599}
600
601void ChangeSize(GLsizei horizontal, GLsizei vertical)
602{
603 pix2angle = 360.0 / (float)horizontal;
604 glMatrixMode(GL_PROJECTION);
605 glLoadIdentity();
606 gluPerspective(70, 1.0, 1.0, 30.0);
607 if (horizontal <= vertical)
608 glViewport(0, (vertical - horizontal) / 2, horizontal, horizontal);
609
610 else
611 glViewport((horizontal - vertical) / 2, 0, vertical, vertical);
612 glMatrixMode(GL_MODELVIEW);
613 glLoadIdentity();
614}
615
616void main(void)
617{
618 int foo = 1;
619 char * bar[1] = { " " };
620 glutInit(&foo, bar);
621 glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
622 glutInitWindowSize(1000, 1000);
623 glutCreateWindow("OpenGL - teksturowanie powierzchni obiektów");
624 glutDisplayFunc(RenderScene);
625 glutReshapeFunc(ChangeSize);
626 MyInit();
627 glEnable(GL_DEPTH_TEST);
628 glutKeyboardFunc(keys);
629 glutMouseFunc(Mouse);
630 glutMotionFunc(Motion);
631 glutMainLoop();
632}
633© 2019 GitHub, Inc.
634Terms
635Privacy
636Security
637Status
638Help
639Contact GitHub
640Pricing
641API
642Training
643Blog
644About