Hi,
Ik zit wat te experimenteren met OpenGL en stuit op het volgende probleem: ik een quad en een paar vertexen. De quad heeft een texture, de vertexen een kleur. Als ik nu alleen de quad met die texture doe, dan gaat dat goed. Doe ik echter daarna een vertex met als kleur rood, dan verandert de kleur van de quad opeens ook in roodtinten! En dat ondanks glBegin/glEnd.
Het valt me trouwens op dat glLineWidth ook niet werkt.
Hoe los ik dit op?
Ik zit wat te experimenteren met OpenGL en stuit op het volgende probleem: ik een quad en een paar vertexen. De quad heeft een texture, de vertexen een kleur. Als ik nu alleen de quad met die texture doe, dan gaat dat goed. Doe ik echter daarna een vertex met als kleur rood, dan verandert de kleur van de quad opeens ook in roodtinten! En dat ondanks glBegin/glEnd.
Het valt me trouwens op dat glLineWidth ook niet werkt.
Hoe los ik dit op?
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
| #include <SDL/SDL_image.h> #include <GL/glut.h> #include <GL/gl.h> #include <GL/glu.h> SDL_Surface *img = IMG_Load("basictexture.png"); double near = 1.0, far = 600.5; double angle = 60; int w = 640, h = 480; GLuint texture = (GLuint)-1; #define EC() ec(__LINE__) void ec(int line) // error check { GLint err = glGetError(); if (err != GL_NO_ERROR) printf("GL error @ %d: %d/%x\n", line, err, err); } void redraw(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, texture); EC(); glBegin(GL_QUADS); double d = -420; glTexCoord2f(0.0, 0.0); glVertex3f(-320.0, -240.0, d); glTexCoord2f(1.0, 0.0); glVertex3f(320.0, -240.0, d / 2); glTexCoord2f(1.0, 1.0); glVertex3f(320.0, 240.0, d); glTexCoord2f(0.0, 1.0); glVertex3f(-320.0, 240.0, d / 3); glEnd(); EC(); glDisable(GL_TEXTURE_2D); EC(); glBegin(GL_LINES); // werkt niet glLineWidth(100.0); glColor3d(1.0, 0.0, 0.0); glVertex3d(-320, 0, d+5); glVertex3d(320, 0, d+5); glEnd(); glutSwapBuffers(); } int main(int argc, char *argv[]) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); glutInitWindowSize(w, h); glutCreateWindow("My first GLUT program"); EC(); glEnable(GL_TEXTURE_2D); EC(); glutDisplayFunc(redraw); glutIdleFunc(redraw); EC(); glMatrixMode(GL_PROJECTION); EC(); glLoadIdentity(); EC(); gluPerspective(angle, //view angle (double)w/(double)h, //aspect ratio near, //near clip far);//far clip EC(); glGenTextures(1, &texture); glBindTexture(GL_TEXTURE_2D, texture); EC(); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); EC(); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); EC(); glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); EC(); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); EC(); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img -> w, img -> h, 0, GL_RGB, GL_UNSIGNED_BYTE, img -> pixels); EC(); glDisable(GL_TEXTURE_2D); EC(); glutMainLoop(); return 0; } |
[ Voor 0% gewijzigd door BtM909 op 08-02-2012 12:06 ]
www.vanheusden.com