Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.191.132.194] |
|
Сообщ.
#1
,
|
|
|
Пытаюсь по аналогии с http://www.gamedev.ru/code/articles/?id=4172 сделать отражение комнаты на сферу с помощбю кубических текстур.и что-то никак не получается.в чем можеь быть дело?
Вначале в ините() создаю текстурный объект,а потом по мере рисование сцены,пишу в него картинку.Но сфера рисуется тупо своим цветом без текстуры.вот не могу разобраться,что не так void Init() { glClearColor ( 0.0f, 0.0f, 0.0f, 0.0f ); glHint ( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST ); glShadeModel(GL_SMOOTH); glEnable(GL_DEPTH_TEST); CubeMapTarget[0] = GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT; CubeMapTarget[1] = GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT; CubeMapTarget[2] = GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT; CubeMapTarget[3] = GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT; CubeMapTarget[4] = GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT; CubeMapTarget[5] = GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT; glEnable ( GL_TEXTURE_CUBE_MAP_EXT ); glGenTextures ( 1, &texCubeMap ); glPixelStorei ( GL_UNPACK_ALIGNMENT, 1 ); glBindTexture ( GL_TEXTURE_CUBE_MAP_EXT, texCubeMap ); glTexParameteri ( GL_TEXTURE_CUBE_MAP_EXT, GL_TEXTURE_WRAP_S, GL_REPEAT ); glTexParameteri ( GL_TEXTURE_CUBE_MAP_EXT, GL_TEXTURE_WRAP_T, GL_REPEAT ); glTexParameteri ( GL_TEXTURE_CUBE_MAP_EXT, GL_TEXTURE_WRAP_R, GL_REPEAT ); glTexParameteri ( GL_TEXTURE_CUBE_MAP_EXT, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR ); glTexParameteri ( GL_TEXTURE_CUBE_MAP_EXT, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); for ( int i = 0; i < 6; i++ ) { glTexImage2D ( CubeMapTarget[i], 0, GL_RGB, CUBEMAP_SIZE, CUBEMAP_SIZE, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL); } glDisable ( GL_TEXTURE_CUBE_MAP_EXT); } void CreateCubemap() { glViewport ( CUBEMAP_OFFSET, CUBEMAP_OFFSET, CUBEMAP_SIZE, CUBEMAP_SIZE ); glMatrixMode ( GL_PROJECTION ); glLoadIdentity(); gluPerspective ( 90.0, 1.0, 1.5, 100.0 ); glMatrixMode ( GL_MODELVIEW ); glEnable ( GL_TEXTURE_2D ); for ( int i = 0; i < 6; i++ ) { glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glLoadIdentity(); switch(i) { case 0: gluLookAt(0,0,0,1,0,0,0,1,0); break; case 1: gluLookAt(0,0,0,-1,0,0,0,1,0); break; case 2: gluLookAt(0,0,0,0,1,0,0,0,1); break; case 3: gluLookAt(0,0,0,0,-1,0,0,0,1); break; case 4: gluLookAt(0,0,0,0,0,1,0,1,0); break; case 5: gluLookAt(0,0,0,0,0,-1,0,1,0); break; } RenderObjects(); glEnable ( GL_TEXTURE_CUBE_MAP_EXT); glBindTexture ( GL_TEXTURE_CUBE_MAP_EXT, texCubeMap ); glCopyTexSubImage2D ( CubeMapTarget[i], 0, 0, 0, CUBEMAP_OFFSET, CUBEMAP_OFFSET, CUBEMAP_SIZE, CUBEMAP_SIZE ); glDisable ( GL_TEXTURE_CUBE_MAP_EXT ); } glDisable ( GL_TEXTURE_2D ); reshape ( ViewWidth, ViewHeight ); } void RenderSphere() { float m1[16],m2[16]; glGetFloatv ( GL_MODELVIEW_MATRIX, m1 ); transpose ( m1, m2 ); glEnable ( GL_TEXTURE_CUBE_MAP_EXT ); glTexGeni ( GL_S, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_EXT ); glTexGeni ( GL_T, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_EXT ); glTexGeni ( GL_R, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP_EXT ); glEnable ( GL_TEXTURE_GEN_S ); glEnable ( GL_TEXTURE_GEN_T ); glEnable ( GL_TEXTURE_GEN_R ); glBindTexture ( GL_TEXTURE_CUBE_MAP_EXT, texCubeMap ); glPushMatrix(); glMatrixMode ( GL_TEXTURE ); glPushMatrix(); glLoadMatrixf ( m2 ); glColor3f(1.0,0.0,0.0); glutSolidSphere ( 0.5f, 64.0f, 64.0f ); glPopMatrix(); glMatrixMode ( GL_MODELVIEW ); glPopMatrix(); glDisable ( GL_TEXTURE_GEN_S ); glDisable ( GL_TEXTURE_GEN_T ); glDisable ( GL_TEXTURE_GEN_R ); glDisable ( GL_TEXTURE_CUBE_MAP_EXT ); } void Draw() { CreateCubemap(); glViewport ( 0, 0, ViewWidth, ViewHeight ); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective ( 60.0, (double)ViewWidth/(double)ViewHeight, 1.0, 1000.0 ); glMatrixMode (GL_MODELVIEW); glLoadIdentity(); gluLookAt(viewer_params[0],viewer_params[1],viewer_params[2], viewer_params[3],viewer_params[4],viewer_params[5], viewer_params[6],viewer_params[7],viewer_params[8]); glClear ( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); RenderSphere(); RenderObjects(); glFlush(); glutSwapBuffers(); } |
Сообщ.
#2
,
|
|
|
Скорей всего дело в том, что ты не генерируешь mipmap level, а при рисовании сферы должна использоваться текстура, которой у тебя нет. Поэтому либо сгенерируй все уровни (glTexParameteri ( GL_TEXTURE_CUBE_MAP, GL_GENERATE_MIPMAP, GL_TRUE ), либо поменяй в Init-е GL_LINEAR_MIPMAP_LINEAR на GL_LINEAR.
|