CyberForum.ru - Форум программистов и сисадминов
Вернуться   Форум программистов и сисадминов CyberForum.ru > Форум программистов > Форум Программирование игр и графики > Форум OpenGL

Ответ Создать новую тему
 
Старый 03.02.2012, 14:08   #1
Rameron
Новичок
 
Регистрация: 07.02.2011
Сообщений: 54
Репутация: 1 (1)
По умолчанию Полупрозрачные грани?!

Рисую куб, на каждую с граней накладываю текстуру. В итоге, при вращении грани "просвечиваются"...

Вот функция прорисовки:


Код Java(TM) 2 Platform Standard Edition 5.0
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
void renderCube()
 
    {
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
 
        glPushMatrix();
            glTranslatef(150, 150, 150);                
            glRotatef(fXRotate, 0f, 0f, 1f);            
            glRotatef(fYRotate, 1f, 0f, 0f);            
            glTranslatef(-150, -150, -150);             
            
            glColor3f(1, 1, 1);                                 //Устанавливаем белый цвет рисования
            glEnable (GL_TEXTURE_2D);                           //Включаем текстурирование
            glBindTexture(GL_TEXTURE_2D, 4);                    //Выбираем с массива 2D-текстур тестуру с номером 4
            
            //Синяя грань
            //glColor3f(0, 0, 1);
            
            glBegin(GL_POLYGON);
                glTexCoord2f(0,0); glVertex3f(100,100,100);
                glTexCoord2f(0,1); glVertex3f(200,100,100);
                glTexCoord2f(1,1); glVertex3f(200,100,200);
                glTexCoord2f(1,0); glVertex3f(100,100,200);
            glEnd();
            
            //Зеленая грань
            //glColor3f(0, 1, 0);
            
            glBindTexture(GL_TEXTURE_2D, 3);
            
            glBegin(GL_POLYGON);
                glTexCoord2f(0,0); glVertex3f(100,100,100);
                glTexCoord2f(0,1); glVertex3f(100,100,200);
                glTexCoord2f(1,1); glVertex3f(100,200,200);
                glTexCoord2f(1,0); glVertex3f(100,200,100);
            glEnd(); 
            
            //Желтая грань
            //glColor3f(1, 1, 0);
            
            glBindTexture(GL_TEXTURE_2D, 2);
            
            glBegin(GL_POLYGON);
                glTexCoord2f(0,0); glVertex3f(200,100,100);
                glTexCoord2f(0,1); glVertex3f(200,100,200);
                glTexCoord2f(1,1); glVertex3f(200,200,200);
                glTexCoord2f(1,0); glVertex3f(200,200,100);
            glEnd(); 
            
            //Фиолетовая грань
            //glColor3f(1, 0, 1);
            
            glBindTexture(GL_TEXTURE_2D, 1);
            
            glBegin(GL_POLYGON);
                glTexCoord2f(0,0); glVertex3f(100,100,100);
                glTexCoord2f(0,1); glVertex3f(200,100,100);
                glTexCoord2f(1,1); glVertex3f(200,200,100);
                glTexCoord2f(1,0); glVertex3f(100,200,100);
            glEnd(); 
            
            //Красная грань
            //glColor3f(1, 0, 0);
            
            glBindTexture(GL_TEXTURE_2D, 4);
 
            glBegin(GL_POLYGON);                                //Рисуем полигон. К его углам привязываем углы текстуры     
                glTexCoord2f(0,0); glVertex3f(100,100,200);
                glTexCoord2f(0,1); glVertex3f(100,200,200);
                glTexCoord2f(1,1); glVertex3f(200,200,200);
                glTexCoord2f(1,0); glVertex3f(200,100,200);
            glEnd(); 
            
            //Циановая грань
            //glColor3f(0, 1, 1);
            
            glBindTexture(GL_TEXTURE_2D, 3);
            
            glBegin(GL_POLYGON);                                //Рисуем полигон. К его углам привязываем углы текстуры             
                glTexCoord2f(0,0); glVertex3f(100,200,100);
                glTexCoord2f(0,1); glVertex3f(200,200,100);
                glTexCoord2f(1,1); glVertex3f(200,200,200);
                glTexCoord2f(1,0); glVertex3f(100,200,200);
            glEnd();
            
            glDisable(GL_TEXTURE_2D);                           //Выключаем текстурирование
            
        glPopMatrix();
 
    }   
Помогите, пожалуйста, решить эту проблему)
Миниатюры
Нажмите на изображение для увеличения
Название: OpacCube.jpg
Просмотров: 56
Размер:	44.2 Кб
ID:	124866  
Rameron вне форума
Другие темы раздела
glutSwapBuffers() and glFlush() OpenGL
Хочу обработать нажатие мыши. Алгоритм примерно таков: дисплей { clear цвета рисование статических обьектов (например рисую одну точку) glutSwapBuffers() // меняю буфер. Вот тут первый вопросс - меняется буфер на котором я поставил точку строчкой выше на тот что был и.... glutSwapBuffers() and glFlush()
OpenGL Написать программу «Манипулятор робота» так, чтобы она рисовала манипулятор из n сегментов.
Здравствуйте)). Прошу помочь. Написать программу «Манипулятор робота» так, чтобы она рисовала манипулятор из n сегментов. Для поворота всех сегментов применяйте две клавиши курсора "стрелка вверх/вниз". Текущий сегмент (который будет поворачиваться этими клавишами) должен быть выделен цветом..... Написать программу «Манипулятор робота» так, чтобы она рисовала манипулятор из n сегментов.
Старый 03.02.2012, 17:12   #2
Sergeiy_98
Форумчанин
 
Регистрация: 20.12.2011
Сообщений: 573
Репутация: 402 (360)
По умолчанию Re: Полупрозрачные грани?!

Прозрачность можно установит glEnable (GL_ALPHA_TEST);
Разрешение цветов glEnable(GL_BLEND);
И алгоритм сложения glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
Это в инциализации. А сама интенсивность прзрачности четвертым компонентом glColor4d (0, 0, 0, 1);
Может эти вещи у Вас есть, но в коде их не увидел
Sergeiy_98 вне форума
Старый 03.02.2012, 17:37  [ТС]   #3
Rameron
Новичок
 
Регистрация: 07.02.2011
Сообщений: 54
Репутация: 1 (1)
По умолчанию Re: Полупрозрачные грани?!

Цитата Сообщение от Sergeiy_98 Посмотреть сообщение
Прозрачность можно установит glEnable (GL_ALPHA_TEST);
Разрешение цветов glEnable(GL_BLEND);
И алгоритм сложения glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
Это в инциализации. А сама интенсивность прзрачности четвертым компонентом glColor4d (0, 0, 0, 1);
Может эти вещи у Вас есть, но в коде их не увидел
Вся проблема в том, что мне как раз прозрачность и надо убрать. Мне надо получить сплошной куб, который при вращении таким и остается.

Возможно грани нужно рисовать в некой последовательности чтобы этого избежать?
Rameron вне форума
Старый 03.02.2012, 17:54   #4
Sergeiy_98
Форумчанин
 
Регистрация: 20.12.2011
Сообщений: 573
Репутация: 402 (360)
По умолчанию Re: Полупрозрачные грани?!

Может тогда glDisable(GL_ALPHA_TEST)?
Sergeiy_98 вне форума
Старый 03.02.2012, 18:17  [ТС]   #5
Rameron
Новичок
 
Регистрация: 07.02.2011
Сообщений: 54
Репутация: 1 (1)
По умолчанию Re: Полупрозрачные грани?!

Цитата Сообщение от Sergeiy_98 Посмотреть сообщение
Может тогда glDisable(GL_ALPHA_TEST)?
Только проблема в том, что с альфа каналами я вообще не работаю и они у меня и так отключены. Да и текстуры сплошные.
Rameron вне форума
Старый 03.02.2012, 20:23  [ТС]   #6
Rameron
Новичок
 
Регистрация: 07.02.2011
Сообщений: 54
Репутация: 1 (1)
По умолчанию Re: Полупрозрачные грани?!

Помогите пожалуйста... Вот прилагаю саму программу...
Вращать куб стрелочками, увеличение/уменьшение NumLock 8 и 2.

P.S. Распаковать в папку, в названии которой нет русских символов или пробелов, и запустить OpenGL_Cube.bat
Вложения
Тип файла: zip OpenGL_Cube.zip (1.76 Мб, 10 просмотров)
Rameron вне форума
Старый 03.02.2012, 21:55   #7
Sergeiy_98
Форумчанин
 
Регистрация: 20.12.2011
Сообщений: 573
Репутация: 402 (360)
По умолчанию Re: Полупрозрачные грани?!

Вот я набросал 2 сферы перекрывающиеся и если поиграть последним параметром glColor4d то увидите эффект.

Код 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
        void DrawScene(HDC hdc)
    {
        
   glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
   glClearColor (0.0f, 1.0f, 1.0f, 1);              
 
             GLUquadricObj *quadObj1;           
        quadObj1 = gluNewQuadric ();
 
        GLUquadricObj *quadObj2;        
        quadObj2 = gluNewQuadric ();
 
 
            glEnable (GL_ALPHA_TEST);
            glEnable (GL_BLEND);
        glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
 
// ==================================================
 
            glPushMatrix ();     
        gluQuadricDrawStyle (quadObj1, GLU_FILL);
        glTranslated ( 0.1, 0, 0.2);
        glColor4d (1, 0, 0, 0.7); 
        gluSphere ( quadObj1, 2.0, 100, 100);
            glPopMatrix (); 
            glEnd();
// ==============================================
        glPushMatrix ();
        gluQuadricDrawStyle (quadObj2, GLU_FILL);
        glTranslated ( 3, 0, 0.0);
        glColor4d (0, 1, 0, 0.3);  
        gluSphere ( quadObj2, 2.0, 100, 100);  
            glPopMatrix ();
            gluDeleteQuadric (quadObj1);    
            glPopMatrix (); 
            glEnd();
 
            glDisable(GL_BLEND);
            glDisable(GL_ALPHA_TEST);
            glFinish(); 
           SwapBuffers(hdc);
        
                return;             }
 
Всё работает.
Sergeiy_98 вне форума
Старый 04.02.2012, 00:01  [ТС]   #8
Rameron
Новичок
 
Регистрация: 07.02.2011
Сообщений: 54
Репутация: 1 (1)
По умолчанию Re: Полупрозрачные грани?!

Да, по моему Вы не поняли моей проблемы... Или я чего-то не понял...

Переделал ваш пример под LWJGL, поиграл с уровнем альфа канала (спасибо, кстати, большое, сферу я еще не знал как рисовать), но вот это делу не поможет... Я всё равно не могу понять ПОЧЕМУ у меня в программе налезают грани куба друг на друга по время вращения...
Rameron вне форума
Старый 04.02.2012, 00:17  [ТС]   #9
Rameron
Новичок
 
Регистрация: 07.02.2011
Сообщений: 54
Репутация: 1 (1)
По умолчанию Re: Полупрозрачные грани?!

Вот к примеру, смотрите вложение. Это куб, повернутый к наблюдателю одной с граней.

Наблюдатель должен видеть только эту грань с текстурой бамбука, но каким-то образом он еще видит и противоположную и нижнюю грани. В этом и проблема.
Миниатюры
Нажмите на изображение для увеличения
Название: Example.jpg
Просмотров: 15
Размер:	87.8 Кб
ID:	125005  
Rameron вне форума
После регистрации реклама в сообщениях будет скрыта
Старый 04.02.2012, 23:19   #10
goto
Новичок
 
Аватар для goto
 
Регистрация: 04.04.2011
Сообщений: 78
Записей в блоге: 1
Репутация: 33 (33)
По умолчанию Re: Полупрозрачные грани?!

Рисовать треугольники нужно в порядке ССW или СW, а если лень
пользуй glDisable(GL_CULL_FACE)
goto вне форума
Ответ Создать новую тему

Похожие темы
Тема Автор
Web-дизайн Как отрезать полупрозрачные рамки?
Доброго времени суток У меня имеется некоторый графический файл он имеет не ровные границ я хотел бы его сохранить именно по контуру а не с прозрачной рамкой не подскажете как это сделать?
Kocha
Мониторы какие то сероватые полупрозрачные квадратики на мониторе
я не знаю что, либо моник либо видюха, но как бы я не пытался поменять драва и ось ни чего не получаеться, выступают полупрозрачные квадратики, размером 3 милиметра, по всему экрану, и как будто драва даже не устанавливал... Моник: Samatron 76 DF, надеюсь слышали про такой Видюха: NVIDIA GeForce...
AlexRed
Visual Basic Полупрозрачные тени от окон - возможно ли?
Подскажите, как создать полупрозрачные тени с плавными переходами (как в XP на менюшках) только не предлагайте SPI_SETDROPSHADOW - т.к. все должно работать не только в WIN XP. Пример желателен.
DForward
JavaScript Как сделать плавающие, полупрозрачные (не обязательно), перетаскиваемые div-блоки?
Вообщем, проблема в следующем: есть таблица - в ней N-ное количество строк. Некоторые позиции в строке - это гипперссылки, при нажатии на которые окрывается div-блок с дополнительной информацией. При небольшом значении N все хорошо - div-блок открывается после таблицы и все наглядно, все видно. А...
wjack
Web-мастеринг Грани таблицы
Как сделать так, чтобы рамка ячеек ОДНОГО столбца была сплошной, а рамка ячеек ДРУГОГО была только слева, справа и сверху? ____ ____ | | | |____| | Заранее спасибо!
Пушехвост
Опции темы

Текущее время: 14:54. Часовой пояс GMT +4.

Компьютерный форум программистов и сисадминов
Powered by vBulletin® Version 3.8.7 PL2
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Рейтинг@Mail.ru